
    FwgMT                        d 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m	Z	m
Z
 ddlmZmZ ddlZerde_        ddlZg d	Zd
j$                  Zdj$                  Zdj$                  Z G d de      Zej0                  ej2                  z   dz   Zi ddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1i d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSi dTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdui dvdwdxdydzd{d|d}d~dddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddÓddœddǓddɓdd˓dd͓ddϓddѓddӓddՓddדddٓddۓi ddݓddߓddddddddddddddddddddddddddddddi ddd ddddddddd	d
dddddddddddddddddddddi d d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNZefdOZ ej:                  dP      Z ej:                  dQ      ZdR Z g dSZ!g dTZ"de!e"fdUZ# G dV dWe      Z$dXZ% ej:                  dYe%z   dZz   e%z   d[z   ej                        Z& G d\ d]e      Z' G d^ d_e'      Z(y(`  af
  
http.cookies module ported to python-future from Py3.3

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.
    )unicode_literals)print_function)division)absolute_import)chrdictintstr)PY2as_native_strN)CookieError
BaseCookieSimpleCookie z;  c                       e Zd Zy)r   N)__name__
__module____qualname__     T/var/www/horilla/myenv/lib/python3.12/site-packages/future/backports/http/cookies.pyr   r      s    r   r   z!#$%&'*+-.^_`|~: z\000z\001z\002z\003z\004z\005z\006z\007z\010	z\011
z\012z\013z\014z\015z\016z\017z\020z\021z\022z\023z\024z\025z\026z\027z\030z\031z\032z\033z\034z\035z\036z\037,z\054;z\073"\"\z\\z\177   z\200   z\201   z\202   z\203   z\204   z\205   z\206   z\207   z\210   z\211   z\212   z\213   z\214   z\215   z\216   z\217   z\220   z\221   z\222   z\223   z\224   z\225   z\226   z\227   z\230   z\231   z\232   z\233   z\234   z\235   z\236   z\237    z\240   ¡z\241   ¢z\242   £z\243   ¤z\244   ¥z\245   ¦z\246   §z\247   ¨z\250   ©z\251   ªz\252   «z\253   ¬z\254   ­z\255   ®z\256   ¯z\257   °z\260   ±z\261   ²z\262   ³z\263   ´z\264   µz\265   ¶z\266   ·z\267   ¸z\270   ¹z\271   ºz\272   »z\273   ¼z\274   ½z\275   ¾z\276   ¿z\277   Àz\300   Áz\301   Âz\302   Ãz\303   Äz\304   Åz\305   Æz\306   Çz\307   Èz\310   Éz\311   Êz\312   Ëz\313   Ìz\314   Íz\315   Îz\316   Ïz\317   Ðz\320   Ñz\321   Òz\322   Óz\323   Ôz\324   Õz\325   Öz\326   ×z\327   Øz\330   Ùz\331   Úz\332   Ûz\333   Üz\334   Ýz\335   Þz\336   ßz\337   àz\340   áz\341   âz\342   ãz\343   äz\344   åz\345   æz\346   çz\347   èz\350   éz\351   êz\352   ëz\353   ìz\354   íz\355   îz\356   ïz\357   ðz\360   ñz\361   òz\362   óz\363z\364z\365z\366z\367z\370z\371z\372z\373z\374z\375z\376z\377)   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿc                 `    t        fd| D              r| S dt        d | D              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.
    c              3   &   K   | ]  }|v  
 y wNr   .0c
LegalCharss     r   	<genexpr>z_quote.<locals>.<genexpr>   s     
(q1
?
(   r;   c              3   H   K   | ]  }t         j                  ||        y wr   )_Translatorget)r   ss     r   r   z_quote.<locals>.<genexpr>   s     B{q!4Bs    ")all	_nulljoin)r
   r   s    `r   _quoter      s3     
(C
((
YBcBBBSHHr   z\\[0-3][0-7][0-7]z[\\].c           
         t        |       dk  r| S | d   dk7  s| d   dk7  r| S | dd } d}t        |       }g }d|cxk  r|k  r n t        |      S t        j                  | |      }t        j                  | |      }|s"|s |j	                  | |d         	 t        |      S dx}}|r|j                  d      }|r|j                  d      }|r8|r||k  r1|j	                  | ||        |j	                  | |dz             |dz   }nF|j	                  | ||        |j	                  t        t        | |dz   |dz    d                   |dz   }d|cxk  r|k  rt        |      S  t        |      S )N   r   r;            )	len
_OctalPattsearch
_QuotePattappendstartr   r	   r   )mystrinreso_matchq_matchjks           r   _unquoter      s    5zA~Qx3%)s* !BKE 	
AE
A
C
q*1*( S>' ##E1-##E1-wJJuQRy! S> 
Aa Aa AGq1uJJuQqz"JJuQqSz"AAJJuQqz"JJs3uQqS1~q123AA' q*1*( S>) ( S>r   )MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDecc           	      n    ddl m}m }  |       } ||| z         \	  }}}}	}
}}}}d||   |||   ||	|
|fz  S )Nr   )gmtimetimez#%s, %02d %3s %4d %02d:%02d:%02d GMT)r   r   )futureweekdayname	monthnamer   r   nowyearmonthdayhhmmsswdyzs                  r   _getdater  3  sW    !
&C-3C&L-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
Z eddg      Zd Zd Zd Z	e
fdZddZeZ e       d        ZddZddZy)Morsela  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.  This is most useful when Python
    objects are pickled for network transit.
    expiresPathCommentDomainzMax-AgesecurehttponlyVersion)r
  pathcommentdomainmax-ager  r  versionc                 ~    d x| _         x| _        | _        | j                  D ]  }t	        j
                  | |d        y )Nr   )keyvaluecoded_value	_reservedr   __setitem__)selfr  s     r   __init__zMorsel.__init__^  s?    37774: 0 >> 	,CT3+	,r   c                     |j                         }|| j                  vrt        d|z        t        j                  | ||       y )NzInvalid Attribute %s)lowerr  r   r   r  )r  KVs      r   r  zMorsel.__setitem__f  s<    GGIDNN"4q899q!$r   c                 :    |j                         | j                  v S r   )r  r  )r  r   s     r   isReservedKeyzMorsel.isReservedKeyl  s    wwyDNN**r   c                     |j                         | j                  v rt        d|z        t        fd|D              rt        d|z        || _        || _        || _        y )Nz!Attempt to set a reserved key: %sc              3   &   K   | ]  }|v 
 y wr   r   r   s     r   r   zMorsel.set.<locals>.<genexpr>t  s     0qq
"0r   zIllegal key value: %s)r  r  r   anyr  r  r  )r  r  val	coded_valr   s       `r   setz
Morsel.seto  s_     99;$..(ACGHH0C005;<< 
$r   Nc                 .    |d| j                  |      S )Nr   )OutputString)r  attrsheaders      r   outputzMorsel.output|  s     $"3"3E":;;r   c                     t         r0t        | j                  t              rt	        | j                        }n| j                  }d| j
                  j                  dt	        | j                        dt        |      dS )N<: =>)	r   
isinstancer  unicoder
   	__class__r   r  reprr  r'  s     r   __repr__zMorsel.__repr__  sQ    :djj'2djj/C**C $ 7 7 #DHHtCy: 	:r   c                 J    d| j                  |      j                  dd      z  S )Nz
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "%s";
        // end hiding -->
        </script>
        r;   r<   )r+  replace)r  r,  s     r   	js_outputzMorsel.js_output  s.       '//U;= 	=r   c                    g }|j                   } || j                  d| j                         || j                  }t	        | j                               }|D ]  \  }}|dk(  r||vr|dk(  r4t        |t              r$ || j                  |   dt        |             J|dk(  r+t        |t              r |d| j                  |   |fz         z|dk(  r |t        | j                  |                |dk(  r |t        | j                  |                 || j                  |   d|        t        |      S )Nr2  r   r
  r  z%s=%dr  r  )r   r  r  r  sorteditemsr4  r	   r  r
   _semispacejoin)r  r,  resultr   r?  r  r  s          r   r+  zMorsel.OutputString  s(     	$((D$4$456 =NNEtzz|$ 	?JC{%iJuc$:$.."5xGH	!j&<w$.."5u!==>s4>>#./0
"s4>>#./0$.."5u=>	?" f%%r   )NSet-Cookie:r   )r   r   r   __doc__r  r)  _flagsr  r  r#  _LegalCharsr.  __str__r   r9  r<  r+  r   r   r   r	  r	  ;  s|    , 	I (J'(F,%+ 3> %< G_: :=&r   r	  z.[\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=]z~
    (?x)                           # This is a verbose pattern
    (?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                   n    e Zd ZdZd Zd ZddZd Zd ZddZ	e	Z
 e       d	        Zdd
Zd ZefdZy)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   r8  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
   r  r'  strvals      r   value_encodezBaseCookie.value_encode  s     Sv~r   Nc                 ,    |r| j                  |       y y r   )load)r  inputs     r   r  zBaseCookie.__init__  s    IIe r   c                     | j                  |t                     }|j                  |||       t        j                  | ||       y)z+Private method for setting a cookie's valueN)r   r	  r)  r   r  )r  r  
real_valuer  Ms        r   __setzBaseCookie.__set  s6    HHS&(#	c:{+sA&r   c                 R    | j                  |      \  }}| j                  |||       y)zDictionary style assignment.N)rM  _BaseCookie__set)r  r  r  rvalcvals        r   r  zBaseCookie.__setitem__  s&    &&u-
d

3d#r   c                     g }t        | j                               }|D ]&  \  }}|j                  |j                  ||             ( |j	                  |      S )z"Return a string suitable for HTTP.)r>  r?  r   r.  join)r  r,  r-  seprA  r?  r  r  s           r   r.  zBaseCookie.output  sP    tzz|$ 	7JCMM%,,uf56	7xxr   c                 l   g }t        | j                               }|D ]o  \  }}t        r0t        |j                  t
              rt        |j                        }n|j                  }|j                  t        |      dt        |             q d| j                  j                  dt        |      dS )Nr2  r0  r1  r3  )r>  r?  r   r4  r  r5  r
   r   r7  r6  r   
_spacejoin)r  lr?  r  r  r'  s         r   r9  zBaseCookie.__repr__  s    tzz|$ 	6JCz%++w7%++&kkHHC$s)45	6 "^^44jmDDr   c                     g }t        | j                               }|D ]%  \  }}|j                  |j                  |             ' t	        |      S )z(Return a string suitable for JavaScript.)r>  r?  r   r<  r   )r  r,  rA  r?  r  r  s         r   r<  zBaseCookie.js_output  sJ    tzz|$ 	2JCMM%//%01	2  r   c                     t        |t              r| j                  |       y|j                         D ]
  \  }}|| |<    y)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)r4  r
   _BaseCookie__parse_stringr?  )r  rawdatar  r  s       r   rO  zBaseCookie.load  sH     gs#(
 	 &mmo "
U!S	"r   c                     d}t        |      }d }d|cxk  r|k  rn y |j                  ||      }|sy |j                  d      |j                  d      }}|j                  d      }|d   dk(  r|r|||dd  <   n|j	                         t
        j                  v r9|re|&|j	                         t
        j                  v rCd||<   n=t        |      ||<   n.|,| j                  |      \  }	}
| j                  ||	|
       | |   }d|cxk  r|k  ry  y y )Nr   r  r'  $r   T)r   r   groupendr  r	  r  rD  r   rI  rV  )r  r   pattr   r   rS  matchr  r  rW  rX  s              r   __parse_stringzBaseCookie.__parse_string&  s   J1jqjKKq)EU+U[[-?C		!A 1v} !&Ac!"gJ 0 00}99;&--7%)AcF!)%#"!..u5
d

3d+I9 1jqjr   r   )NrB  z
)r   r   r   rC  rI  rM  r  rV  r  r.  rF  r   r9  r<  rO  _CookiePatternra  r   r   r   r   r     sT    1'$
  G_	E 	E! *8 !r   r   c                       e Zd ZdZd Zd Zy)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 r   )r   r8  s     r   rI  zSimpleCookie.value_decodeQ  s    }c!!r   c                 2    t        |      }|t        |      fS r   )r
   r   rK  s      r   rM  zSimpleCookie.value_encodeT  s    Svf~%%r   N)r   r   r   rC  rI  rM  r   r   r   r   r   J  s    "&r   r   ))rC  
__future__r   r   r   r   future.builtinsr   r   r	   r
   future.utilsr   r   reASCIIstring__all__rZ  r   r@  r]  	Exceptionr   ascii_lettersdigitsrE  r   r   compiler   r   r   _weekdayname
_monthnamer  r	  _LegalCharsPattrj  r   r   r   r   r   <module>r|     s7	  NZv ( %  & / / +
 
BH 
7GG	XX

	) 	 ((6==8;MM?
W??*07?
W??*07? W? ? +17? W	? 	? +17	?
 W?
 ?
 +17? W? ? +17? W? ? +17? W? ? +17? W? ? +17? W? ? +17? W? ?  '!?  !?$ %%?$ f%?( W)?( )?( +17)?* W+?* +?* +17+?, W-?, -?, +17-?. W/?. /?. +17/?0 W1?0 1?0 +171?2 W3?2 3?2 +173?4 W5?4 5?4 +175?6 W7?6 7?6 +177?8 W9?8 9?8 +179?: W;?: ;?: +17;?< W=?< =?< +17=?> W??> ??> +17??@ WA?@ A?@ +17A?B WC?B C?B +17C?D WE?D E?D +17E?F WG?F G?F +17G?H WI?H I?H +17I?J WK?J K?J +17K?L WM?L M?L +17M?N WO?N O?N +17O?P WQ?P Q?P +17Q?R WS?R S?R +17S?T WU?T U?T +17U?V WW?V W?V +17W?X WY?X Y?X +17Y?Z W[?Z [?Z +17[?\ W]?\ ]?\ +17]?^ W_?^ _?^ +17_?` Wa?` a?` +17a?b Wc?b c?b +17c?d We?d e?d +17e?f Wg?f g?f +17g?h Wi?h i?h +17i?j Wk?j k?j +17k?l Wm?l m?l +17m?n Wo?n o?n +17o?p Wq?p q?p +17q?r Ws?r s?r +17s?t Wu?t u?t +17u?v 7777}?B ' 
I RZZ,-
RZZ!
)d A8
 <: Fw&T w&F E  	 " 
#.q qh&: &r   