U
    \Sh                     @  s   d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZ dZeeZerddlmZ dd	lmZ G d
d dZG dd dZdS )z'Inventory utility functions for Sphinx.    )annotationsN)IOTYPE_CHECKINGCallableIterator)logging)	InventoryInventoryItemi @  )Builder)BuildEnvironmentc                   @  sf   e Zd ZdZdddddZdddd	Zd
dddZddddZddddZddddZ	dS )InventoryFileReaderzjA file reader for an inventory file.

    This reader supports mixture of texts and compressed texts.
    r   None)streamreturnc                 C  s   || _ d| _d| _d S )N    F)r   buffereof)selfr    r   H/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/util/inventory.py__init__   s    zInventoryFileReader.__init__)r   c                 C  s,   | j t}|dkrd| _|  j|7  _d S )Nr   T)r   readBUFSIZEr   r   )r   chunkr   r   r   read_buffer   s    zInventoryFileReader.read_bufferstrc                 C  sh   | j d}|dkr<| j d |  }| j |d d  | _ n(| jrT| j  }d| _ n|   |  }|S )N   
   r   )r   finddecoder   r   readline)r   posliner   r   r   r!   %   s    
zInventoryFileReader.readlinezIterator[str]c                 c  s   | j s|  }|r |V  q d S )N)r   r!   )r   r#   r   r   r   	readlines3   s    zInventoryFileReader.readlineszIterator[bytes]c                 c  s:   t  }| js,|   || jV  d| _q| V  d S )Nr   )zlibdecompressobjr   r   
decompressr   flush)r   Zdecompressorr   r   r   read_compressed_chunks9   s    z*InventoryFileReader.read_compressed_chunksc                 c  s^   d}|   D ]L}||7 }|d}|dkr|d |  V  ||d d  }|d}q"qd S )Nr   r   r   r   )r)   r   r    )r   bufr   r"   r   r   r   read_compressed_linesA   s    
z)InventoryFileReader.read_compressed_linesN)
__name__
__module____qualname____doc__r   r   r!   r$   r)   r+   r   r   r   r   r      s   r   c                   @  sl   e Zd ZedddddddZeddddd	d
dZeddddd	ddZedddddddZdS )InventoryFiler   r   r   r   )r   urijoinfuncr   c                 C  sP   t |}|  }|dkr*| |||S |dkr@| |||S td| d S )Nz# Sphinx inventory version 1z# Sphinx inventory version 2zinvalid inventory header: %s)r   r!   rstripload_v1load_v2
ValueError)clsr   r1   r2   readerr#   r   r   r   loadM   s    zInventoryFile.loadr   )r   r1   joinr   c                 C  s   i }|   dd  }|   dd  }| D ]j}| d d\}}	}
|||
}
|	dkrrd}	|
d| 7 }
nd|	 }	|
d| 7 }
|||
df||	i |< q4|S )	N      mod	py:modulez#module-zpy:#-)r!   r3   r$   split
setdefault)r7   r   r1   r:   invdataprojnameversionr#   nametypelocationr   r   r   r4   X   s    
zInventoryFile.load_v1c                 C  s   i }|   dd  }|   dd  }|  }d|krHtd| | D ]}tjd| tjd}|spqP| \}	}
}}}d|
krqP|
dkr|
|kr|	||
 krqP|dr|d d	 |	 }|||}||||f}||	|
i |	< qP|S )
Nr;   r%   z-invalid inventory header (not compressed): %sz'(.+?)\s+(\S+)\s+(-?\d+)\s+?(\S*)\s+(.*))flags:r>   $r   )
r!   r3   r6   r+   rematchVERBOSEgroupsendswithrB   )r7   r   r1   r:   rC   rD   rE   r#   mrF   rG   priorH   dispnameZinv_itemr   r   r   r5   j   s0     

zInventoryFile.load_v2r   r
   r   )filenameenvbuilderr   c              
   C  s  ddddd}t tj|d}|d||jj||jjf   t	
d}t|j D ]\}}t| D ]~\}	}
}}}}||	r|d t|	  d }||}|r|d	| 7 }|
|	krd
}
d|	|||||
f }|||  qvqb||  W 5 Q R X d S )Nr   )stringr   c                 S  s   t dd| S )Nz\s+ )rL   sub)rW   r   r   r   escape   s    z"InventoryFile.dump.<locals>.escapewbzp# Sphinx inventory version 2
# Project: %s
# Version: %s
# The remainder of this file is compressed using zlib.
	   rK   r?   r@   z%s %s:%s %s %s %s
)openospathr:   writeconfigprojectrE   encoder%   compressobjsorteddomainsitemsZget_objectsrP   lenZget_target_uricompressr(   )r7   rT   rU   rV   rZ   fZ
compressorZ
domainnamedomainrF   rS   typZdocnameanchorrR   r1   entryr   r   r   dump   s.    






zInventoryFile.dumpN)r,   r-   r.   classmethodr9   r4   r5   ro   r   r   r   r   r0   L   s   
!r0   )r/   
__future__r   r^   rL   r%   typingr   r   r   r   Zsphinx.utilr   Zsphinx.util.typingr   r	   r   	getLoggerr,   loggerZsphinx.buildersr
   Zsphinx.environmentr   r   r0   r   r   r   r   <module>   s   
8