B
    öÀ„\þ  ã               @   sf   d Z ddlZddlZddlZddlmZ ddlmZ dZe 	e
¡ZG dd„ deƒZG dd	„ d	eƒZdS )
zÔ
    sphinx.util.inventory
    ~~~~~~~~~~~~~~~~~~~~~

    Inventory utility functions for Sphinx.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)ÚPY3)Úloggingi @  c               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚInventoryFileReaderzgA file reader for inventory file.

    This reader supports mixture of texts and compressed texts.
    c             C   s   || _ d| _d| _d S )Nó    F)ÚstreamÚbufferÚeof)Úselfr   © r
   ú4lib/python3.7/site-packages/sphinx/util/inventory.pyÚ__init__)   s    zInventoryFileReader.__init__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_bufferc             C   sl   | j  d¡}|dkr>| j d |…  d¡}| j |d d … | _ n*| jrX| j  d¡}d| _ n|  ¡  |  ¡ }|S )Nó   
éÿÿÿÿzutf-8é   r   )r   ÚfindÚdecoder   r   Úreadline)r	   ÚposÚliner
   r
   r   r   6   s    zInventoryFileReader.readlinec             c   s"   x| j s|  ¡ }|r|V  qW d S )N)r   r   )r	   r   r
   r
   r   Ú	readlinesE   s    zInventoryFileReader.readlinesc             c   s>   t  ¡ }x&| js.|  ¡  | | j¡V  d| _q
W | ¡ V  d S )Nr   )ÚzlibZdecompressobjr   r   Z
decompressr   Úflush)r	   Zdecompressorr
   r
   r   Úread_compressed_chunksL   s    
z*InventoryFileReader.read_compressed_chunksc             c   sh   d}x^|   ¡ D ]R}||7 }| d¡}x:|dkr^|d |…  d¡V  ||d d … }| d¡}q&W qW d S )Nr   r   r   zutf-8r   )r   r   r   )r	   Zbufr   r   r
   r
   r   Úread_compressed_linesU   s    

z)InventoryFileReader.read_compressed_linesN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r
   r
   r
   r   r   #   s   	r   c               @   s<   e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZd	S )
ÚInventoryFilec             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   ÚuriZjoinfuncÚreaderr   r
   r
   r   Úloadb   s    zInventoryFile.loadc             C   s¨   i }|  ¡  ¡ dd … }|  ¡  ¡ dd … }xv| ¡ D ]j}| ¡  d d¡\}}	}
|||
ƒ}
|	dkrtd}	|
d| 7 }
nd|	 }	|
d| 7 }
|||
df| |	i ¡|< q6W |S )	Né   é   Úmodz	py:modulez#module-zpy:ú#ú-)r   r#   r   ÚsplitÚ
setdefault)r'   r   r(   ÚjoinÚinvdataÚprojnameÚversionr   ÚnameÚtypeÚlocationr
   r
   r   r$   n   s    
zInventoryFile.load_v1c             C   sà   i }|  ¡  ¡ dd … }|  ¡  ¡ dd … }|  ¡ }d|krHtd| ƒ‚x’| ¡ D ]†}t d| ¡ ¡}|slqR| ¡ \}	}
}}}|
dkrœ|
|krœ|	||
 krœqR| d¡r¶|d d… |	 }|||ƒ}||||f| |
i ¡|	< qRW |S )Nr+   r   z-invalid inventory header (not compressed): %sz.(?x)(.+?)\s+(\S*:\S*)\s+(-?\d+)\s+(\S+)\s+(.*)z	py:moduleú$r   )	r   r#   r&   r   ÚreÚmatchÚgroupsÚendswithr1   )r'   r   r(   r2   r3   r4   r5   r   Úmr6   r7   Úprior8   Údispnamer
   r
   r   r%      s(    


zInventoryFile.load_v2c          
   C   s  dd„ }t tj |¡dƒô}| d||jjƒ||jjƒf  d¡¡ t	 
d¡}x¬t|j ¡ ƒD ]š\}}xt| ¡ ƒD ]€\}	}
}}}}| |	¡r¤|d t|	ƒ … d }| |¡}|r¾|d| 7 }|
|	krÊd	}
d
|	|||||
f }| | | d¡¡¡ qtW q^W | | ¡ ¡ W d Q R X d S )Nc             S   s   t  dd| ¡S )Nz\s+ú )r:   Úsub)Ústringr
   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.
zutf-8é	   r9   r.   r/   z%s %s:%s %s %s %s
)ÚopenÚosÚpathr2   ÚwriteZconfigZprojectr5   Úencoder   ZcompressobjÚsortedZdomainsÚitemsZget_objectsr=   ÚlenZget_target_uriÚcompressr   )r'   ÚfilenameÚenvZbuilderrD   ÚfZ
compressorZ
domainnameZdomainr6   r@   ÚtypZdocnameZanchorr?   r(   Úentryr
   r
   r   ÚdumpŸ   s(    



zInventoryFile.dumpN)r   r   r    Úclassmethodr*   r$   r%   rU   r
   r
   r
   r   r"   a   s   r"   )r!   rH   r:   r   Zsixr   Zsphinx.utilr   r   Z	getLoggerr   ZloggerÚobjectr   r"   r
   r
   r
   r   Ú<module>
   s   
>