� ��^i;*���ddlmZ ddlmZmZn#e$r ddlmZmZYnwxYw ddlmZn#e$rGd�d��ZYnwxYwddlm Z ddl m Z dd l m Z dd lmZmZd d gZe��ZGd �d e��ZGd�d e��ZdS)�)�absolute_import)�Mapping�MutableMapping)�RLockc��eZdZd�Zd�ZdS)rc��dS�N���selfs ��/builddir/build/BUILDROOT/alt-python311-pip-21.3.1-4.el8.x86_64/opt/alt/python311/lib/python3.11/site-packages/pip/_vendor/urllib3/_collections.py� __enter__zRLock.__enter__ ��� �D�c��dSr r )r �exc_type� exc_value� tracebacks r �__exit__zRLock.__exit__rrN)�__name__� __module__� __qualname__rrr rr rr s2������ � � � � � � � rr)� OrderedDict�)� InvalidHeader)�six)�iterkeys� itervalues�RecentlyUsedContainer�HTTPHeaderDictc�H�eZdZdZeZd d�Zd�Zd�Zd�Z d�Z d �Z d �Z d �Z dS) ra� 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�z�||_||_|���|_t ��|_dSr )�_maxsize� dispose_func� ContainerCls� _containerr�lock)r �maxsizer%s r �__init__zRecentlyUsedContainer.__init__/s3���� �(����+�+�-�-����G�G�� � � rc��|j5|j�|��}||j|<|cddd��S#1swxYwYdSr )r(r'�pop)r �key�items r � __getitem__z!RecentlyUsedContainer.__getitem__6s��� �Y� � ��?�&�&�s�+�+�D�#'�D�O�C� �� � � � � � � � � � � � ���� � � � � � s �&;�?�?c�n�t}|j5|j�|t��}||j|<t |j��|jkr|j�d���\}}ddd��n #1swxYwY|jr |tur|�|��dSdSdS)NF)�last)�_Nullr(r'�get�lenr$�popitemr%)r r-�value� evicted_value�_keys r � __setitem__z!RecentlyUsedContainer.__setitem__=s��� � �Y� J� J� �O�/�/��U�;�;�M�#(�D�O�C� ��4�?�#�#�d�m�3�3�&*�o�&=�&=�5�&=�&I�&I�#��m� J� J� J� J� J� J� J� J� J� J� J���� J� J� J� J� � � -��e�!;�!;� � � �m� ,� ,� ,� ,� ,� -� -�!;�!;s�A&B�B�Bc��|j5|j�|��}ddd��n #1swxYwY|jr|�|��dSdSr )r(r'r,r%)r r-r6s r � __delitem__z!RecentlyUsedContainer.__delitem__Ls��� �Y� -� -��O�'�'��,�,�E� -� -� -� -� -� -� -� -� -� -� -���� -� -� -� -� � � %� � � �e� $� $� $� $� $� %� %s �/�3�3c�l�|j5t|j��cddd��S#1swxYwYdSr )r(r4r'r s r �__len__zRecentlyUsedContainer.__len__Ss{�� �Y� (� (��t��'�'� (� (� (� (� (� (� (� (� (� (� (� (���� (� (� (� (� (� (s �)�-�-c� �td���)Nz7Iteration over this class is unlikely to be threadsafe.)�NotImplementedErrorr s r �__iter__zRecentlyUsedContainer.__iter__Ws��!� E� � � rc���|j5tt|j����}|j���ddd��n #1swxYwY|jr|D]}|�|���dSdSr )r(�listrr'�clearr%)r �valuesr6s r rCzRecentlyUsedContainer.clear\s��� �Y� $� $��*�T�_�5�5�6�6�F� �O� !� !� #� #� #� $� $� $� $� $� $� $� $� $� $� $���� $� $� $� $� � � )�� )� )���!�!�%�(�(�(�(� )� )� )� )s�;A�A�Ac��|j5tt|j����cddd��S#1swxYwYdSr )r(rBrr'r s r �keyszRecentlyUsedContainer.keysfs��� �Y� 3� 3�����1�1�2�2� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3� 3���� 3� 3� 3� 3� 3� 3s �!6�:�:)r"N)rrr�__doc__rr&r*r/r9r;r=r@rCrFr rr rrs������� � ��L�������� -� -� -�%�%�%�(�(�(� � � � )�)�)�3�3�3�3�3rc���eZdZdZd�fd� Zd�Zd�Zd�Zd�Zd�Z d �Z e j re jZe jZe��Zd �Zd �Zefd �Zd �Zd�Zd�Zefd�ZeZeZeZeZd�Zd�Zd�Zd�Z d�Z!d�Z"e#d���Z$�xZ%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' Nc �2��tt|�����t��|_|�@t |t��r|�|��n|�|��|r|�|��dSdSr )�superr r*rr'� isinstance� _copy_from�extend)r �headers�kwargs� __class__s �r r*zHTTPHeaderDict.__init__�s���� �n�d�#�#�,�,�.�.�.�%�-�-��� � ��'�>�2�2� %�����(�(�(�(�� � �G�$�$�$� � � �K�K�� � � � � � � rc�|�||g|j|���<|j|���Sr �r'�lower�r r-�vals r r9zHTTPHeaderDict.__setitem__�s/��(+�S�z���� � � � �$���s�y�y�{�{�+�+rc�z�|j|���}d�|dd���S)N�, r�r'rS�joinrTs r r/zHTTPHeaderDict.__getitem__�s0���o�c�i�i�k�k�*���y�y��Q�R�R��!�!�!rc�:�|j|���=dSr rR�r r-s r r;zHTTPHeaderDict.__delitem__�s�� �O�C�I�I�K�K� (� (� (rc�8�|���|jvSr )rSr'r[s r � __contains__zHTTPHeaderDict.__contains__�s���y�y�{�{�d�o�-�-rc�j�t|t��st|d��sdSt|t|����st|��|��}t d�|���D����t d�|���D����kS)NrFFc3�HK�|]\}}|���|fV��dSr �rS��.0�k�vs r � z(HTTPHeaderDict.__eq__..�s2����A�A�t�q�!�Q�W�W�Y�Y��N�A�A�A�A�A�Arc3�HK�|]\}}|���|fV��dSr r`ras r rez(HTTPHeaderDict.__eq__..�sK����J �J �#�q�!�Q�W�W�Y�Y��N�J �J �J �J �J �J r)rKr�hasattr�type�dict� itermerged�r �others r �__eq__zHTTPHeaderDict.__eq__�s����%��)�)� �'�%��2H�2H� ��5��%��d���,�,� &��D��J�J�u�%�%�E��A�A�t���/@�/@�A�A�A�A�A�T�J �J �',�'7�'7�'9�'9�J �J �J �F �F � � rc�.�|�|�� Sr )rmrks r �__ne__zHTTPHeaderDict.__ne__�s���;�;�u�%�%�%�%rc�*�t|j��Sr )r4r'r s r r=zHTTPHeaderDict.__len__�s���4�?�#�#�#rc#�VK�|j���D] }|dV�� dS)Nr)r'rD)r �valss r r@zHTTPHeaderDict.__iter__�s<�����O�*�*�,�,� � �D��q�'�M�M�M�M� � rc�V� ||}||=|S#t$r||jur�|cYSwxYw)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-�defaultr6s r r,zHTTPHeaderDict.pop�sT�� ���I�E� �S� ��L�� � � � ��$�-�'�'���N�N�N� ���s ��(�(c�0� ||=dS#t$rYdSwxYwr )rtr[s r �discardzHTTPHeaderDict.discard�s4�� ��S� � � ��� � � � �D�D� ���s �� �c��|���}||g}|j�||��}||ur|�|��dSdS)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)rSr'� setdefault�append)r r-rU� key_lower�new_valsrrs r �addzHTTPHeaderDict.add�s\���I�I�K�K� ���:����)�)�)�X�>�>�� �4� � � �K�K�� � � � � � � rc���t|��dkr/td�t|�������t|��dkr|dnd}t|t��r1|���D]\}}|�||���n�t|t��r"|D]}|�|||���nbt|d��r4|� ��D]}|�|||���n|D]\}}|�||���|� ��D]\}}|�||���dS)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__ rz9extend() takes at most 1 positional arguments ({0} given)rr rFN) r4� TypeError�formatrKr � iteritemsr~rrgrF�items)r �argsrOrlr-rUr6s r rMzHTTPHeaderDict.extend�s��� �t�9�9�q�=�=��(�(.��s�4�y�y�(9�(9��� ��t�9�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�%� � � � � !� !rc�� |j|���}|dd�S#t$r||jurgcYS|cYSwxYw)zmReturns a list of all the values for the named field. Returns an empty list if the key doesn't exist.rN)r'rSrtru)r r-rvrrs r �getlistzHTTPHeaderDict.getlistsf�� ��?�3�9�9�;�;�/�D� ����8�O�� � � � ��$�-�'�'�� � � ��N�N�N� ���s�+�A�A�Ac�t�t|��j�dt|������d�S)N�(�))rhrrirjr s r �__repr__zHTTPHeaderDict.__repr__s4����:�:�.�.�.��T�_�_�5F�5F�0G�0G�0G�0G�H�Hrc���|D][}|�|��}t|t��rt|��}|g|z|j|���<�\dSr )r�rKrBr'rS)r rlr-rUs r rLzHTTPHeaderDict._copy_fromsf��� 7� 7�C��-�-��$�$�C��#�t�$�$� ��3�i�i��,/�5�3�;�D�O�C�I�I�K�K� (� (�  7� 7rc�^�t|����}|�|��|Sr )rhrL)r �clones r �copyzHTTPHeaderDict.copy"s,����T� � � � �� �������� rc#�K�|D]:}|j|���}|dd�D]}|d|fV���;dS)z8Iterate over all header lines, including duplicate ones.rNrrR)r r-rrrUs r r�zHTTPHeaderDict.iteritems'sf����� #� #�C��?�3�9�9�;�;�/�D��A�B�B�x� #� #���1�g�s�l�"�"�"�"� #� #� #rc#�K�|D]H}|j|���}|dd�|dd���fV��IdS)z:Iterate over all headers, merging duplicate ones together.rrWrNrXrTs r rjzHTTPHeaderDict.itermerged.s_����� -� -�C��/�#�)�)�+�+�.�C��a�&�$�)�)�C����G�,�,�,� ,� ,� ,� ,� -� -rc�D�t|�����Sr )rBr�r s r r�zHTTPHeaderDict.items4s���D�N�N�$�$�%�%�%rc�`�d}g}|jD]�}|�|��r?|std|z���|d\}}||dz|���zf|d<�V|�dd��\}}|�||���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-r6s r � from_httplibzHTTPHeaderDict.from_httplib7s��� &1�"����O� 1� 1�D����9�:�:� �� �(�I�D�P����")���J�C��#&��� �d�j�j�l�l�(B�"C�G�B�K�����C��+�+�J�C�� �N�N�C������/� 0� 0� 0� 0��s�7�|�|�rr )&rrrrGr*r9r/r;r]rmror�PY2rrr�objectrur=r@r,rxr~rMr�� getheaders�getallmatchingheaders�iget�get_allr�rLr�r�rjr�� classmethodr�� __classcell__)rPs@r r r ks����������B  �  �  �  �  �  �,�,�,�"�"�"�)�)�)�.�.�.� � � �&�&�&� �w�/�!�*��#�.� ��v�x�x�H�$�$�$���� (�����"��� ��� !�!�!�8$,� � � � ��J�#�� �D��G�I�I�I�7�7�7���� #�#�#�-�-�-� &�&�&�����[�����rN)� __future__r�collections.abcrr� ImportError� collections� threadingrr� exceptionsr�packagesr� packages.sixrr�__all__r�r2rr r rr �r�s���&�&�&�&�&�&�4�7�7�7�7�7�7�7�7�7���4�4�4�3�3�3�3�3�3�3�3�3�3�4���� ���������������������������$�#�#�#�#�#�%�%�%�%�%�%�������.�.�.�.�.�.�.�.� "�$4� 5�� �����I3�I3�I3�I3�I3�N�I3�I3�I3�Xf�f�f�f�f�^�f�f�f�f�fs�� !�!�,�A�A