
    Fe                        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	 ddl
mZ dZ ej                  e      ZerddlmZ ddlmZ dd	lmZ dd
lmZmZ  G d d      Z G d d      Zy)z'Inventory utility functions for Sphinx.    )annotationsN)IOTYPE_CHECKINGCallable)loggingi @  )Iterator)Builder)BuildEnvironment)	InventoryInventoryItemc                  @    e Zd ZdZd	dZd
dZddZddZddZddZ	y)InventoryFileReaderzjA file reader for an inventory file.

    This reader supports mixture of texts and compressed texts.
    c                .    || _         d| _        d| _        y )N    F)streambuffereof)selfr   s     7/usr/lib/python3/dist-packages/sphinx/util/inventory.py__init__zInventoryFileReader.__init__   s    r   c                    | j                   j                  t              }|dk(  rd| _        | xj                  |z  c_        y )Nr   T)r   readBUFSIZEr   r   )r   chunks     r   read_bufferzInventoryFileReader.read_buffer!   s2      )C<DHur   c                P   | j                   j                  d      }|dk7  r6| j                   d | j                         }| j                   |dz   d  | _         |S | j                  r#| j                   j                         }d| _         |S | j	                          | j                         }|S )N   
   r   )r   finddecoder   r   readline)r   poslines      r   r"   zInventoryFileReader.readline'   s    kku%"9;;t$++-D++cAgh/DK  XX;;%%'DDK
  ==?Dr   c              #  l   K   | j                   s$| j                         }|r| | j                   s#y y w)N)r   r"   )r   r$   s     r   	readlineszInventoryFileReader.readlines5   s)     ((==?D
 ((s   /44c              #     K   t        j                         }| j                  sA| j                          |j	                  | j
                         d| _        | j                  sA|j                          y w)Nr   )zlibdecompressobjr   r   
decompressr   flush)r   decompressors     r   read_compressed_chunksz*InventoryFileReader.read_compressed_chunks;   s]     ))+(())$++66DK ((   ""s   A!A7$A7c              #     K   d}| j                         D ]R  }||z  }|j                  d      }|dk7  s|d | j                          ||dz   d  }|j                  d      }|dk7  r4T y w)Nr   r   r   r   )r-   r    r!   )r   bufr   r#   s       r   read_compressed_linesz)InventoryFileReader.read_compressed_linesC   sz     002 	&E5LC((5/C)$3i&&((#'(mhhuo )	&s   1A+3A+(A+N)r   r   returnNone)r1   r2   )r1   str)r1   zIterator[str])r1   zIterator[bytes])
__name__
__module____qualname____doc__r   r   r"   r&   r-   r0    r   r   r   r      s%    

#&r   r   c                  T    e Zd Zedd       Zedd       Zedd       Zedd       Zy)	InventoryFilec                    t        |      }|j                         j                         }|dk(  r| j                  |||      S |dk(  r| j	                  |||      S t        d|z        )Nz# Sphinx inventory version 1z# Sphinx inventory version 2zinvalid inventory header: %s)r   r"   rstripload_v1load_v2
ValueError)clsr   urijoinfuncreaderr$   s         r   loadzInventoryFile.loadO   sj    $V, '')11;;vsH5533;;vsH55;dBCCr   c                ~   i }|j                         j                         dd  }|j                         j                         dd  }|j                         D ]e  }|j                         j                  d d      \  }}	}
 |||
      }
|	dk(  rd}	|
d|z   z  }
nd|	z   }	|
d|z   z  }
|||
df|j	                  |	i       |<   g |S )	N      mod	py:modulez#module-zpy:#-)r"   r<   r&   split
setdefault)r@   r   rA   joininvdataprojnameversionr$   nametypelocations              r   r=   zInventoryFile.load_v1Z   s    ??$++-bc2//#**,RS1$$& 
	TD#';;=#6#6tQ#? D$C*Hu}"J--t|C$J&2:GXs1SGtR(.
	T r   c                <   i }|j                         j                         dd  }|j                         j                         dd  }|j                         }d|vrt        d|z        |j                         D ]  }t	        j
                  d|j                         t        j                        }|s:|j                         \  }	}
}}}d|
vrU|
dk(  r|
|v r|	||
   v rf|j                  d      r|d d	 |	z   } |||      }||||f}||j                  |
i       |	<    |S )
NrF   r(   z-invalid inventory header (not compressed): %sz'(.+?)\s+(\S+)\s+(-?\d+)\s+?(\S*)\s+(.*))flags:rI   $r   )
r"   r<   r?   r0   rematchVERBOSEgroupsendswithrM   )r@   r   rA   rN   rO   rP   rQ   r$   mrR   rS   priorT   dispnameinv_items                  r   r>   zInventoryFile.load_v2l   s8   ??$++-bc2//#**,RS1 LtSTT002 	:DCbjj:A3488:0D$h$ {"tw474=;P
   %#CR=4/C*H&.8&KH19GtR(.-	:. r   c                R   dd}t        t        j                  j                  |      d      5 }|j	                  d ||j
                  j                        d ||j
                  j                        dj                                t        j                  d      }t        |j                  j                               D ]  \  }}t        |j                               D ]  \  }	}
}}}}|j                  |	      r|d t!        |	        dz   }|j#                  |      }|r|d|z   z  }|
|	k(  rd	}
|	d
|d|d
|d
|d
|
d}|j	                  |j%                  |j                                        |j	                  |j'                                d d d        y # 1 sw Y   y xY w)Nc                0    t        j                  dd|       S )Nz\s+ )rY   sub)strings    r   escapez"InventoryFile.dump.<locals>.escape   s    66&#v..r   wbz(# Sphinx inventory version 2
# Project: z
# Version: z8
# The remainder of this file is compressed using zlib.
	   rX   rJ   rK   rd   rW   
)rf   r3   r1   r3   )openospathrN   writeconfigprojectrQ   encoder(   compressobjsorteddomainsitemsget_objectsr]   lenget_target_uricompressr+   )r@   filenameenvbuilderrg   f
compressor
domainnamedomainrR   r`   typdocnameanchorr_   rA   entrys                    r   dumpzInventoryFile.dump   sw   	/ "'',,x($/ 	(1GG SZZ//0SZZ//02
 4:68= ))!,J&,S[[->->-@&A A"
Fv1134A>D(C&$t,!'#d)!4s!:!009CsV|+4'#&"JT3JEGGJ//?@AA GGJ$$&'3	( 	( 	(s   E&FF&N)r   r   rA   r3   rB   r   r1   r   )r   r   rA   r3   rN   r   r1   r   )rz   r3   r{   r
   r|   r	   r1   r2   )r4   r5   r6   classmethodrD   r=   r>   r   r8   r   r   r:   r:   N   sS    D D  "  B ( (r   r:   )r7   
__future__r   rl   rY   r(   typingr   r   r   sphinx.utilr   r   	getLoggerr4   loggercollections.abcr   sphinx.buildersr	   sphinx.environmentr
   sphinx.util.typingr   r   r   r:   r8   r   r   <module>r      sZ    - " 	 	  . . 
			8	$('3;5& 5&p^( ^(r   