
    Evg(                         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
 G d de          ZdS )    N)Mappingc                   P    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZdS )
OrderedSetz?
    A set which keeps the ordering of the inserted items.
    Nc                 H    t                               |pd          | _         d S )N )dictfromkeys)selfiterables     X/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/utils/datastructures.py__init__zOrderedSet.__init__
   s    MM(.b11			    c                     d | j         |<   d S Nr   r
   items     r   addzOrderedSet.add   s    	$r   c                     | j         |= d S r   r   r   s     r   removezOrderedSet.remove   s    IdOOOr   c                 T    	 |                      |           d S # t          $ r Y d S w xY wr   )r   KeyErrorr   s     r   discardzOrderedSet.discard   sA    	KK 	 	 	DD	s    
''c                 *    t          | j                  S r   )iterr   r
   s    r   __iter__zOrderedSet.__iter__       DIr   c                 *    t          | j                  S r   )reversedr   r   s    r   __reversed__zOrderedSet.__reversed__   s    	"""r   c                     || j         v S r   r   r   s     r   __contains__zOrderedSet.__contains__   s    ty  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    49~~r   c                 z    | j         r!t          t          | j                             nd}| j        j         d| dS )N ())r   reprlist	__class____qualname__r
   datas     r   __repr__zOrderedSet.__repr__(   s?    (,	9tDOO$$$r.-777777r   r   )__name__
__module__r1   __doc__r   r   r   r   r   r!   r#   r&   r)   r4   r   r   r   r   r      s         2 2 2 2        # # #! ! !    8 8 8 8 8r   r   c                       e Zd ZdS )MultiValueDictKeyErrorN)r5   r6   r1   r   r   r   r9   r9   -   s        Dr   r9   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.
    r   c                 J    t                                          |           d S r   )superr   )r
   key_to_list_mappingr0   s     r   r   zMultiValueDict.__init__H   s"    ,-----r   c                 f    d| j         j        dt                                                      dS )N<z: >)r0   r5   r=   r4   r
   r0   s    r   r4   zMultiValueDict.__repr__K   s1     !^444egg6F6F6H6H6H6HIIr   c                     	 t                                          |          }n# t          $ r t          |          w xY w	 |d         S # 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.
        )r=   __getitem__r   r9   
IndexErrorr
   keylist_r0   s      r   rE   zMultiValueDict.__getitem__N   s}    
	.GG'',,EE 	. 	. 	.(---	.	9 	 	 	III	s   !% ?A AAc                 N    t                                          ||g           d S r   r=   __setitem__)r
   rH   valuer0   s      r   rL   zMultiValueDict.__setitem__\   s%    C%)))))r   c                 d    |                      d |                                 D                       S )Nc                 ,    g | ]\  }}||d d          fS r   r   .0kvs      r   
<listcomp>z+MultiValueDict.__copy__.<locals>.<listcomp>`   s(    BBBTQ1QQQ4yBBBr   )r0   listsr   s    r   __copy__zMultiValueDict.__copy___   s+    ~~BBTZZ\\BBBCCCr   c           	         |                                  }||t          |           <   t                              |           D ]G\  }}t                              |t          j        ||          t          j        ||                     H|S r   )r0   idr   itemsrL   copydeepcopy)r
   memoresultrH   rM   s        r   __deepcopy__zMultiValueDict.__deepcopy__b   s    !!RXX**T** 	 	JCc400$-t2L2L    r   c                 6     i  j         d fd D             iS )N_datac                 <    i | ]}|                     |          S r   _getlist)rQ   rR   r
   s     r   
<dictcomp>z/MultiValueDict.__getstate__.<locals>.<dictcomp>l   s'    *M*M*M11dmmA.>.>*M*M*Mr   )__dict__r   s   `r   __getstate__zMultiValueDict.__getstate__k   s/    N$-N*M*M*M*M*M*M*MNNNr   c                     |                     di           }|                                D ]\  }}|                     ||           | j                            |           d S )Nr`   )poprY   setlistre   update)r
   obj_dictr3   rR   rS   s        r   __setstate__zMultiValueDict.__setstate__n   sc    ||GR((JJLL 	 	DAqLLAX&&&&&r   Nc                 N    	 | |         }n# t           $ r |cY S w xY w|g k    r|S |S )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
   rH   defaultvals       r   getzMultiValueDict.gett   sI    
	s)CC 	 	 	NNN	"99N
s    Fc                     	 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)r=   rE   r/   r   )r
   rH   rn   
force_listvaluesr0   s        r   rc   zMultiValueDict._getlist   sw    		WW((--F  F)/);fM  	 	 				NNN	s   !; AAAc                 2    |                      ||d          S )zn
        Return the list of values for the key. If key doesn't exist, return a
        default value.
        T)rr   rb   r
   rH   rn   s      r   getlistzMultiValueDict.getlist   s    
 }}S'd};;;r   c                 L    t                                          ||           d S r   rK   rG   s      r   ri   zMultiValueDict.setlist   s#    C'''''r   c                 $    || vr|| |<   | |         S r   r   ru   s      r   
setdefaultzMultiValueDict.setdefault   s     d??DI Cyr   c                 h    || vr|g }|                      ||           |                     |          S r   )ri   rc   )r
   rH   default_lists      r   setlistdefaultzMultiValueDict.setlistdefault   s>    d??#!LLl+++ }}S!!!r   c                 V    |                      |                              |           dS )z8Append an item to the internal list associated with key.N)r|   append)r
   rH   rM   s      r   
appendlistzMultiValueDict.appendlist   s*    C  ''.....r   c              #   ,   K   | D ]}|| |         fV  dS )zu
        Yield (key, value) pairs, where value is the last item in the list
        associated with the key.
        Nr   r
   rH   s     r   rY   zMultiValueDict.items   s8      
  	! 	!CtCy.    	! 	!r   c                 ^    t          t                                                                S )zYield (key, list) pairs.)r   r=   rY   rB   s    r   rU   zMultiValueDict.lists   s    EGGMMOO$$$r   c              #   (   K   | D ]}| |         V  dS )z'Yield the last value on every key list.Nr   r   s     r   rs   zMultiValueDict.values   s.       	 	Cs)OOOO	 	r   c                 *    t          j         |           S )z%Return a shallow copy of this object.)rZ   r   s    r   rZ   zMultiValueDict.copy   s    yr   c                 d   t          |          dk    rt          dt          |          z            |r|d         }t          |t                    rC|                                D ]-\  }}|                     |                              |           .nYt          |t                    r|                                }|D ]-\  }}|                     |          	                    |           .|                                D ]-\  }}|                     |          	                    |           .dS )z.Extend rather than replace existing key lists.   z*update expected at most 1 argument, got %dr   N)
r(   	TypeError
isinstancer;   rU   r|   extendr   rY   r~   )r
   argskwargsargrH   
value_listrM   s          r   rj   zMultiValueDict.update   s9   t99q==H3t99TUUU 		;q'C#~.. ;'*yy{{ @ @OC'',,33J????@ c7++ &))++C"% ; ;JC'',,33E:::: ,,.. 	3 	3JC$$++E2222	3 	3r   c                        fd D             S )z5Return current object as a dict with singular values.c                 "    i | ]}||         S r   r   )rQ   rH   r
   s     r   rd   z'MultiValueDict.dict.<locals>.<dictcomp>   s    ///3T#Y///r   r   r   s   `r   r   zMultiValueDict.dict   s    ////$////r   )r   r   )NF)r5   r6   r1   r7   r   r4   rE   rL   rV   r^   rf   rl   rp   rc   rv   ri   ry   r|   r   rY   rU   rs   rZ   rj   r   __classcell__r0   s   @r   r;   r;   1   s        ,. . . . . .J J J J J    * * * * *D D D  O O O' ' '        $< < < <( ( ( ( (   " " " "/ / /! ! !% % % % %  
  3 3 3"0 0 0 0 0 0 0r   r;   c                   X    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dS )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                >    t          j        | g|R i |}||_        |S r   )tuple__new__r   )clsr   r   r   r
   s        r   r   zImmutableList.__new__   s-    }S24222622r   c                 *    t          | j                  r   )AttributeErrorr   )r
   r   r   s      r   complainzImmutableList.complain   s    T\***r   N)r5   r6   r1   r7   r   r   __delitem____delslice____iadd____imul__rL   __setslice__r~   r   insertrh   r   sortreverser   r   r   r   r      s        
 
 %I     
+ + + KLHHKLFFF
CFDGGGr   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                 f    t                                          |           || _        || _        d S r   )r=   r   funcprefix)r
   r3   r   r   r0   s       r   r   zDictWrapper.__init__  s-    	r   c                     |                     | j                  }|                    | j                  }t                                          |          }|r|                     |          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.
        )
startswithr   removeprefixr=   rE   r   )r
   rH   use_funcrM   r0   s       r   rE   zDictWrapper.__getitem__  sc     >>$+..t{++##C(( 	$99U###r   )r5   r6   r1   r7   r   rE   r   r   s   @r   r   r     s[             
        r   r   c                   R    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ed	             Zd
S )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                 N    d |                      |          D             | _        d S )Nc                 B    i | ]\  }}|                                 ||fS r   lowerrP   s      r   rd   z3CaseInsensitiveMapping.__init__.<locals>.<dictcomp>1  s*    NNNTQqwwyy1a&NNNr   )_unpack_items_storer2   s     r   r   zCaseInsensitiveMapping.__init__0  s)    NNT5G5G5M5MNNNr   c                 L    | j         |                                         d         S )Nr   )r   r   r   s     r   rE   z"CaseInsensitiveMapping.__getitem__3  s    {399;;'**r   c                 *    t          | j                  S r   )r(   r   r   s    r   r)   zCaseInsensitiveMapping.__len__6  s    4;r   c                     t          |t                    o=d |                                 D             d |                                D             k    S )Nc                 >    i | ]\  }}|                                 |S r   r   rP   s      r   rd   z1CaseInsensitiveMapping.__eq__.<locals>.<dictcomp>:  s3     /
 /
 /
!QAGGIIq/
 /
 /
r   c                 >    i | ]\  }}|                                 |S r   r   rP   s      r   rd   z1CaseInsensitiveMapping.__eq__.<locals>.<dictcomp><  s&    555tq!aggii555r   )r   r   rY   )r
   others     r   __eq__zCaseInsensitiveMapping.__eq__9  s[    %)) 6 /
 /
%)ZZ\\/
 /
 /
55u{{}}555/6 	6r   c                 H    d | j                                         D             S )Nc              3       K   | ]	\  }}|V  
d S r   r   )rQ   original_keyrM   s      r   	<genexpr>z2CaseInsensitiveMapping.__iter__.<locals>.<genexpr>?  s'      MM!4uMMMMMMr   )r   rs   r   s    r   r   zCaseInsensitiveMapping.__iter__>  s$    MM8J8J8L8LMMMMr   c                 b    t          d | j                                        D                       S )Nc                     i | ]\  }}||	S r   r   )rQ   rH   rM   s      r   rd   z3CaseInsensitiveMapping.__repr__.<locals>.<dictcomp>B  s    GGGJCS%GGGr   )r.   r   rs   r   s    r   r4   zCaseInsensitiveMapping.__repr__A  s-    GG$+2D2D2F2FGGGHHHr   c                     | S r   r   r   s    r   rZ   zCaseInsensitiveMapping.copyD  s    r   c           	   #     K   t          | t          t          f          r|                                 E d {V  d S t	          |           D ]\  }}t          |          dk    r0t          d                    |t          |                              t          |d         t                    st          d|d         z            |V  d S )N   zDdictionary update sequence element #{} has length {}; 2 is required.r   z0Element key %r invalid, only strings are allowed)	r   r   r   rY   	enumerater(   
ValueErrorformatstr)r3   ielems      r   r   z$CaseInsensitiveMapping._unpack_itemsG  s      
 dT7O,, 	zz||#######F  
	 
	GAt4yyA~~ %%+VAs4yy%9%9   d1gs++  FaP   JJJJ
	 
	r   N)r5   r6   r1   r7   r   rE   r)   r   r   r4   rZ   staticmethodr   r   r   r   r   r     s         "O O O+ + +     6 6 6
N N NI I I     \  r   r   )rZ   collections.abcr   r   r   r9   r   r;   r   r   r   r   r   r   r   <module>r      s/    # # # # # #%8 %8 %8 %8 %8 %8 %8 %8P	 	 	 	 	X 	 	 	h0 h0 h0 h0 h0T h0 h0 h0V" " " " "E " " "J    $   :; ; ; ; ;W ; ; ; ; ;r   