3 sj]W @sddlZddlZdddgZdjZdjZdjZdd ZGd ddeZ ej ej d Z e d Z d deedeeee DZejeddeddiejdeje jZejdZddZddZejdjZddZddZdd d!d"d#d$d%gZdd&d'd(d)d*d+d,d-d.d/d0d1g Z dee fd2d3Z!Gd4d5d5e"Z#d6Z$e$d7Z%ejd8e$d9e%d:ej&ej'BZ(Gd;dde"Z)Gd?@[]{}cCsi|]}d||qS)z\%03or).0nrrr sr"z\"\z\\z[%s]+z[\x00-\x1F\x7F]cGstdd|DS)Ncss|]}tjt|VqdS)N)_control_character_researchstr)rvrrr sz)_has_control_character..)any)valrrr_has_control_charactersr!cCs*|dkst|r|Sd|jtdSdS)Nr) _is_legal_key translate _Translator)rrrr_quotesr%z\\(?:([0-3][0-7][0-7])|(.))cCs&|drtt|ddS|dSdS)N)chrint)mrrr_unquote_replacesr,cCsJ|dkst|dkr|S|ddks0|ddkr4|S|dd}tt|S)Nr(rrr&r-)len _unquote_subr,)rrrr_unquotes  r0ZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc CsRddlm}m}|}|||\ }}}} } } } } }d|| ||||| | | fS)Nr)gmtimetimez#%s, %02d %3s %4d %02d:%02d:%02d GMT)r2r1)ZfutureZ weekdaynameZ monthnamer1r2ZnowZyearZmonthZdayZhhZmmZssZwdyzrrr_getdates r5c @seZdZddddddddd Zd d hZd d ZeddZejddZeddZ e jddZ eddZ e jddZ ddZ d5ddZ ddZ ejZddZd d!Zd"d#Zd$d%Zefd&d'Zd(d)Zd*d+Zd6d-d.ZeZd/d0Zd7d1d2Zd8d3d4ZdS)9MorselexpiresZPathCommentZDomainzMax-AgeZSecureZHttpOnlyZVersion)r7pathcommentZdomainzmax-agesecurehttponlyversionr;r<cCs4d|_|_|_x|jD]}tj||dqWdS)Nr)_key_value _coded_value _reserveddict __setitem__)selfkeyrrr__init__s zMorsel.__init__cCs|jS)N)r>)rDrrrrE%sz Morsel.keycCstd||_dS)NrE)rr>)rDrErrrrE)scCs|jS)N)r?)rDrrrvalue.sz Morsel.valuecCstd||_dS)NrG)rr?)rDrGrrrrG2scCs|jS)N)r@)rDrrr coded_value7szMorsel.coded_valuecCstd||_dS)NrH)rr@)rDrHrrrrH;scCsP|j}||jkr td|ft||r>td|d|tj|||dS)NzInvalid attribute %rz.Control characters are not allowed in cookies r)lowerrArr!rBrC)rDKVrrrrC@s   zMorsel.__setitem__NcCsH|j}||jkr td|ft||r:td||ftj|||S)NzInvalid attribute %rz3Control characters are not allowed in cookies %r %r)rIrArr!rB setdefault)rDrEr rrrrLHs   zMorsel.setdefaultcCs>t|tstStj||o<|j|jko<|j|jko<|j|jkS)N) isinstancer6NotImplementedrB__eq__r?r>r@)rDmorselrrrrOPs     z Morsel.__eq__cCs$t}tj|||jj|j|S)N)r6rBupdate__dict__)rDrPrrrcopyZs z Morsel.copycCsti}x^t|jD]N\}}|j}||jkr:td|ft||rXtd|d||||<qWtj||dS)NzInvalid attribute %rz.Control characters are not allowed in cookies r)rBitemsrIrArr!rQ)rDvaluesdatarEr rrrrQ`s   z Morsel.updatecCs|j||S)N)rQ)rDrUrrr__ior__ls zMorsel.__ior__cCs|j|jkS)N)rIrA)rDrJrrr isReservedKeypszMorsel.isReservedKeycCs|tkr ddl}|jdtdd|j|jkrr?r@)rDrEr Z coded_valZ LegalCharsr rrrsetss  z Morsel.setcCs|j|j|jdS)N)rErGrH)r>r?r@)rDrrr __getstate__szMorsel.__getstate__cCsT|d}|d}|d}t|||r>td|d|d|||_||_||_dS)NrErGrHz.Control characters are not allowed in cookies r)r!rr>r?r@)rDstaterErGrHrrr __setstate__s zMorsel.__setstate__ Set-Cookie:cCsd||j|fS)Nz%s %s) OutputString)rDattrsheaderrrroutputsz Morsel.outputcCsd|jj|jfS)Nz<%s: %s>) __class__rr_)rDrrr__repr__szMorsel.__repr__cCs*|j|}t|rtdd|jddS)Nz-Control characters are not allowed in cookiesz rz\")r_r!rreplace)rDr`Z output_stringrrr js_outputs zMorsel.js_outputcCs(g}|j}|d|j|jf|dkr,|j}t|j}x|D]\}}|dkrPq>||krZq>|dkrt|tr|d|j|t|fq>|dkrt|tr|d|j||fq>|dkrt|t r|d|j|t |fq>||j kr|r|t |j|q>|d|j||fq>Wt |S)Nz%s=%srr7zmax-agez%s=%dr:) appendrErHrAsortedrTrMr*r5rr%_flags_semispacejoin)rDr`resultrgrTrErGrrrr_s,  zMorsel.OutputString)N)Nr^)N)N)rrrrArirFpropertyrEr rGrHrCrLrOobject__ne__rSrQrWrXrYrZr[r]rb__str__rdrfr_rrrrr6s@        r6z,\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=z\[\]z \s* # Optional whitespace at start of cookie (?P # 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 # 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@sjeZdZddZddZdddZdd Zd d ZdddZeZ ddZ dddZ ddZ e fddZdS)rcCs||fS)Nr)rDr rrr value_decodeszBaseCookie.value_decodecCst|}||fS)N)r)rDr strvalrrr value_encodeszBaseCookie.value_encodeNcCs|r|j|dS)N)load)rDinputrrrrFszBaseCookie.__init__cCs.|j|t}|j|||tj|||dS)N)getr6rZrBrC)rDrEZ real_valuerHMrrrZ__set szBaseCookie.__setcCs:t|trtj|||n|j|\}}|j|||dS)N)rMr6rBrCrr_BaseCookie__set)rDrErGrvalcvalrrrrCs zBaseCookie.__setitem__ Set-Cookie: c CsRg}t|j}x6|D].\}}|j||}t|r:td|j|qW|j|S)Nz-Control characters are not allowed in cookies)rhrTrbr!rrgjoin) rDr`raseprkrTrErGZ value_outputrrrrbs  zBaseCookie.outputcCsNg}t|j}x(|D] \}}|jd|t|jfqWd|jjt|fS)Nz%s=%sz<%s: %s>)rhrTrgreprrGrcr _spacejoin)rDlrTrErGrrrrd(s  zBaseCookie.__repr__cCs:g}t|j}x |D]\}}|j|j|qWt|S)N)rhrTrgrf _nulljoin)rDr`rkrTrErGrrrrf/s  zBaseCookie.js_outputcCs8t|tr|j|nx|jD]\}}|||<q WdS)N)rMr_BaseCookie__parse_stringrT)rDZrawdatarErGrrrrs7s    zBaseCookie.loadcCspd}t|}g}d}d}d}xd|ko2|knr|j||} | sLP| jd| jd} } | jd}| ddkr|s~q |j|| dd| fq | jtjkr|sdS| dkr| jtjkr|j|| dfqdSn|j|| t | fq | dk r|j|| |j | fd}q dSq Wd} xF|D]>\} } } | |krH| | | <n| \}}|j | |||| } q*WdS) NrFr&r(rEr $T) r.matchgroupendrgrIr6rArir0rprw)rDrZpattirZ parsed_itemsZ morsel_seenZTYPE_ATTRIBUTEZ TYPE_KEYVALUErrErGrvtprxryrrrZ__parse_stringEsF      zBaseCookie.__parse_string)N)Nrzr{)N)rrrrprrrFrwrCrbrordrfrs_CookiePatternrrrrrrs    c@seZdZddZddZdS)rcCs t||fS)N)r0)rDr rrrrpszSimpleCookie.value_decodecCst|}|t|fS)N)rr%)rDr rqrrrrrszSimpleCookie.value_encodeN)rrrrprrrrrrrs)+restring__all__r|rrjrr ExceptionrZ ascii_lettersZdigitsrYZ_UnescapedCharsrZrangemapordr$rQcompileescape fullmatchr"rr!r%subr/r,r0Z _weekdaynameZ _monthnamer5rBr6Z_LegalKeyCharsZ_LegalValueCharsASCIIVERBOSErrrrrrrsH     a