ó
    ‘Rjl,  ã                   óú   • S SK Jr   S SKJrJr   S SKJr  S SKJ	r	  SSK
Jr  SS	KJr  SS
KJrJr  SS/r\" 5       r " S S\5      r " S S\5      rg! \ a    S SKJrJr   NSf = f! \ a     " S S5      r Nbf = f)é    )Úabsolute_import)ÚMappingÚMutableMapping)ÚRLockc                   ó    • \ rS rSrS rS rSrg)r   é   c                 ó   • g ©N© ©Úselfs    ÚLD:\diplom_project\venv\Lib\site-packages\pip/_vendor/urllib3/_collections.pyÚ	__enter__ÚRLock.__enter__   ó   € Øó    c                 ó   • g r
   r   )r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__ÚRLock.__exit__   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Ú__static_attributes__r   r   r   r   r      s   † ò	õ	r   r   )ÚOrderedDicté   )ÚInvalidHeader)Úsix)ÚiterkeysÚ
itervaluesÚRecentlyUsedContainerÚHTTPHeaderDictc                   óP   • \ rS rSrSr\rSS jrS rS r	S r
S rS	 rS
 rS rSrg)r$   é   am  
Provides a thread-safe dict-like container which maintains up to
``maxsize`` keys while throwing away the least-recently-used keys beyond
``maxsize``.

:param maxsize:
    Maximum number of recent elements to retain.

:param dispose_func:
    Every time an item is evicted from the container,
    ``dispose_func(value)`` is called.  Callback which will get called
Nc                 ód   • Xl         X l        U R                  5       U l        [	        5       U l        g r
   )Ú_maxsizeÚdispose_funcÚContainerClsÚ
_containerr   Úlock)r   Úmaxsizer*   s      r   Ú__init__ÚRecentlyUsedContainer.__init__/   s&   € ØŒØ(Ôà×+Ñ+Ó-ˆŒÜ“Gˆ�	r   c                 ó¦   • U R                      U R                  R                  U5      nX R                  U'   UsS S S 5        $ ! , (       d  f       g = fr
   )r-   r,   Úpop)r   ÚkeyÚitems      r   Ú__getitem__Ú!RecentlyUsedContainer.__getitem__6   s6   € à�Y‹YØ—?‘?×&Ñ& sÓ+ˆDØ#'�O‰O˜CÑ Ø÷ �Y�Yús   �+AÁ
Ac                 óŽ  • [         nU R                     U R                  R                  U[         5      nX R                  U'   [	        U R                  5      U R
                  :”  a  U R                  R                  SS9u  pCS S S 5        U R                  (       a  U[         La  U R                  U5        g g g ! , (       d  f       N<= f)NF)Úlast)Ú_Nullr-   r,   ÚgetÚlenr)   Úpopitemr*   )r   r3   ÚvalueÚevicted_valueÚ_keys        r   Ú__setitem__Ú!RecentlyUsedContainer.__setitem__=   s–   € ÜˆØ�Y‹Yà ŸO™O×/Ñ/°´UÓ;ˆMØ#(�O‰O˜CÑ ô �4—?‘?Ó# d§m¡mÓ3Ø&*§o¡o×&=Ñ&=À5Ð&=Ð&IÑ#�÷ ð ×× ´eÒ!;Ø×Ñ˜mÕ,ð "<Ð÷ �Yús   “A-B6Â6
Cc                 óÌ   • U R                      U R                  R                  U5      nS S S 5        U R                  (       a  U R                  W5        g g ! , (       d  f       N2= fr
   )r-   r,   r2   r*   )r   r3   r=   s      r   Ú__delitem__Ú!RecentlyUsedContainer.__delitem__L   sH   € Ø�Y‹YØ—O‘O×'Ñ'¨Ó,ˆE÷ ð ××Ø×Ñ˜eÕ$ð ÷ �Yús   �AÁ
A#c                 óz   • U R                      [        U R                  5      sS S S 5        $ ! , (       d  f       g = fr
   )r-   r;   r,   r   s    r   Ú__len__ÚRecentlyUsedContainer.__len__S   s   € Ø�Y‹YÜ�t—‘Ó'÷ �Y�Yús   �,¬
:c                 ó   • [        S5      e)Nz7Iteration over this class is unlikely to be threadsafe.)ÚNotImplementedErrorr   s    r   Ú__iter__ÚRecentlyUsedContainer.__iter__W   s   € Ü!ØEó
ð 	
r   c                 ó  • U R                      [        [        U R                  5      5      nU R                  R	                  5         S S S 5        U R
                  (       a  W H  nU R                  U5        M     g g ! , (       d  f       N;= fr
   )r-   Úlistr#   r,   Úclearr*   )r   Úvaluesr=   s      r   rN   ÚRecentlyUsedContainer.clear\   sa   € Ø�Y‹Yäœ* T§_¡_Ó5Ó6ˆFØ�O‰O×!Ñ!Ô#÷ ð
 ××Û�Ø×!Ñ! %Ö(ò  ð ÷ �Yús   �9A;Á;
B	c                 óŒ   • U R                      [        [        U R                  5      5      sS S S 5        $ ! , (       d  f       g = fr
   )r-   rM   r"   r,   r   s    r   ÚkeysÚRecentlyUsedContainer.keysf   s$   € Ø�Y‹YÜœ §¡Ó1Ó2÷ �Y�Yús	   �5µ
A)r,   r)   r*   r-   )é
   N)r   r   r   r   Ú__doc__r   r+   r/   r5   r@   rC   rF   rJ   rN   rR   r   r   r   r   r$   r$      s6   † ñð €Lôòò-ò%ò(ò
ò
)õ3r   c                   ó4  ^ • \ rS rSrSrSU 4S jjrS rS rS rS r	S r
S	 r\R                  (       a  \R                  r\R                   r\" 5       rS
 rS r\4S jrS rS rS r\4S jrS r\r\r\r\rS rS r S r!S r"S r#S r$\%S 5       r&Sr'U =r($ )r%   ék   a  
:param headers:
    An iterable of field-value pairs. Must not contain multiple field names
    when compared case-insensitively.

:param kwargs:
    Additional field-value pairs to pass in to ``dict.update``.

A ``dict`` like container for storing HTTP Headers.

Field names are stored and compared case-insensitively in compliance with
RFC 7230. Iteration provides the first case-sensitive key seen for each
case-insensitive pair.

Using ``__setitem__`` syntax overwrites fields that compare equal
case-insensitively in order to maintain ``dict``'s api. For fields that
compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add``
in a loop.

If multiple fields that are equal case-insensitively are passed to the
constructor or ``.update``, the behavior is undefined and some will be
lost.

>>> headers = HTTPHeaderDict()
>>> headers.add('Set-Cookie', 'foo=bar')
>>> headers.add('set-cookie', 'baz=quxx')
>>> headers['content-length'] = '7'
>>> headers['SET-cookie']
'foo=bar, baz=quxx'
>>> headers['Content-Length']
'7'
c                 óð   >• [         [        U ]  5         [        5       U l        Ub8  [        U[        5      (       a  U R                  U5        OU R                  U5        U(       a  U R                  U5        g g r
   )Úsuperr%   r/   r   r,   Ú
isinstanceÚ
_copy_fromÚextend)r   ÚheadersÚkwargsÚ	__class__s      €r   r/   ÚHTTPHeaderDict.__init__�   sX   ø€ ÜŒn˜dÑ,Ô.Ü%›-ˆŒØÑÜ˜'¤>×2Ñ2Ø—‘ Õ(à—‘˜GÔ$ÞØ�K‰K˜Õð r   c                 óx   • X/U R                   UR                  5       '   U R                   UR                  5          $ r
   ©r,   Úlower©r   r3   Úvals      r   r@   ÚHTTPHeaderDict.__setitem__˜   s-   € Ø(+ zˆ�‰˜Ÿ	™	›Ñ$Ø�‰˜sŸy™y›{Ñ+Ð+r   c                 ód   • U R                   UR                  5          nSR                  USS  5      $ )Nú, r   ©r,   rc   Újoinrd   s      r   r5   ÚHTTPHeaderDict.__getitem__œ   s+   € Ø�o‰o˜cŸi™i›kÑ*ˆØ�y‰y˜˜Q˜R˜Ó!Ð!r   c                 ó:   • U R                   UR                  5       	 g r
   rb   ©r   r3   s     r   rC   ÚHTTPHeaderDict.__delitem__    s   € Ø�O‰O˜CŸI™I›KÑ(r   c                 ó<   • UR                  5       U R                  ;   $ r
   )rc   r,   rm   s     r   Ú__contains__ÚHTTPHeaderDict.__contains__£   s   € Ø�y‰y‹{˜dŸo™oÑ-Ð-r   c                 ó(  • [        U[        5      (       d  [        US5      (       d  g[        U[        U 5      5      (       d  [        U 5      " U5      n[	        S U R                  5        5       5      [	        S UR                  5        5       5      :H  $ )NrR   Fc              3   óJ   #   • U  H  u  pUR                  5       U4v •  M     g 7fr
   ©rc   ©Ú.0ÚkÚvs      r   Ú	<genexpr>Ú(HTTPHeaderDict.__eq__.<locals>.<genexpr>«   s   é € ÐAÒ/@¡t q�Q—W‘W“Y •NÒ/@ùó   ‚!#c              3   óJ   #   • U  H  u  pUR                  5       U4v •  M     g 7fr
   rt   ru   s      r   ry   rz   «   s!   é € ð J
Ú'9™t˜qˆQ�W‰W‹Y˜�NÒ'9ùr{   )rZ   r   ÚhasattrÚtypeÚdictÚ
itermerged©r   Úothers     r   Ú__eq__ÚHTTPHeaderDict.__eq__¦   s|   € Ü˜%¤×)Ñ)´'¸%À×2HÑ2HØÜ˜%¤ d£×,Ñ,Ü˜”J˜uÓ%ˆEÜÑA¨t¯©Ô/@ÓAÓAÄTñ J
Ø',×'7Ñ'7Ô'9óJ
ó F
ñ 
ð 	
r   c                 ó.   • U R                  U5      (       + $ r
   )rƒ   r�   s     r   Ú__ne__ÚHTTPHeaderDict.__ne__¯   s   € Ø—;‘;˜uÓ%Ô%Ð%r   c                 ó,   • [        U R                  5      $ r
   )r;   r,   r   s    r   rF   ÚHTTPHeaderDict.__len__¸   s   € Ü�4—?‘?Ó#Ð#r   c              #   ó\   #   • U R                   R                  5        H
  nUS   v •  M     g 7f)Nr   )r,   rO   )r   Úvalss     r   rJ   ÚHTTPHeaderDict.__iter__»   s%   é € à—O‘O×*Ñ*Ö,ˆDØ�q‘'ŒMò -ùs   ‚*,c                 óV   •  X   nX	 U$ ! [          a    X R                  L a  e Us $ f = f)z—D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
If key is not found, d is returned if given, otherwise KeyError is raised.
)ÚKeyErrorÚ_HTTPHeaderDict__marker)r   r3   Údefaultr=   s       r   r2   ÚHTTPHeaderDict.popÀ   s=   € ð	Ø‘IˆEð �	ØˆLøô ó 	ØŸ-™-Ò'ØØŠNð	ús   ‚
 Š(§(c                 ó*   •  X	 g ! [          a     g f = fr
   )rŽ   rm   s     r   ÚdiscardÚHTTPHeaderDict.discardÑ   s   € ð	Ø‘	øÜó 	Ùð	ús   ‚ …
‘c                 óŒ   • UR                  5       nX/nU R                  R                  X45      nXELa  UR                  U5        gg)z²Adds a (name, value) pair, doesn't overwrite the value if it already
exists.

>>> headers = HTTPHeaderDict(foo='bar')
>>> headers.add('Foo', 'baz')
>>> headers['foo']
'bar, baz'
N)rc   r,   Ú
setdefaultÚappend)r   r3   re   Ú	key_lowerÚnew_valsr‹   s         r   ÚaddÚHTTPHeaderDict.add×   sA   € ð —I‘I“Kˆ	Ø�:ˆà�‰×)Ñ)¨)Ó>ˆØÒØ�K‰K˜Õð  r   c                 ó€  • [        U5      S:”  a#  [        SR                  [        U5      5      5      e[        U5      S:¼  a  US   OSn[        U[        5      (       a+  UR                  5        H  u  pEU R                  XE5        M     OŒ[        U[        5      (       a  U H  nU R                  XCU   5        M     OY[        US5      (       a,  UR                  5        H  nU R                  XCU   5        M     OU H  u  pFU R                  XF5        M     UR                  5        H  u  pFU R                  XF5        M     g)z¨Generic import function for any type of header-like object.
Adapted version of MutableMapping.update in order to insert items
with self.add instead of self.__setitem__
r   z9extend() takes at most 1 positional arguments ({0} given)r   r   rR   N)r;   Ú	TypeErrorÚformatrZ   r%   Ú	iteritemsrš   r   r}   rR   Úitems)r   Úargsr^   r‚   r3   re   r=   s          r   r\   ÚHTTPHeaderDict.extendç   s   € ô
 ˆt‹9�q‹=Üð(ß(.©¬s°4«yÓ(9óð ô ˜t›9¨›>��Q’¨rˆä�eœ^×,Ñ,Ø!ŸO™OÖ-‘�Ø—‘˜Ö"ò .ä˜œw×'Ñ'Û�Ø—‘˜ C™jÖ)ò ä�U˜F×#Ñ#Ø—z‘z–|�Ø—‘˜ C™jÖ)ò $ó $‘
�Ø—‘˜Ö$ñ $ð !Ÿ,™,ž.‰JˆCØ�H‰H�SÖ ò )r   c                 ó�   •  U R                   UR                  5          nUSS $ ! [         a    X R                  L a  / s $ Us $ f = f)zeReturns a list of all the values for the named field. Returns an
empty list if the key doesn't exist.r   N)r,   rc   rŽ   r�   )r   r3   r�   r‹   s       r   ÚgetlistÚHTTPHeaderDict.getlist  sM   € ð	Ø—?‘? 3§9¡9£;Ñ/ˆDð ˜˜�8ˆOøô ó 	ØŸ-™-Ò'Ø’	ØŠNð	ús   ‚$ ¤AÁ AÁAc                 óB   • / SQnU H  nU R                  U5        M     U $ )z~
Remove content-specific header fields before changing the request
method to GET or HEAD according to RFC 9110, Section 15.4.
)zContent-EncodingzContent-LanguagezContent-LocationzContent-TypezContent-LengthÚDigestzLast-Modified)r“   )r   Úcontent_specific_headersÚheaders      r   Ú_prepare_for_method_changeÚ)HTTPHeaderDict._prepare_for_method_change  s'   € ò
$
Ð ó /ˆFØ�L‰L˜Ö ñ /àˆr   c                 ój   • [        U 5      R                  < S[        U R                  5       5      < S3$ )NÚ(Ú))r~   r   r   r€   r   s    r   Ú__repr__ÚHTTPHeaderDict.__repr__)  s#   € Ü ›:×.Ô.´°T·_±_Ó5FÖ0GÐHÐHr   c                 óº   • U HU  nUR                  U5      n[        U[        5      (       a  [        U5      nU/U-   U R                  UR	                  5       '   MW     g r
   )r¤   rZ   rM   r,   rc   )r   r‚   r3   re   s       r   r[   ÚHTTPHeaderDict._copy_from,  sJ   € ÛˆCØ—-‘- Ó$ˆCÜ˜#œt×$Ñ$ä˜3“i�Ø,/¨5°3©;ˆD�O‰O˜CŸI™I›KÓ(ò r   c                 óH   • [        U 5      " 5       nUR                  U 5        U$ r
   )r~   r[   )r   Úclones     r   ÚcopyÚHTTPHeaderDict.copy4  s    € Ü�T”
“ˆØ×Ñ˜ÔØˆr   c              #   ó‚   #   • U  H5  nU R                   UR                  5          nUSS  H  nUS   U4v •  M     M7     g7f)z8Iterate over all header lines, including duplicate ones.r   Nr   rb   )r   r3   r‹   re   s       r   rŸ   ÚHTTPHeaderDict.iteritems9  sA   é € ãˆCØ—?‘? 3§9¡9£;Ñ/ˆDØ˜A˜B“x�Ø˜1‘g˜s�lÔ"ó  ò ùs   ‚=?c              #   óŽ   #   • U  H;  nU R                   UR                  5          nUS   SR                  USS 5      4v •  M=     g7f)z:Iterate over all headers, merging duplicate ones together.r   rh   r   Nri   rd   s      r   r€   ÚHTTPHeaderDict.itermerged@  sA   é € ãˆCØ—/‘/ #§)¡)£+Ñ.ˆCØ�a‘&˜$Ÿ)™) C¨¨ GÓ,Ð,Ô,ò ùs   ‚AAc                 ó4   • [        U R                  5       5      $ r
   )rM   rŸ   r   s    r   r    ÚHTTPHeaderDict.itemsF  s   € Ü�D—N‘NÓ$Ó%Ð%r   c                 óD  • Sn/ nUR                    H…  nUR                  U5      (       a8  U(       d  [        SU-  5      eUS   u  pVXVS-   UR                  5       -   4US'   MQ  UR	                  SS5      u  pVUR                  XVR                  5       45        M‡     U " U5      $ )z4Read headers from a Python 2 httplib message object.)Ú Ú	z/Header continuation with no previous header: %séÿÿÿÿr¾   Ú:r   )r]   Ú
startswithr    ÚstripÚsplitr—   )ÚclsÚmessageÚobs_fold_continued_leadersr]   Úliner3   r=   s          r   Úfrom_httplibÚHTTPHeaderDict.from_httplibI  s¥   € ð &1Ð"Øˆà—O”OˆDØ�‰Ð9×:Ñ:Þô (ØIÈDÑPóð ð ")¨¡‘J�CØ#&°©°d·j±j³lÑ(BÐ"C�G˜B‘KÙàŸ™ C¨Ó+‰JˆCØ�N‰N˜C§¡£Ð/Ö0ñ $ñ" �7‹|Ðr   )r,   r
   ))r   r   r   r   rU   r/   r@   r5   rC   rp   rƒ   r†   r!   ÚPY2r   r"   r#   Úobjectr�   rF   rJ   r2   r“   rš   r\   r¤   rª   Ú
getheadersÚgetallmatchingheadersÚigetÚget_allr¯   r[   rµ   rŸ   r€   r    ÚclassmethodrÉ   r   Ú__classcell__)r_   s   @r   r%   r%   k   sÐ   ø† ñ÷B	 ò,ò"ò)ò.ò
ò&ð ‡w‡wØ!×*Ñ*ˆØ#×.Ñ.ˆ
á‹x€Hò$òð
  (ô ò"òò !ð8 $,ô 
òð& €JØ#ÐØ€Dð €GòIò7òò
#ò-ò&ð ñó ör   N)Ú
__future__r   Úcollections.abcr   r   ÚImportErrorÚcollectionsÚ	threadingr   r   Ú
exceptionsr    Úpackagesr!   Úpackages.sixr"   r#   Ú__all__rÌ   r9   r$   r%   r   r   r   Ú<module>rÜ      s‰   ðÝ &ð4ß7ð	Ýõ $å %Ý ß .à"Ð$4Ð
5€ñ 	‹€ôI3˜Nô I3ôXx�^õ xøðM ó 4ß3Ñ3ð4ûð ó ÷ó ðús"   ˆA ‘A' ÁA$Á#A$Á'A:Á9A: