
    h'                         d dl Z d dlmZ  G d d      Z G d de      Z G d de      Z G d	 d
e      Z	 G d de      Z
d Z G d de      Zy)    N)Mappingc                   B    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zy)
OrderedSetz?
    A set which keeps the ordering of the inserted items.
    Nc                 @    t         j                  |xs d      | _         y )N )dictfromkeys)selfiterables     ^/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/utils/datastructures.py__init__zOrderedSet.__init__
   s    MM(.b1	    c                 "    d | j                   |<   y Nr   r
   items     r   addzOrderedSet.add   s    		$r   c                     | j                   |= y r   r   r   s     r   removezOrderedSet.remove   s    IIdOr   c                 F    	 | j                  |       y # t        $ r Y y w xY wr   )r   KeyErrorr   s     r   discardzOrderedSet.discard   s%    	KK 		s    	  c                 ,    t        | j                        S r   )iterr   r
   s    r   __iter__zOrderedSet.__iter__       DIIr   c                     || j                   v S r   r   r   s     r   __contains__zOrderedSet.__contains__   s    tyy  r   c                 ,    t        | j                        S r   )boolr   r   s    r   __bool__zOrderedSet.__bool__   r   r   c                 ,    t        | j                        S r   )lenr   r   s    r   __len__zOrderedSet.__len__"   s    499~r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r    r#   r&   r   r   r   r   r      s/    2!r   r   c                       e Zd Zy)MultiValueDictKeyErrorN)r'   r(   r)   r   r   r   r,   r,   &   s    r   r,   c                        e Zd ZdZd fd	Z fdZ fdZ fdZd Zd Z	d Z
d	 Zdd
Zd fd	ZddZ fdZddZddZd Zd Z fdZd Zd Zd Zd Z xZS )MultiValueDicta  
    A subclass of dictionary customized to handle multiple values for the
    same key.

    >>> d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']})
    >>> d['name']
    'Simon'
    >>> d.getlist('name')
    ['Adrian', 'Simon']
    >>> d.getlist('doesnotexist')
    []
    >>> d.getlist('doesnotexist', ['Adrian', 'Simon'])
    ['Adrian', 'Simon']
    >>> d.get('lastname', 'nonexistent')
    'nonexistent'
    >>> d.setlist('lastname', ['Holovaty', 'Willison'])

    This class exists to solve the irritating problem raised by cgi.parse_qs,
    which returns a list for every key, even though most Web forms submit
    single name-value pairs.
    c                 $    t         |   |       y r   )superr   )r
   key_to_list_mapping	__class__s     r   r   zMultiValueDict.__init__@   s    ,-r   c                 V    d| j                   j                  dt        |          dS )N<z: >)r2   r'   r0   __repr__r
   r2   s    r   r6   zMultiValueDict.__repr__C   s     !^^44eg6F6HIIr   c                     	 t         |   |      }	 |d   S # t        $ r t        |      w xY w# t        $ r g cY S w xY w)z|
        Return the last data value for this key, or [] if it's an empty list;
        raise KeyError if not found.
        )r0   __getitem__r   r,   
IndexErrorr
   keylist_r2   s      r   r:   zMultiValueDict.__getitem__F   sW    
	.G',E	9  	.(--	.  	I	s    0 ->>c                 (    t         |   ||g       y r   r0   __setitem__)r
   r=   valuer2   s      r   rA   zMultiValueDict.__setitem__T   s    C%)r   c           
      |    | j                  | j                         D cg c]  \  }}||d d  f c}}      S c c}}w r   )r2   lists)r
   kvs      r   __copy__zMultiValueDict.__copy__W   s@    ~~


1 !I
  	 
s   8
c           	          | j                         }||t        |       <   t        j                  |       D ]D  \  }}t        j	                  |t        j                  ||      t        j                  ||             F |S r   )r2   idr   itemsrA   copydeepcopy)r
   memoresultr=   rB   s        r   __deepcopy__zMultiValueDict.__deepcopy__]   si    !RX**T* 	9JCVT]]3%=!]]5$79	9 r   c           	      l    i | j                   d| D ci c]  }|| j                  |       c}iS c c}w N_data)__dict___getlist)r
   rE   s     r   __getstate__zMultiValueDict.__getstate__e   s4    N$--N*M11dmmA.>+>*MNN*Ms   1c                     |j                  di       }|j                         D ]  \  }}| j                  ||        | j                  j	                  |       y rQ   )poprJ   setlistrS   update)r
   obj_dictdatarE   rF   s        r   __setstate__zMultiValueDict.__setstate__h   sK    ||GR(JJL 	DAqLLA	X&r   c                 B    	 | |   }|g k(  r|S |S # t         $ r |cY S w xY w)z
        Return the last data value for the passed key. If key doesn't exist
        or value is an empty list, return `default`.
        )r   )r
   r=   defaultvals       r   getzMultiValueDict.getn   s9    
	s)C "9N
	  	N	s    c                 x    	 t         |   |      }|r|t        |      nd}|S # t        $ r |g cY S |cY S w xY w)z
        Return a list of values for the key.

        Used internally to manipulate values list. If force_list is True,
        return a new copy of values.
        N)r0   r:   listr   )r
   r=   r^   
force_listvaluesr2   s        r   rT   zMultiValueDict._getlist{   sQ    		W(-F )/);fM  		N	s   % 999c                 *    | j                  ||d      S )zn
        Return the list of values for the key. If key doesn't exist, return a
        default value.
        T)rc   )rT   r
   r=   r^   s      r   getlistzMultiValueDict.getlist   s    
 }}S'd};;r   c                 &    t         |   ||       y r   r@   r<   s      r   rX   zMultiValueDict.setlist   s    C'r   c                     || vr|| |<   | |   S r   r   rf   s      r   
setdefaultzMultiValueDict.setdefault   s    d?DI Cyr   c                 X    || vr|g }| j                  ||       | j                  |      S r   )rX   rT   )r
   r=   default_lists      r   setlistdefaultzMultiValueDict.setlistdefault   s3    d?#!LLl+ }}S!!r   c                 D    | j                  |      j                  |       y)z8Append an item to the internal list associated with key.N)rm   appendr
   r=   rB   s      r   
appendlistzMultiValueDict.appendlist   s    C ''.r   c              #   ,   K   | D ]  }|| |   f  yw)zu
        Yield (key, value) pairs, where value is the last item in the list
        associated with the key.
        Nr   r
   r=   s     r   rJ   zMultiValueDict.items   s%     
  	!CtCy. 	!s   c                 2    t        t        | 	               S )zYield (key, list) pairs.)r   r0   rJ   r7   s    r   rD   zMultiValueDict.lists   s    EGMO$$r   c              #   (   K   | D ]	  }| |     yw)z'Yield the last value on every key list.Nr   rs   s     r   rd   zMultiValueDict.values   s      	Cs)O	s   c                 ,    t        j                   |       S )z%Return a shallow copy of this object.)rK   r   s    r   rK   zMultiValueDict.copy   s    yyr   c                    t        |      dkD  rt        dt        |      z        |r|d   }t        |t              r9|j	                         D ]%  \  }}| j                  |      j                  |       ' n:	 |j                         D ]%  \  }}| j                  |      j                  |       ' 	 |j                         D ]%  \  }}| j                  |      j                  |       ' y# t        $ r t        d      w xY w)z.Extend rather than replace existing key lists.   z*update expected at most 1 argument, got %dr   zCMultiValueDict.update() takes either a MultiValueDict or dictionaryN)
r%   	TypeError
isinstancer.   rD   rm   extendrJ   ro   
ValueError)r
   argskwargs
other_dictr=   
value_listrB   s          r   rY   zMultiValueDict.update   s    t9q=H3t9TUUaJ*n5'1'7'7'9 @OC'',33J?@l&0&6&6&8 ?
U++C077>? !,,. 	3JC$++E2	3 ! l$%jkkls   78C) )C>c                 4    | D ci c]  }|| |   
 c}S c c}w )z5Return current object as a dict with singular values.r   rs   s     r   r   zMultiValueDict.dict   s    *./3T#Y///s   )r   r   )NF)r'   r(   r)   r*   r   r6   r:   rA   rG   rO   rU   r\   r`   rT   rg   rX   rj   rm   rq   rJ   rD   rd   rK   rY   r   __classcell__r2   s   @r   r.   r.   *   ss    *.J*O'$<("/!%
3$0r   r.   c                   V    e Zd ZdZdddZd ZeZeZeZeZ	eZ
eZeZeZeZeZeZeZeZy)ImmutableLista0  
    A tuple-like object that raises useful errors when it is asked to mutate.

    Example::

        >>> a = ImmutableList(range(5), warning="You cannot mutate this.")
        >>> a[3] = '4'
        Traceback (most recent call last):
            ...
        AttributeError: You cannot mutate this.
    z"ImmutableList object is immutable.)warningc                F    t        j                  | g|i |}||_        |S r   )tuple__new__r   )clsr   r}   r~   r
   s        r   r   zImmutableList.__new__   s&    }}S24262r   c                 x    t        | j                  t              r| j                  t        | j                        r   )rz   r   	ExceptionAttributeError)r
   wargsr~   s      r   complainzImmutableList.complain   s)    dllI.,, ..r   N)r'   r(   r)   r*   r   r   __delitem____delslice____iadd____imul__rA   __setslice__ro   r{   insertrW   r   sortreverser   r   r   r   r      sZ    
 %I 
/ KLHHKLFFF
CFDGr   r   c                   ,     e Zd ZdZ fdZ fdZ xZS )DictWrapperaG  
    Wrap accesses to a dictionary so that certain values (those starting with
    the specified prefix) are passed through a function before being returned.
    The prefix is removed before looking up the real value.

    Used by the SQL construction code to ensure that values are correctly
    quoted before being used.
    c                 @    t         |   |       || _        || _        y r   )r0   r   funcprefix)r
   r[   r   r   r2   s       r   r   zDictWrapper.__init__  s    	r   c                     |j                  | j                        }|r|t        | j                        d }t        |   |      }|r| j                  |      S |S )z
        Retrieve the real value after stripping the prefix string (if
        present). If the prefix is present, pass the value through self.func
        before returning, otherwise return the raw value.
        N)
startswithr   r%   r0   r:   r   )r
   r=   use_funcrB   r2   s       r   r:   zDictWrapper.__getitem__  sV     >>$++.c$++&'(C#C(99U##r   )r'   r(   r)   r*   r   r:   r   r   s   @r   r   r      s    
 r   r   c           	   #      K   t        |       D ]h  \  }}t        |      dk7  r$t        dj                  |t        |                  t	        |d   t
              st        d|d   z        t        |       j y w)N   zDdictionary update sequence element #{} has length {}; 2 is required.r   z0Element key %r invalid, only strings are allowed)	enumerater%   r|   formatrz   strr   )r[   ielems      r   !_destruct_iterable_mapping_valuesr     s|     T? 4t9>,,2F1c$i,@  $q'3'ORVWXRYYZZDks   A8A:c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
CaseInsensitiveMappinga  
    Mapping allowing case-insensitive key lookups. Original case of keys is
    preserved for iteration and string representation.

    Example::

        >>> ci_map = CaseInsensitiveMapping({'name': 'Jane'})
        >>> ci_map['Name']
        Jane
        >>> ci_map['NAME']
        Jane
        >>> ci_map['name']
        Jane
        >>> ci_map  # original case preserved
        {'name': 'Jane'}
    c                     t        |t              st        |      D ci c]  \  }}||
 }}}|j                         D ci c]  \  }}|j	                         ||f c}}| _        y c c}}w c c}}w r   )rz   r   r   rJ   lower_store)r
   r[   rE   rF   s       r   r   zCaseInsensitiveMapping.__init__:  s`    $(%Ft%LMTQAqDMDM59ZZ\BTQqwwy1a&(B NBs   A)A/c                 B    | j                   |j                            d   S )Nrx   )r   r   rs   s     r   r:   z"CaseInsensitiveMapping.__getitem__?  s    {{399;'**r   c                 ,    t        | j                        S r   )r%   r   r   s    r   r&   zCaseInsensitiveMapping.__len__B  s    4;;r   c                    t        |t              xre | j                         D ci c]  \  }}|j                         | c}}|j                         D ci c]  \  }}|j                         | c}}k(  S c c}}w c c}}w r   )rz   r   rJ   r   )r
   otherrE   rF   s       r   __eq__zCaseInsensitiveMapping.__eq__E  su    %) 
%)ZZ\/
!QAGGIqL/
 &+[[]
!QAGGIqL
/
 	
 /

s   A8A>c                 D    d | j                   j                         D        S )Nc              3   &   K   | ]	  \  }}|  y wr   r   ).0original_keyrB   s      r   	<genexpr>z2CaseInsensitiveMapping.__iter__.<locals>.<genexpr>M  s     M!4uMs   )r   rd   r   s    r   r   zCaseInsensitiveMapping.__iter__L  s    M8J8J8LMMr   c                 |    t        | j                  j                         D ci c]  \  }}||
 c}}      S c c}}w r   )reprr   rd   rp   s      r   r6   zCaseInsensitiveMapping.__repr__O  s0    $++2D2D2FGJCS%ZGHHGs   8
c                     | S r   r   r   s    r   rK   zCaseInsensitiveMapping.copyR  s    r   N)r'   r(   r)   r*   r   r:   r&   r   r   r6   rK   r   r   r   r   r   (  s-    "C
+ 
NIr   r   )rK   collections.abcr   r   r   r,   r   r.   r   r   r   r   r   r   r   r   <module>r      s[     # B	X 	j0T j0Z%E %P$ :	+W +r   