
    h(                         S SK r S SKJr   " S S5      r " S S\5      r " S S\5      r " S	 S
\5      r	 " S S\5      r
 " S S\5      rg)    N)Mappingc                   X    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rS rSrg)
OrderedSet   z7
A set which keeps the ordering of the inserted items.
Nc                 J    [         R                  U=(       d    S5      U l         g )N )dictfromkeys)selfiterables     M/var/www/html/env/lib/python3.13/site-packages/django/utils/datastructures.py__init__OrderedSet.__init__
   s    MM(.b1	    c                 "    S U R                   U'   g Nr	   r   items     r   addOrderedSet.add   s    		$r   c                     U R                   U	 g r   r   r   s     r   removeOrderedSet.remove   s    IIdOr   c                 H     U R                  U5        g ! [         a     g f = fr   )r   KeyErrorr   s     r   discardOrderedSet.discard   s%    	KK 		s    
!!c                 ,    [        U R                  5      $ r   )iterr	   r   s    r   __iter__OrderedSet.__iter__       DIIr   c                 ,    [        U R                  5      $ r   )reversedr	   r!   s    r   __reversed__OrderedSet.__reversed__   s    		""r   c                     XR                   ;   $ r   r   r   s     r   __contains__OrderedSet.__contains__   s    yy  r   c                 ,    [        U R                  5      $ r   )boolr	   r!   s    r   __bool__OrderedSet.__bool__"   r$   r   c                 ,    [        U R                  5      $ r   )lenr	   r!   s    r   __len__OrderedSet.__len__%   s    499~r   c                     U R                   (       a  [        [        U R                   5      5      OSnU R                  R                   SU S3$ )N ())r	   reprlist	__class____qualname__)r   datas     r   __repr__OrderedSet.__repr__(   s:    (,		tDO$r..--.avQ77r   r   r   )__name__
__module__r;   __firstlineno____doc__r   r   r   r   r"   r'   r*   r.   r2   r=   __static_attributes__r   r   r   r   r      s9    2#!8r   r   c                       \ rS rSrSrg)MultiValueDictKeyError-   r   N)r?   r@   r;   rA   rC   r   r   r   rE   rE   -   s    r   rE   c                      ^  \ rS rSrSrSU 4S jjrU 4S jrU 4S jrU 4S jrS r	S	 r
S
 rS rSS jrSU 4S jjrSS jrU 4S jrSS jrSS jrS rS rU 4S jrS rS rS rS rSrU =r$ )MultiValueDict1   a\  
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.
r   c                 $   > [         TU ]  U5        g r   )superr   )r   key_to_list_mappingr:   s     r   r   MultiValueDict.__init__H   s    ,-r   c                 Z   > SU R                   R                  < S[        TU ]  5       < S3$ )N<z: >)r:   r?   rK   r=   r   r:   s    r   r=   MultiValueDict.__repr__K   s     !^^44eg6F6HIIr   c                    >  [         TU ]  U5      n US   $ ! [         a    [        U5      ef = f! [         a    / s $ f = f)zd
Return the last data value for this key, or [] if it's an empty list;
raise KeyError if not found.
)rK   __getitem__r   rE   
IndexErrorr   keylist_r:   s      r   rU   MultiValueDict.__getitem__N   sW    
	.G',E	9  	.(--	.  	I	s    1 .A A c                 &   > [         TU ]  X/5        g r   rK   __setitem__)r   rX   valuer:   s      r   r]   MultiValueDict.__setitem__\   s    C)r   c           
      ~    U R                  U R                  5        VVs/ s H  u  pXS S  4PM     snn5      $ s  snnf r   )r:   lists)r   kvs      r   __copy__MultiValueDict.__copy___   s1    ~~TZZ\B\TQQ4y\BCCBs   9
c           	          U R                  5       nX![        U 5      '   [        R                  U 5       HD  u  p4[        R	                  U[
        R                  " X15      [
        R                  " XA5      5        MF     U$ r   )r:   idr	   itemsr]   copydeepcopy)r   memoresultrX   r^   s        r   __deepcopy__MultiValueDict.__deepcopy__b   s\    !RX**T*JCc0$--2L + r   c           	      p    0 U R                   ESU  Vs0 s H  oU R                  U5      _M     sn0E$ s  snf N_data)__dict___getlist)r   rb   s     r   __getstate__MultiValueDict.__getstate__k   s6    N$--N*M1dmmA.>+>*MNN*Ms   3c                     UR                  S0 5      nUR                  5        H  u  p4U R                  X45        M     U R                  R	                  U5        g rp   )poprh   setlistrr   update)r   obj_dictr<   rb   rc   s        r   __setstate__MultiValueDict.__setstate__n   sB    ||GR(JJLDALL !X&r   c                 D     X   nU/ :X  a  U$ U$ ! [          a    Us $ f = f)zr
Return the last data value for the passed key. If key doesn't exist
or value is an empty list, return `default`.
)r   )r   rX   defaultvals       r   getMultiValueDict.gett   s7    
	)C "9N
	  	N	s    c                    >  [         TU ]  U5      nU(       a  Ub  [        U5      OSnU$ ! [         a    Uc  / s $ Us $ f = f)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)rK   rU   r9   r   )r   rX   r~   
force_listvaluesr:   s        r   rs   MultiValueDict._getlist   sQ    		W(-F )/);fM  		N	s   + AA Ac                 "    U R                  XSS9$ )zV
Return the list of values for the key. If key doesn't exist, return a
default value.
T)r   )rs   r   rX   r~   s      r   getlistMultiValueDict.getlist   s    
 }}Sd};;r   c                 $   > [         TU ]  X5        g r   r\   rW   s      r   rx   MultiValueDict.setlist   s    C'r   c                     X;  a  X U'   X   $ r   r   r   s      r   
setdefaultMultiValueDict.setdefault   s    ?I yr   c                 Z    X;  a  Uc  / nU R                  X5        U R                  U5      $ r   )rx   rs   )r   rX   default_lists      r   setlistdefaultMultiValueDict.setlistdefault   s/    ?#!LL+ }}S!!r   c                 D    U R                  U5      R                  U5        g)z8Append an item to the internal list associated with key.N)r   appendr   rX   r^   s      r   
appendlistMultiValueDict.appendlist   s    C ''.r   c              #   .   #    U  H  nXU   4v   M     g7f)z]
Yield (key, value) pairs, where value is the last item in the list
associated with the key.
Nr   r   rX   s     r   rh   MultiValueDict.items   s     
 CCy.  s   c                 2   > [        [        TU ]	  5       5      $ )zYield (key, list) pairs.)r    rK   rh   rQ   s    r   ra   MultiValueDict.lists   s    EGMO$$r   c              #   *   #    U  H	  nX   v   M     g7f)z'Yield the last value on every key list.Nr   r   s     r   r   MultiValueDict.values   s     C)O    c                 .    [         R                   " U 5      $ )z%Return a shallow copy of this object.)ri   r!   s    r   ri   MultiValueDict.copy   s    yyr   c                    [        U5      S:  a  [        S[        U5      -  5      eU(       a  US   n[        U[        5      (       a:  UR	                  5        H%  u  pEU R                  U5      R                  U5        M'     OP[        U[        5      (       a  UR                  5       nU H%  u  pFU R                  U5      R                  U5        M'     UR                  5        H%  u  pFU R                  U5      R                  U5        M'     g)z.Extend rather than replace existing key lists.   z*update expected at most 1 argument, got %dr   N)
r1   	TypeError
isinstancerH   ra   r   extendr   rh   r   )r   argskwargsargrX   
value_listr^   s          r   ry   MultiValueDict.update   s    t9q=H3t9TUUq'C#~..'*yy{OC'',33J? (3 c7++))+C"%JC'',33E: #& ,,.JC$++E2 )r   c                 6    U  Vs0 s H  oX   _M	     sn$ s  snf )z5Return current object as a dict with singular values.r   r   s     r   r	   MultiValueDict.dict   s    *./$3TY$///s   )r   r   )NF)r?   r@   r;   rA   rB   r   r=   rU   r]   rd   rm   rt   r{   r   rs   r   rx   r   r   r   rh   ra   r   ri   ry   r	   rC   __classcell__r:   s   @r   rH   rH   1   sy    ,.J*DO'$<("/!%
3"0 0r   rH   c                   `    \ rS rSrSrSS.S jrS r\r\r\r	\r
\r\r\r\r\r\r\r\r\rSrg)ImmutableList   a  
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    [         R                  " U /UQ70 UD6nXl        U$ r   )tuple__new__r   )clsr   r   r   r   s        r   r   ImmutableList.__new__   s$    }}S24262r   c                 ,    [        U R                  5      er   )AttributeErrorr   )r   r   r   s      r   complainImmutableList.complain   s    T\\**r   N)r?   r@   r;   rA   rB   r   r   __delitem____delslice____iadd____imul__r]   __setslice__r   r   insertrw   r   sortreverserC   r   r   r   r   r      sZ    
 %I 
+ KLHHKLFFF
CFDGr   r   c                   8   ^  \ rS rSrSrU 4S jrU 4S jrSrU =r$ )DictWrapperi  a/  
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U ]  U5        X l        X0l        g r   )rK   r   funcprefix)r   r<   r   r   r:   s       r   r   DictWrapper.__init__  s    	r   c                    > UR                  U R                  5      nUR                  U R                  5      n[        TU ]  U5      nU(       a  U R                  U5      $ U$ )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.
)
startswithr   removeprefixrK   rU   r   )r   rX   use_funcr^   r:   s       r   rU   DictWrapper.__getitem__  sQ     >>$++.t{{+#C(99U##r   )r   r   )	r?   r@   r;   rA   rB   r   rU   rC   r   r   s   @r   r   r     s    
 r   r   c                   R    \ rS rSrSrS rS rS rS rS r	S r
S	 r\S
 5       rSrg)CaseInsensitiveMappingi  aa  
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                     U R                  U5       VVs0 s H  u  p#UR                  5       X#4_M     snnU l        g s  snnf r   )_unpack_itemslower_store)r   r<   rb   rc   s       r   r   CaseInsensitiveMapping.__init__0  s7    595G5G5MN5MTQqwwy1&(5MNNs   =c                 B    U R                   UR                  5          S   $ )Nr   )r   r   r   s     r   rU   "CaseInsensitiveMapping.__getitem__3  s    {{399;'**r   c                 ,    [        U R                  5      $ r   )r1   r   r!   s    r   r2   CaseInsensitiveMapping.__len__6  s    4;;r   c                    [        U[        5      =(       ai    U R                  5        VVs0 s H  u  p#UR                  5       U_M     snnUR                  5        VVs0 s H  u  p#UR                  5       U_M     snn:H  $ s  snnf s  snnf r   )r   r   rh   r   )r   otherrb   rc   s       r   __eq__CaseInsensitiveMapping.__eq__9  sp    %) 6%)ZZ\/
%1TQAGGIqL\/
',{{}5}tqaggil}5/6 	6 /
5s   BBc                 D    S U R                   R                  5        5       $ )Nc              3   *   #    U  H	  u  pUv   M     g 7fr   r   ).0original_keyr^   s      r   	<genexpr>2CaseInsensitiveMapping.__iter__.<locals>.<genexpr>?  s     M8L!48Lr   )r   r   r!   s    r   r"   CaseInsensitiveMapping.__iter__>  s    M8J8J8LMMr   c                 ~    [        U R                  R                  5        VVs0 s H  u  pX_M	     snn5      $ s  snnf r   )r8   r   r   r   s      r   r=   CaseInsensitiveMapping.__repr__A  s2    $++2D2D2FG2FJCSZ2FGHHGs   9
c                     U $ r   r   r!   s    r   ri   CaseInsensitiveMapping.copyD  s    r   c           	   #   `  #    [        U [        [        45      (       a  U R                  5        S h  vN   g [	        U 5       He  u  p[        U5      S:w  a$  [        SR                  U[        U5      5      5      e[        US   [        5      (       d  [        SUS   -  5      eUv   Mg     g  Nz7f)N   zDdictionary update sequence element #{} has length {}; 2 is required.r   z0Element key %r invalid, only strings are allowed)	r   r	   r   rh   	enumerater1   
ValueErrorformatstr)r<   ielems      r   r   $CaseInsensitiveMapping._unpack_itemsG  s     
 dT7O,,zz|## GA4yA~ %%+VAs4y%9  d1gs++ FaP  J ' $s   /B.B,A;B.)r   N)r?   r@   r;   rA   rB   r   rU   r2   r   r"   r=   ri   staticmethodr   rC   r   r   r   r   r     sA    "O+ 6
NI  r   r   )ri   collections.abcr   r   r   rE   r	   rH   r   r   r   r   r   r   r   <module>r      sV     #%8 %8P	X 	h0T h0V"E "J$ :;W ;r   