
    dP                        d Z ddlZddlZddlZg dZdj        Zdj        Zdj        Z G d de	          Z
ej        ej        z   d	z   Zed
z   Zd  e ed                     e eee                    z
  D             Ze                     ed          d ed          di            ej        d ej        e          z            j        Zd Z ej        d          Z ej        d          Zd Zg dZg dZdeefdZ G d de           Z!dZ"e"dz   Z# ej        de"z   dz   e#z   dz   ej$        ej%        z            Z& G d  d!e           Z' G d" d#e'          Z(dS )$a.
  
Here's a sample session to show how to use this module.
At the moment, this is the only documentation.

The Basics
----------

Importing is easy...

   >>> from http import cookies

Most of the time you start by creating a cookie.

   >>> C = cookies.SimpleCookie()

Once you've created your Cookie, you can add values just as if it were
a dictionary.

   >>> C = cookies.SimpleCookie()
   >>> C["fig"] = "newton"
   >>> C["sugar"] = "wafer"
   >>> C.output()
   'Set-Cookie: fig=newton\r\nSet-Cookie: sugar=wafer'

Notice that the printable representation of a Cookie is the
appropriate format for a Set-Cookie: header.  This is the
default behavior.  You can change the header and printed
attributes by using the .output() function

   >>> C = cookies.SimpleCookie()
   >>> C["rocky"] = "road"
   >>> C["rocky"]["path"] = "/cookie"
   >>> print(C.output(header="Cookie:"))
   Cookie: rocky=road; Path=/cookie
   >>> print(C.output(attrs=[], header="Cookie:"))
   Cookie: rocky=road

The load() method of a Cookie extracts cookies from a string.  In a
CGI script, you would use this method to extract the cookies from the
HTTP_COOKIE environment variable.

   >>> C = cookies.SimpleCookie()
   >>> C.load("chips=ahoy; vienna=finger")
   >>> C.output()
   'Set-Cookie: chips=ahoy\r\nSet-Cookie: vienna=finger'

The load() method is darn-tootin smart about identifying cookies
within a string.  Escaped quotation marks, nested semicolons, and other
such trickeries do not confuse it.

   >>> C = cookies.SimpleCookie()
   >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')
   >>> print(C)
   Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"

Each element of the Cookie also supports all of the RFC 2109
Cookie attributes.  Here's an example which sets the Path
attribute.

   >>> C = cookies.SimpleCookie()
   >>> C["oreo"] = "doublestuff"
   >>> C["oreo"]["path"] = "/"
   >>> print(C)
   Set-Cookie: oreo=doublestuff; Path=/

Each dictionary element has a 'value' attribute, which gives you
back the value associated with the key.

   >>> C = cookies.SimpleCookie()
   >>> C["twix"] = "none for you"
   >>> C["twix"].value
   'none for you'

The SimpleCookie expects that all values should be standard strings.
Just to be sure, SimpleCookie invokes the str() builtin to convert
the value to a string, when the values are set dictionary-style.

   >>> C = cookies.SimpleCookie()
   >>> C["number"] = 7
   >>> C["string"] = "seven"
   >>> C["number"].value
   '7'
   >>> C["string"].value
   'seven'
   >>> C.output()
   'Set-Cookie: number=7\r\nSet-Cookie: string=seven'

Finis.
    N)CookieError
BaseCookieSimpleCookie z;  c                       e Zd ZdS )r   N)__name__
__module____qualname__       /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/http/cookies.pyr   r      s        Dr   r   z!#$%&'*+-.^_`|~:z ()/<=>?@[]{}c                     i | ]}|d |z  	S )z\%03or   ).0ns     r   
<dictcomp>r      s4     J J J (Q, J J Jr      "\"\z\\z[%s]+c                 h    | t          |           r| S d|                     t                    z   dz   S )zQuote a string for use in a cookie header.

    If the string does not need to be double-quoted, then just return the
    string.  Otherwise, surround the string in doublequotes and quote
    (with a \) special characters.
    Nr   )_is_legal_key	translate_Translatorstrs    r   _quoter      s6     {mC(({
S]];///#55r   z\\[0-3][0-7][0-7]z[\\].c           
      j   | t          |           dk     r| S | d         dk    s| d         dk    r| S | dd         } d}t          |           }g }d|cxk    r|k     rIn nEt                              | |          }t                              | |          }|s |s|                    | |d                     ndx}}|r|                    d          }|r|                    d          }|rI|r||k     rA|                    | ||                    |                    | |dz                       |dz   }n`|                    | ||                    |                    t          t          | |dz   |dz            d                               |dz   }d|cxk    r|k     Cn t          |          S )N   r   r            )	len
_OctalPattsearch
_QuotePattappendstartchrint	_nulljoin)r   ir   reso_matchq_matchjks           r   _unquoter3      s    {c#hhll

1v}}B3
 ad)C 	
ACA
C
q****1*****##C++##C++ 	w 	JJs122w
A 	!a  A 	!a  A 	G 	q1uuJJs1Q3x   JJs1Q3x   AAAJJs1Q3x   JJs3s1Q3qs7|Q//00111AA' q****1****( S>>r   )MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDecc           	          ddl m}m }  |            } ||| z             \	  }}}}	}
}}}}d||         |||         ||	|
|fz  S )Nr   )gmtimetimez#%s, %02d %3s %4d %02d:%02d:%02d GMT)rI   rH   )futureweekdayname	monthnamerH   rI   nowyearmonthdayhhmmsswdyzs                  r   _getdaterW      su    !!!!!!!!
$&&C-3VC&L-A-A*D%b"b"a0OS)E"2D"b"EF Fr   c            
          e Zd ZdZdddddddd	d
d	ZddhZd Zed             Zed             Z	ed             Z
d Zd!dZd Zej        Zd Zd Zd Zd Zd Zd Zd"dZeZd Zd!dZd!d Z eej                  ZdS )#MorselaC  A class to hold ONE (key, value) pair.

    In a cookie, each such pair may have several attributes, so this class is
    used to keep the attributes associated with the appropriate key,value pair.
    This class also includes a coded_value attribute, which is used to hold
    the network representation of the value.
    expiresPathCommentDomainzMax-AgeSecureHttpOnlyVersionSameSite)	rZ   pathcommentdomainmax-agesecurehttponlyversionsamesiterf   rg   c                 |    d x| _         x| _        | _        | j        D ]}t                              | |d           d S )Nr   )_key_value_coded_value	_reserveddict__setitem__)selfkeys     r   __init__zMorsel.__init__!  sP    6::	:DK$"3 > 	, 	,CT3++++	, 	,r   c                     | j         S N)rk   rq   s    r   rr   z
Morsel.key)  s
    yr   c                     | j         S ru   )rl   rv   s    r   valuezMorsel.value-  s
    {r   c                     | j         S ru   )rm   rv   s    r   coded_valuezMorsel.coded_value1  s      r   c                     |                                 }|| j        vrt          d|          t                              | ||           d S NzInvalid attribute )lowerrn   r   ro   rp   )rq   KVs      r   rp   zMorsel.__setitem__5  sO    GGIIDN""+;<<<q!$$$$$r   Nc                     |                                 }|| j        vrt          d|          t                              | ||          S r|   )r}   rn   r   ro   
setdefault)rq   rr   vals      r   r   zMorsel.setdefault;  sG    iikkdn$$+=>>>tS#...r   c                     t          |t                    st          S t                              | |          o/| j        |j        k    o| j        |j        k    o| j        |j        k    S ru   )
isinstancerY   NotImplementedro   __eq__rl   rk   rm   rq   morsels     r   r   zMorsel.__eq__A  sg    &&)) 	"!!D&)) 9v},9	V[(9 !V%88	:r   c                     t                      }t                              ||            |j                            | j                   |S ru   )rY   ro   update__dict__r   s     r   copyzMorsel.copyK  s<    FD!!!t}---r   c                     i }t          |                                          D ]9\  }}|                                }|| j        vrt	          d|          |||<   :t                               | |           d S r|   )ro   itemsr}   rn   r   r   )rq   valuesdatarr   r   s        r   r   zMorsel.updateQ  s    V**,, 	 	HC))++C$.((!kCC"ABBBDIID$r   c                 8    |                                 | j        v S ru   )r}   rn   )rq   r~   s     r   isReservedKeyzMorsel.isReservedKeyZ  s    wwyyDN**r   c                     |                                 | j        v rt          d|          t          |          st          d|          || _        || _        || _        d S )NzAttempt to set a reserved key zIllegal key )r}   rn   r   r   rk   rl   rm   )rq   rr   r   	coded_vals       r   setz
Morsel.set]  so    99;;$.((+CCIJJJS!! 	9+##7888 	%r   c                 ,    | j         | j        | j        dS )N)rr   rx   rz   rk   rl   rm   rv   s    r   __getstate__zMorsel.__getstate__h  s!    9[,
 
 	
r   c                 T    |d         | _         |d         | _        |d         | _        d S )Nrr   rx   rz   r   )rq   states     r   __setstate__zMorsel.__setstate__o  s+    %L	Gn!-0r   Set-Cookie:c                 6    |d|                      |          S )Nr   )OutputString)rq   attrsheaders      r   outputzMorsel.outputt  s"     &&$"3"3E":":":;;r   c                 L    d| j         j        d|                                 dS )N<: >)	__class__r	   r   rv   s    r   __repr__zMorsel.__repr__y  s,     !^444d6G6G6I6I6I6IJJr   c                 Z    d|                      |                              dd          z  S )Nz
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "%s";
        // end hiding -->
        </script>
        r   r   )r   replace)rq   r   s     r   	js_outputzMorsel.js_output|  s4       ''//U;;= 	=r   c                    g }|j         } || j        d| j                   || j        }t	          |                                           }|D ]\  }}|dk    r||vr|dk    r>t          |t                    r) || j        |         dt          |                     V|dk    r1t          |t                    r |d| j        |         |fz             |dk    r>t          |t                    r) || j        |         dt          |                     || j        v r'|r# |t          | j        |                               || j        |         d|           t          |          S )N=r   rZ   re   z%s=%drc   )r(   rr   rz   rn   sortedr   r   r+   rW   r   r   _flags_semispacejoin)rq   r   resultr(   r   rr   rx   s          r   r   zMorsel.OutputString  s     	$(((D$4$45666 =NEtzz||$$ 	? 	?JC{{%iJuc$:$:$."5"5"5xGHHHH	!!j&<&<!w$."5u!==>>>>	!!j&<&<!$."5"5"5ve}}}EFFFF## 5F3t~c233444$."5"5"5uu=>>>> f%%%r   ru   )Nr   )r	   r
   r   __doc__rn   r   rs   propertyrr   rx   rz   rp   r   r   object__ne__r   r   r   r   r   r   r   __str__r   r   r   classmethodtypesGenericAlias__class_getitem__r   r   r   rY   rY      s        * 
 
I 
#F, , ,   X   X ! ! X!% % %/ / / /: : : ]F       + + +	& 	& 	&
 
 
1 1 1
< < < < GK K K= = = =& & & &B $E$677r   rY   z,\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=z\[\]z
    \s*                            # Optional whitespace at start of cookie
    (?P<key>                       # Start of group 'key'
    [a	  ]+?   # Any word of at least one letter
    )                              # End of group 'key'
    (                              # Optional group: there may not be a value.
    \s*=\s*                          # Equal Sign
    (?P<val>                         # Start of group 'val'
    "(?:[^\\"]|\\.)*"                  # Any doublequoted string
    |                                  # or
    \w{3},\s[\w\d\s-]{9,11}\s[\d:]{8}\sGMT  # Special case for "expires" attr
    |                                  # or
    [a-  ]*      # Any word or empty string
    )                                # End of group 'val'
    )?                             # End of optional value group
    \s*                            # Any number of spaces.
    (\s+|;|$)                      # Ending either at space, semicolon, or EOS.
    c                   \    e Zd ZdZd Zd ZddZd Zd Zdd
Z	e	Z
d ZddZd ZefdZdS )r   z'A container class for a set of Morsels.c                 
    ||fS )a
  real_value, coded_value = value_decode(STRING)
        Called prior to setting a cookie's value from the network
        representation.  The VALUE is the value read from HTTP
        header.
        Override this function to modify the behavior of cookies.
        r   rq   r   s     r   value_decodezBaseCookie.value_decode  s     Cxr   c                 (    t          |          }||fS )zreal_value, coded_value = value_encode(VALUE)
        Called prior to setting a cookie's value from the dictionary
        representation.  The VALUE is the value being assigned.
        Override this function to modify the behavior of cookies.
        r   rq   r   strvals      r   value_encodezBaseCookie.value_encode  s     Sv~r   Nc                 8    |r|                      |           d S d S ru   )load)rq   inputs     r   rs   zBaseCookie.__init__  s,     	IIe	 	r   c                     |                      |t                                }|                    |||           t                              | ||           dS )z+Private method for setting a cookie's valueN)getrY   r   ro   rp   )rq   rr   
real_valuerz   Ms        r   __setzBaseCookie.__set  sM    HHS&((##	c:{+++sA&&&&&r   c                     t          |t                    rt                              | ||           dS |                     |          \  }}|                     |||           dS )zDictionary style assignment.N)r   rY   ro   rp   r   _BaseCookie__set)rq   rr   rx   rvalcvals        r   rp   zBaseCookie.__setitem__  se    eV$$ 	(T3.....**511JD$JJsD$'''''r   r   
c                     g }t          |                                           }|D ].\  }}|                    |                    ||                     /|                    |          S )z"Return a string suitable for HTTP.)r   r   r(   r   join)rq   r   r   sepr   r   rr   rx   s           r   r   zBaseCookie.output  sd    tzz||$$ 	7 	7JCMM%,,uf556666xxr   c                     g }t          |                                           }|D ]1\  }}|                    |dt          |j                             2d| j        j        dt          |          dS )Nr   r   r   r   )r   r   r(   reprrx   r   r	   
_spacejoin)rq   lr   rr   rx   s        r   r   zBaseCookie.__repr__  s    tzz||$$ 	9 	9JCHHT%+%6%6%678888	9!^444jmmmmDDr   c                     g }t          |                                           }|D ]-\  }}|                    |                    |                     .t	          |          S )z(Return a string suitable for JavaScript.)r   r   r(   r   r,   )rq   r   r   r   rr   rx   s         r   r   zBaseCookie.js_output  s^    tzz||$$ 	2 	2JCMM%//%001111   r   c                     t          |t                    r|                     |           n|                                D ]
\  }}|| |<   dS )zLoad cookies from a string (presumably HTTP_COOKIE) or
        from a dictionary.  Loading cookies from a dictionary 'd'
        is equivalent to calling:
            map(Cookie.__setitem__, d.keys(), d.values())
        N)r   r   _BaseCookie__parse_stringr   )rq   rawdatarr   rx   s       r   r   zBaseCookie.load  sZ     gs## 	"(((( &mmoo " "
U!S		r   c                    d}t          |          }g }d}d}d}d|cxk    r|k     rVn nR|                    ||          }	|	sn8|	                    d          |	                    d          }}
|	                    d          }|
d         dk    r$|sz|                    ||
dd          |f           n|
                                t          j        v rg|sd S |;|
                                t          j        v r|                    ||
df           nZd S |                    ||
t          |          f           n2|.|                    ||
| 
                    |          f           d}nd S d|cxk    r|k     Pn d }|D ]B\  }}
}||k    r
|J |||
<   ||k    sJ |\  }}|                     |
||           | |
         }Cd S )	Nr   Fr!   r   rr   r   $T)r$   matchgroupendr(   r}   rY   rn   r   r3   r   r   )rq   r   pattr-   r   parsed_itemsmorsel_seenTYPE_ATTRIBUTETYPE_KEYVALUEr   rr   rx   r   tpr   r   s                   r   __parse_stringzBaseCookie.__parse_string  s-   HH
 1jjjjqjjjjjJJsA&&E U++U[[-?-?C		!A1v}}"  ##^SWe$DEEEE 000" F=yy{{fm33$++^S$,GHHHH  ''huoo(NOOOO"##]C9J9J59Q9Q$RSSS" E 1jjjjqjjjjJ * 	 	NBU^##}}}#]****"
d

3d+++I	 	r   ru   )Nr   r   )r	   r
   r   r   r   r   rs   r   rp   r   r   r   r   r   _CookiePatternr   r   r   r   r   r     s        11       ' ' '( ( (        GE E E! ! ! !   (6 : : : : : :r   r   c                       e Zd ZdZd Zd ZdS )r   z
    SimpleCookie supports strings as cookie values.  When setting
    the value using the dictionary assignment notation, SimpleCookie
    calls the builtin str() to convert the value to a string.  Values
    received from HTTP are kept as strings.
    c                 $    t          |          |fS ru   )r3   r   s     r   r   zSimpleCookie.value_decode_  s    }}c!!r   c                 B    t          |          }|t          |          fS ru   )r   r   r   s      r   r   zSimpleCookie.value_encodeb  s    Svf~~%%r   N)r	   r
   r   r   r   r   r   r   r   r   r   X  s<         " " "& & & & &r   r   ))r   restringr   __all__r   r,   r   r   	Exceptionr   ascii_lettersdigits_LegalChars_UnescapedCharsr   rangemapordr   r   compileescape	fullmatchr   r   r%   r'   r3   _weekdayname
_monthnamerW   ro   rY   _LegalKeyChars_LegalValueCharsASCIIVERBOSEr   r   r   r   r   r   <module>r      s  NX Xz 
			  
7
7
7G	X

	 	 	 	 	) 	 	 	" "V]25GG/J JEE#JJ##cc#.G.G*H*HHJ J J   CHHeCIIv   
 
7YRY{%;%;;<<F
6 
6 
6 RZ,--
RZ!!
) ) )d A@@8 8 8
 <: F F F Fi8 i8 i8 i8 i8T i8 i8 i8j B!G+  	 			 " 
BJ	#   .I I I I I I I IX& & & & &: & & & & &r   