Ë
    ��hl,  ã                   óö   — d dl mZ 	 d dlmZmZ 	 d dlmZ d dlm	Z	 ddl
mZ dd	lmZ dd
lmZmZ ddgZ e«       Z G d„ de«      Z G d„ de«      Zy# e$ r d dlmZmZ Y ŒRw xY w# e$ r  G d„ d«      ZY Œ`w xY w)é    )Úabsolute_import)ÚMappingÚMutableMapping)ÚRLockc                   ó   — e Zd Zd„ Zd„ Zy)r   c                  ó   — y ©N© ©Úselfs    ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.pyÚ	__enter__zRLock.__enter__   ó   € Øó    c                  ó   — y r	   r
   )r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zRLock.__exit__   r   r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r   r   r   r      s   „ ò	ó	r   r   )ÚOrderedDicté   )ÚInvalidHeader)Úsix)ÚiterkeysÚ
itervaluesÚRecentlyUsedContainerÚHTTPHeaderDictc                   óF   — e Zd ZdZeZdd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zy)r   a‘  
    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                 óh   — || _         || _        | j                  «       | _        t	        «       | _        y r	   )Ú_maxsizeÚdispose_funcÚContainerClsÚ
_containerr   Úlock)r   Úmaxsizer$   s      r   Ú__init__zRecentlyUsedContainer.__init__/   s*   € ØˆŒØ(ˆÔà×+Ñ+Ó-ˆŒÜ“Gˆ�	r   c                 óž   — | j                   5  | j                  j                  |«      }|| j                  |<   |cd d d «       S # 1 sw Y   y xY wr	   )r'   r&   Úpop)r   ÚkeyÚitems      r   Ú__getitem__z!RecentlyUsedContainer.__getitem__6   sC   € à�Y‰Yñ 	Ø—?‘?×&Ñ& sÓ+ˆDØ#'ˆD�O‰O˜CÑ Ø÷	÷ 	ò 	ús   �,AÁAc                 ó€  — t         }| j                  5  | j                  j                  |t         «      }|| j                  |<   t	        | j                  «      | j
                  kD  r| j                  j                  d¬«      \  }}d d d «       | j                  r|t         ur| j                  |«       y y y # 1 sw Y   Œ1xY w)NF)Úlast)Ú_Nullr'   r&   ÚgetÚlenr#   Úpopitemr$   )r   r,   ÚvalueÚevicted_valueÚ_keys        r   Ú__setitem__z!RecentlyUsedContainer.__setitem__=   s¦   € ÜˆØ�Y‰Yñ 	Jà ŸO™O×/Ñ/°´UÓ;ˆMØ#(ˆD�O‰O˜CÑ ô �4—?‘?Ó# d§m¡mÒ3Ø&*§o¡o×&=Ñ&=À5Ð&=Ó&IÑ#��m÷	Jð ×Ò ´eÑ!;Ø×Ñ˜mÕ,ð "<Ð÷	Jð 	Jús   “A1B4Â4B=c                 ó¸   — | j                   5  | j                  j                  |«      }d d d «       | j                  r| j                  «       y y # 1 sw Y   Œ(xY wr	   )r'   r&   r+   r$   )r   r,   r5   s      r   Ú__delitem__z!RecentlyUsedContainer.__delitem__L   sP   € Ø�Y‰Yñ 	-Ø—O‘O×'Ñ'¨Ó,ˆE÷	-ð ×ÒØ×Ñ˜eÕ$ð ÷	-ð 	-ús   �AÁAc                 óp   — | j                   5  t        | j                  «      cd d d «       S # 1 sw Y   y xY wr	   )r'   r3   r&   r   s    r   Ú__len__zRecentlyUsedContainer.__len__S   s*   € Ø�Y‰Yñ 	(Ü�t—‘Ó'÷	(÷ 	(ò 	(ús   �,¬5c                 ó   — t        d«      ‚)Nz7Iteration over this class is unlikely to be threadsafe.)ÚNotImplementedErrorr   s    r   Ú__iter__zRecentlyUsedContainer.__iter__W   s   € Ü!ØEó
ð 	
r   c                 ó   — | j                   5  t        t        | j                  «      «      }| j                  j	                  «        d d d «       | j
                  rD ]  }| j                  |«       Œ y y # 1 sw Y   Œ/xY wr	   )r'   Úlistr   r&   Úclearr$   )r   Úvaluesr5   s      r   rB   zRecentlyUsedContainer.clear\   sn   € Ø�Y‰Yñ 	$äœ* T§_¡_Ó5Ó6ˆFØ�O‰O×!Ñ!Ô#÷	$ð
 ×ÒØò )�Ø×!Ñ! %Õ(ñ)ð ÷	$ð 	$ús   �9A4Á4A=c                 ó‚   — | j                   5  t        t        | j                  «      «      cd d d «       S # 1 sw Y   y xY wr	   )r'   rA   r   r&   r   s    r   ÚkeyszRecentlyUsedContainer.keysf   s/   € Ø�Y‰Yñ 	3Üœ §¡Ó1Ó2÷	3÷ 	3ò 	3ús   �5µ>)é
   N)r   r   r   Ú__doc__r   r%   r)   r.   r8   r:   r<   r?   rB   rE   r
   r   r   r   r      s6   „ ñð €Lóòò-ò%ò(ò
ò
)ó3r   c                   ó  ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ej                  rej                  Zej                  Z e«       Zd	„ Zd
„ Zefd„Zd„ Zd„ Zd„ Zefd„Zd„ ZeZeZeZeZd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#e$d„ «       Z%ˆ xZ&S )r    ap  
    :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                 óÚ   •— t         t        | �  «        t        «       | _        |�3t        |t        «      r| j                  |«       n| j                  |«       |r| j                  |«       y y r	   )Úsuperr    r)   r   r&   Ú
isinstanceÚ
_copy_fromÚextend)r   ÚheadersÚkwargsÚ	__class__s      €r   r)   zHTTPHeaderDict.__init__�   sU   ø€ ÜŒn˜dÑ,Ô.Ü%›-ˆŒØÐÜ˜'¤>Ô2Ø—‘ Õ(à—‘˜GÔ$ÙØ�K‰K˜Õð r   c                 óz   — ||g| j                   |j                  «       <   | j                   |j                  «          S r	   ©r&   Úlower©r   r,   Úvals      r   r8   zHTTPHeaderDict.__setitem__˜   s/   € Ø(+¨S zˆ�‰˜Ÿ	™	›Ñ$Ø�‰˜sŸy™y›{Ñ+Ð+r   c                 ód   — | j                   |j                  «          }dj                  |dd  «      S )Nú, r   ©r&   rS   ÚjoinrT   s      r   r.   zHTTPHeaderDict.__getitem__œ   s+   € Ø�o‰o˜cŸi™i›kÑ*ˆØ�y‰y˜˜Q˜R˜Ó!Ð!r   c                 ó:   — | j                   |j                  «       = y r	   rR   ©r   r,   s     r   r:   zHTTPHeaderDict.__delitem__    s   € Ø�O‰O˜CŸI™I›KÑ(r   c                 ó:   — |j                  «       | j                  v S r	   )rS   r&   r[   s     r   Ú__contains__zHTTPHeaderDict.__contains__£   s   € Ø�y‰y‹{˜dŸo™oÐ-Ð-r   c                 ó
  — t        |t        «      st        |d«      syt        |t        | «      «      s t        | «      |«      }t	        d„ | j                  «       D «       «      t	        d„ |j                  «       D «       «      k(  S )NrE   Fc              3   óF   K  — | ]  \  }}|j                  «       |f–— Œ y ­wr	   ©rS   ©Ú.0ÚkÚvs      r   ú	<genexpr>z(HTTPHeaderDict.__eq__.<locals>.<genexpr>«   s   è ø€ ÒA¡t q¨!�Q—W‘W“Y ”NÑAùó   ‚!c              3   óF   K  — | ]  \  }}|j                  «       |f–— Œ y ­wr	   r`   ra   s      r   re   z(HTTPHeaderDict.__eq__.<locals>.<genexpr>«   s%   è ø€ ò J
Ù#˜q !ˆQ�W‰W‹Y˜ŒNñJ
ùrf   )rK   r   ÚhasattrÚtypeÚdictÚ
itermerged©r   Úothers     r   Ú__eq__zHTTPHeaderDict.__eq__¦   su   € Ü˜%¤Ô)´'¸%ÀÔ2HØÜ˜%¤ d£Ô,Ø”D˜“J˜uÓ%ˆEÜÑA¨t¯©Ó/@ÔAÓAÄTñ J
Ø',×'7Ñ'7Ó'9ôJ
ó F
ñ 
ð 	
r   c                 ó&   — | j                  |«       S r	   )rn   rl   s     r   Ú__ne__zHTTPHeaderDict.__ne__¯   s   € Ø—;‘;˜uÓ%Ð%Ð%r   c                 ó,   — t        | j                  «      S r	   )r3   r&   r   s    r   r<   zHTTPHeaderDict.__len__¸   s   € Ü�4—?‘?Ó#Ð#r   c              #   óX   K  — | j                   j                  «       D ]	  }|d   –— Œ y ­w)Nr   )r&   rC   )r   Úvalss     r   r?   zHTTPHeaderDict.__iter__»   s+   è ø€ à—O‘O×*Ñ*Ó,ò 	ˆDØ�q‘'‹Mñ	ùs   ‚(*c                 óX   — 	 | |   }| |= |S # t         $ r || j                  u r‚ |cY S w xY w)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   r,   Údefaultr5   s       r   r+   zHTTPHeaderDict.popÀ   sC   € ð	Ø˜‘IˆEð �S�	ØˆLøô ò 	Ø˜$Ÿ-™-Ñ'ØØŠNð	ús   ‚ Œ)¨)c                 ó*   — 	 | |= y # t         $ r Y y w xY wr	   )ru   r[   s     r   ÚdiscardzHTTPHeaderDict.discardÑ   s    € ð	Ø�S‘	øÜò 	Ùð	ús   ‚ †	‘c                 ó�   — |j                  «       }||g}| j                  j                  ||«      }||ur|j                  |«       yy)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)rS   r&   Ú
setdefaultÚappend)r   r,   rU   Ú	key_lowerÚnew_valsrs   s         r   ÚaddzHTTPHeaderDict.add×   sG   € ð —I‘I“Kˆ	Ø˜�:ˆà�‰×)Ñ)¨)°XÓ>ˆØ˜4ÑØ�K‰K˜Õð  r   c                 óZ  — t        |«      dkD  r#t        dj                  t        |«      «      «      ‚t        |«      dk\  r|d   nd}t        |t        «      r+|j                  «       D ]  \  }}| j                  ||«       Œ n€t        |t        «      r|D ]  }| j                  |||   «       Œ nSt        |d«      r+|j                  «       D ]  }| j                  |||   «       Œ n|D ]  \  }}| j                  ||«       Œ |j                  «       D ]  \  }}| j                  ||«       Œ y)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
   rE   N)r3   Ú	TypeErrorÚformatrK   r    Ú	iteritemsr   r   rh   rE   Úitems)r   ÚargsrO   rm   r,   rU   r5   s          r   rM   zHTTPHeaderDict.extendç   s   € ô
 ˆt‹9�qŠ=Üð(ß(.©¬s°4«yÓ(9óð ô ˜t›9¨š>��Q’¨rˆä�eœ^Ô,Ø!ŸO™OÓ-ò #‘��SØ—‘˜˜cÕ"ñ#ä˜œwÔ'Øò *�Ø—‘˜˜e C™jÕ)ñ*ä�U˜FÔ#Ø—z‘z“|ò *�Ø—‘˜˜e C™jÕ)ñ*ð $ò %‘
��UØ—‘˜˜eÕ$ð%ð !Ÿ,™,›.ò 	!‰JˆC�Ø�H‰H�S˜%Õ ñ	!r   c                 óŽ   — 	 | j                   |j                  «          }|dd S # t        $ r || j                  u rg cY S |cY S w xY w)zmReturns a list of all the values for the named field. Returns an
        empty list if the key doesn't exist.r   N)r&   rS   ru   rv   )r   r,   rw   rs   s       r   ÚgetlistzHTTPHeaderDict.getlist  sO   € ð	Ø—?‘? 3§9¡9£;Ñ/ˆDð ˜˜�8ˆOøô ò 	Ø˜$Ÿ-™-Ñ'Ø’	ØŠNð	ús   ‚$ ¤A¿AÁAc                 ó>   — g d¢}|D ]  }| j                  |«       Œ | S )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)ry   )r   Úcontent_specific_headersÚheaders      r   Ú_prepare_for_method_changez)HTTPHeaderDict._prepare_for_method_change  s,   € ò
$
Ð ð /ò 	!ˆFØ�L‰L˜Õ ð	!àˆr   c                 óf   — t        | «      j                  ›dt        | j                  «       «      ›d�S )Nú(ú))ri   r   rj   rk   r   s    r   Ú__repr__zHTTPHeaderDict.__repr__)  s#   € Ü ›:×.Ó.´°T·_±_Ó5FÕ0GÐHÐHr   c                 ó¬   — |D ]O  }|j                  |«      }t        |t        «      rt        |«      }|g|z   | j                  |j	                  «       <   ŒQ y r	   )r‡   rK   rA   r&   rS   )r   rm   r,   rU   s       r   rL   zHTTPHeaderDict._copy_from,  sL   € Øò 	7ˆCØ—-‘- Ó$ˆCÜ˜#œtÔ$ä˜3“i�Ø,/¨5°3©;ˆD�O‰O˜CŸI™I›KÒ(ñ	7r   c                 óH   —  t        | «      «       }|j                  | «       |S r	   )ri   rL   )r   Úclones     r   ÚcopyzHTTPHeaderDict.copy4  s"   € Ø”�T“
“ˆØ×Ñ˜ÔØˆr   c              #   óz   K  — | D ]2  }| j                   |j                  «          }|dd D ]  }|d   |f–— Œ Œ4 y­w)z8Iterate over all header lines, including duplicate ones.r   Nr   rR   )r   r,   rs   rU   s       r   rƒ   zHTTPHeaderDict.iteritems9  sL   è ø€ àò 	#ˆCØ—?‘? 3§9¡9£;Ñ/ˆDØ˜A˜B�xò #�Ø˜1‘g˜s�lÓ"ñ#ñ	#ùs   ‚9;c              #   óŠ   K  — | D ]:  }| j                   |j                  «          }|d   dj                  |dd «      f–— Œ< y­w)z:Iterate over all headers, merging duplicate ones together.r   rW   r   NrX   rT   s      r   rk   zHTTPHeaderDict.itermerged@  sG   è ø€ àò 	-ˆCØ—/‘/ #§)¡)£+Ñ.ˆCØ�a‘&˜$Ÿ)™) C¨¨ GÓ,Ð,Ó,ñ	-ùs   ‚AAc                 ó4   — t        | j                  «       «      S r	   )rA   rƒ   r   s    r   r„   zHTTPHeaderDict.itemsF  s   € Ü�D—N‘NÓ$Ó%Ð%r   c                 ó2  — d}g }|j                   D ]}  }|j                  |«      r4|st        d|z  «      ‚|d   \  }}||dz   |j                  «       z   f|d<   ŒH|j	                  dd«      \  }}|j                  ||j                  «       f«       Œ  | |«      S )z4Read headers from a Python 2 httplib message object.)ú ú	z/Header continuation with no previous header: %séÿÿÿÿr™   ú:r   )rN   Ú
startswithr   ÚstripÚsplitr|   )ÚclsÚmessageÚobs_fold_continued_leadersrN   Úliner,   r5   s          r   Úfrom_httplibzHTTPHeaderDict.from_httplibI  s¯   € ð &1Ð"Øˆà—O‘Oò 	1ˆDØ�‰Ð9Ô:Ùô (ØIÈDÑPóð ð ")¨¡‘J�C˜Ø#&¨°©°d·j±j³lÑ(BÐ"C�G˜B‘KØàŸ™ C¨Ó+‰JˆC�Ø�N‰N˜C §¡£Ð/Õ0ð	1ñ" �7‹|Ðr   r	   )'r   r   r   rG   r)   r8   r.   r:   r]   rn   rp   r   ÚPY2r   r   r   Úobjectrv   r<   r?   r+   ry   r   rM   r‡   rŒ   Ú
getheadersÚgetallmatchingheadersÚigetÚget_allr�   rL   r”   rƒ   rk   r„   Úclassmethodr¤   Ú__classcell__)rP   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¦   r1   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#Á&A8Á7A8