
    eg;*                         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/html/FastMealFinder_FlaskServer-InitialRelease/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    YY 	??&&s+D#'DOOC 	 	 	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    YY 	J OO//U;M#(DOOC  4??#dmm3&*oo&=&=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    YY 	-OO'',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*    YY 	(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    YY 	$*T__56FOO!!#	$
  )!!%() 	$ 	$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/    YY 	312	3 	3 	3s   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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    nd,.%-'>2(G$KK r   c                 z    ||g| j                   |j                         <   | j                   |j                            S r	   r&   lowerr   r,   vals      r   r8   zHTTPHeaderDict.__setitem__   s/    (+Sz		$syy{++r   c                 d    | j                   |j                            }dj                  |dd        S )N, r   r&   rS   joinrT   s      r   r.   zHTTPHeaderDict.__getitem__   s+    oociik*yyQR!!r   c                 :    | j                   |j                         = y r	   rR   r   r,   s     r   r:   zHTTPHeaderDict.__delitem__   s    OOCIIK(r   c                 :    |j                         | j                  v S r	   )rS   r&   r[   s     r   __contains__zHTTPHeaderDict.__contains__   s    yy{doo--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     Atq!QWWYNA   !c              3   F   K   | ]  \  }}|j                         |f  y wr	   r`   ra   s      r   re   z(HTTPHeaderDict.__eq__.<locals>.<genexpr>   s%      J
#q!QWWYNJ
rf   )rK   r   hasattrtypedict
itermergedr   others     r   __eq__zHTTPHeaderDict.__eq__   su    %)'%2H%d,DJu%EAt/@AAT 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+     OO**, 	Dq'M	s   (*c                 X    	 | |   }| |= |S # t         $ r || j                  u r |cY S w xY w)zD.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    	IE 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)zAdds 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     IIK	:)))X>4KK  r   c                 Z   t        |      dkD  r#t        dj                  t        |                  t        |      dk\  r|d   nd}t        |t              r+|j                         D ]  \  }}| j                  ||        nt        |t              r|D ]  }| j                  |||           nSt        |d      r+|j                         D ]  }| j                  |||           n|D ]  \  }}| j                  ||        |j                         D ]  \  }}| j                  ||        y)zGeneric 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    
 t9q=((.s4y(9  t9>Qre^,!OO- #Sc"#w' *eCj)*UF#zz| *eCj)* $ %
Ue$% !,,. 	!JCHHS% 	!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    	??399;/D 8O  	$--'	N	s   $ AAAc                 f    t        |       j                  dt        | j                               dS )N())ri   r   rj   rk   r   s    r   __repr__zHTTPHeaderDict.__repr__  s#    :..T__5F0G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     	7C--$C#t$3i,/53;DOOCIIK(	7r   c                 H     t        |              }|j                  |        |S r	   )ri   rL   )r   clones     r   copyzHTTPHeaderDict.copy"  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.iteritems'  sL      	#C??399;/DABx #1gsl"#	#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.items4  s    DNN$%%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: %sr   :r   )rN   
startswithr   stripsplitr|   )clsmessageobs_fold_continued_leadersrN   liner,   r5   s          r   from_httplibzHTTPHeaderDict.from_httplib7  s     &1"OO 	1D9: (IDP  ")JC#&djjl(B"CGBKC+JCNNC/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   
getheadersgetallmatchingheadersigetget_allr   rL   r   r   rk   r   classmethodr   __classcell__)rP   s   @r   r    r    k   s    B	 ,").
& ww!**#..
xH$
  ( " !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3N I3Xf^ fM  4334   s"   A A& A#"A#&A87A8