B 8U髤 @sddddddddgZdd lZdd lZdd lZdd lZdd lZdd lZdd lZ dd l Z dd l m Z d Zd ad d Zee jjZdZddZdZddZdddddddgZdddddd d!d"d#d$d%d&g ZgZxeD]ZeeqWdtd'd(Zdud)d*Z d d d d d+Z!e"d,ej#Z$d-d.Z%d/d0Z&e"d1ej#Z'e"d2ej(ej#BZ)e"d3ej*ej#BZ+d4d5Z,e"d6ej*ej#BZ-d7d8Z.d9d:Z/e"d;Z0e"d<Z1e"d=Z2e"d>Z3d?d@Z4e"dAZ5dBdCZ6dDdEZ7dFdGZ8e"dHej#Z9dIdJZ:dKdLZ;dMdNZdRdSZ?dTdUZ@dVdWZAdXdYZBdZZCe"d[ZDd\d]ZEd^d_ZFd`daZGdbdcZHGddddZIGdeddZJGdfddeJZKdgdhZLdidjZMGdkdldlZNGdmddZOGdnddePZQGdoddeOZRdpdqZSGdrddeRZTGdsddeRZUd S)vCookie CookieJar CookiePolicyDefaultCookiePolicy FileCookieJar LWPCookieJar LoadErrorMozillaCookieJarN)timegmFcGs(tsdStsddl}|datj|S)Nr zhttp.cookiejar)debugloggerloggingZ getLogger)argsr r1/opt/alt/python37/lib/python3.7/http/cookiejar.py_debug+s  rzQa filename was not supplied (nor was the CookieJar instance initialised with one)cCsJddl}ddl}ddl}|}|d||}|jd|dddS)Nr zhttp.cookiejar bug! %s) stacklevel)iowarnings tracebackStringIO print_excgetvaluewarn)rrrfmsgrrr_warn_unhandled_exception9s  ricCs|dd\}}}}}}|tkrd|kr4dkrnnhd|krLdkrnnPd|krddkrnn8d|kr|dkrnn d|krdkrnnt|SdSdS) N r ;=) EPOCH_YEARr )ttyearmonthZmdayhourminsecrrr_timegmHs 8Hr,ZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs@|dkrtj}n tj|}d|j|j|j|j|j|jfS)Nz%04d-%02d-%02d %02d:%02d:%02dZ) datetimeutcnowutcfromtimestampr'r(dayr)minutesecond)tdtrrr time2isozVs   r5cCsR|dkrtj}n tj|}dt||jt|jd|j|j |j |j fS)Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr) r-r.r/DAYSZweekdayr0MONTHSr(r'r)r1r2)r3r4rrr time2netscapeis   r8)ZGMTUTCZUTZz^([-+])?(\d\d?):?(\d\d)?$cCsjd}|tkrd}nTt|}|rfdt|d}|drR|dt|d}|ddkrf| }|S)Nr ir<r-) UTC_ZONES TIMEZONE_REsearchintgroup)tzoffsetmrrroffset_from_tz_strings  rFc Cst|}|tjkrdSyt|d}WnXtk ry t|}Wntk r\dSXd|krrdkr|nn|}ndSYnX|dkrd}|dkrd}|dkrd}t|}t|}t|}t|}|dkr0ttd}|d} |} ||| }| | } t | dkr0| dkr(|d}n|d}t |||||||f} | dk r|dkr^d}| }t |} | dkr|dS| | } | S)Nrr r id2r9) rAr-ZMAXYEAR MONTHS_LOWERindexlower ValueErrortimeZ localtimeabsr,upperrF) r0monyrhrr*r+rCZimonZcur_yrrEZtmpr3rDrrr _str2timesV         rSzV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*a^ (\d\d?) # day (?:\s+|[-\/]) (\w+) # month (?:\s+|[-\/]) (\d+) # year (?: (?:\s+|:) # separator before clock (\d\d?):(\d\d) # hour:min (?::(\d\d))? # optional seconds )? # optional clock \s* (?: ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone \s* )? (?: \(\w+\) # ASCII representation of timezone in parens. \s* )?$c Cst|}|rl|}t|dd}t|d|t|dt|dt|dt|df}t|S| }t d|d}dgd\}}}}}} } t |}|dk r|\}}}}}} } ndSt |||||| | S) Nrrr r;)STRICT_DATE_REr@groupsrIrJrKrAfloatr,lstrip WEEKDAY_REsubLOOSE_HTTP_DATE_RErS) textrEgrPr&r0rQrRr*r+rCrrr http2times " raa^ (\d{4}) # year [-\/]? (\d\d?) # numerical month [-\/]? (\d\d?) # day (?: (?:\s+|[-:Tt]) # separator before clock (\d\d?):?(\d\d) # hour:min (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional) )? # optional clock \s* (?: ([-+]?\d\d?:?(:?\d\d)? |Z|z) # timezone (Z is "zero meridian", i.e. GMT) \s* )?$c Csd|}dgd\}}}}}}}t|}|dk rL|\}}}}}}}} ndSt|||||||S)NrW)r[ ISO_DATE_REr@rYrS) r_r0rPrQrRr*r+rCrE_rrriso2time*s  rdcCs*|d\}}|jd||j|dS)Nr )spanstring)matchstartendrrr unmatchedKsrjz^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c Cs g}x|D]}|}g}x|rt|}|rt|}|d}t|}|rlt|}|d}td|}n.t|}|rt|}|d}|}nd}| ||fq| dr| dd}|r| |g}qt dd|\}} |}qW|r | |q W|S)Nrz\1,z^[=\s;]*rV)HEADER_TOKEN_REr@rjrBHEADER_QUOTED_VALUE_REHEADER_ESCAPE_REr]HEADER_VALUE_RErstripappendr[ startswithresubn) Z header_valuesresultr_Z orig_textpairsrEnamevalueZnon_junkZ nr_junk_charsrrrsplit_header_wordsTs>.         ryz([\"\\])cCsg}xt|D]l}g}xN|D]F\}}|dk rTtd|sHtd|}d|}d||f}||qW|r |d|q Wd|S)Nz^\w+$z\\\1z"%s"z%s=%sz; z, )rsr@HEADER_JOIN_ESCAPE_REr]rqjoin)Zlistsheadersrvattrkvrrrjoin_header_wordss     rcCs0|dr|dd}|dr,|dd}|S)N"r)rrendswith)r_rrr strip_quotess     rc Csd}g}x|D]}g}d}xt|dD]\}}|}|d\}} } |}|sd|dkr*Pnq*| rp| nd} |dkr|} | |kr| }|dkr| dk rt| } d}n|dkr| dk rtt| } ||| fq*W|r|s|d ||qW|S) N)expiresdomainpathsecureversionportzmax-ageF;=r rTr)r0) enumeratesplitstrip partitionrKrrarq) Z ns_headersZ known_attrsruZ ns_headerrv version_setiiZparamkeysepvallcrrrparse_ns_headerss>   rz\.\d+$cCs:t|rdS|dkrdS|ddks2|ddkr6dSdS)NFrVr .rT)IPV4_REr@)r_rrris_HDNs rcCsl|}|}||krdSt|s(dS||}|dksB|dkrFdS|dsTdSt|ddshdSdS)NTFrr rr)rKrrfindrr)ABirrr domain_matchs  rcCst|rdSdS)NFT)rr@)r_rrrliberal_is_HDNEs rcCs`|}|}t|r t|s0||kr,dSdS|d}|rL||rLdS|s\||kr\dSdS)NTFr)rKrrrr)rr initial_dotrrruser_domain_matchOs  rz:\d+$cCsB|}tj|d}|dkr,|dd}td|d}|S)NrrVZHost) get_full_urlurllibparseZurlparseZ get_header cut_port_rer]rK)requesturlhostrrr request_hostds  rcCs4t|}}|ddkr,t|s,|d}||fS)Nrrz.local)rfindrr@)rerhnreq_hostrrreff_request_hostts rcCs4|}tj|}t|j}|ds0d|}|S)N/)rrrZurlsplit escape_pathrrr)rrpartsrrrr request_paths    rcCs^|j}|d}|dkrV||dd}y t|WqZtk rRtd|dSXnt}|S)N:r rznonnumeric port: '%s')rrrArLrDEFAULT_HTTP_PORT)rrrrrrr request_ports   rz%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])cCsd|dS)Nz%%%sr)rBrO)rgrrruppercase_escaped_charsrcCstj|t}tt|}|S)N)rrZquoteHTTP_PATH_SAFEESCAPED_CHAR_REr]r)rrrrrs  rcCsP|d}|dkrL||dd}|d}t|rL|dksD|dkrLd|S|S)Nrr rZlocal)rr)hrbrrrreachs  rcCs$t|}t|t|jsdSdSdS)NTF)rrrZorigin_req_host)rrrrris_third_partys rc@sJeZdZdddZddZdddZd d Zdd d Zd dZddZ dS)rFcCs|dk rt|}| dk r$tt| } |dkr<|dkr)rrrrxrw)rplimitZ namevaluerrr__str__(s   zCookie.__str__cCspg}x,dD]$}t||}|d|t|fq W|dt|j|dt|jd|jjd|fS)N)rrwrxrrrrrrrrrrrrz%s=%szrest=%sz rfc2109=%sz%s(%s)z, )getattrrqreprrr __class____name__r{)rrrwr}rrr__repr__2s  zCookie.__repr__)F)N)N) r __module__ __qualname__rrrrrrrrrrrrs    c@s,eZdZddZddZddZddZd S) rcCs tdS)N)NotImplementedError)rcookierrrrset_okJszCookiePolicy.set_okcCs tdS)N)r)rrrrrr return_okSszCookiePolicy.return_okcCsdS)NTr)rrrrrrdomain_return_okWszCookiePolicy.domain_return_okcCsdS)NTr)rrrrrrpath_return_ok\szCookiePolicy.path_return_okN)rrrrrrrrrrrrAs  c @seZdZdZdZdZdZeeBZdddddddddeddf dd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5ZdS)6rrrrTr NTFc Csp||_||_||_||_||_||_| |_| |_| |_| |_ |dk rPt ||_ nd|_ |dk rft |}||_ dS)Nr) netscaperfc2965rfc2109_as_netscape hide_cookie2 strict_domainstrict_rfc2965_unverifiablestrict_ns_unverifiablestrict_ns_domainstrict_ns_set_initial_dollarstrict_ns_set_pathtuple_blocked_domains_allowed_domains) rblocked_domainsallowed_domainsrrrrrrrrrrrrrrls  zDefaultCookiePolicy.__init__cCs|jS)N)r)rrrrrsz#DefaultCookiePolicy.blocked_domainscCst||_dS)N)rr)rrrrrset_blocked_domainssz'DefaultCookiePolicy.set_blocked_domainscCs"x|jD]}t||rdSqWdS)NTF)rr)rrZblocked_domainrrr is_blockeds  zDefaultCookiePolicy.is_blockedcCs|jS)N)r)rrrrrsz#DefaultCookiePolicy.allowed_domainscCs|dk rt|}||_dS)N)rr)rrrrrset_allowed_domainssz'DefaultCookiePolicy.set_allowed_domainscCs0|jdkrdSx|jD]}t||rdSqWdS)NFT)rr)rrZallowed_domainrrris_not_alloweds    z"DefaultCookiePolicy.is_not_allowedcCsBtd|j|jx,dD]$}d|}t||}|||sdSqWdS)Nz - checking cookie %s=%s)r verifiabilityrwrrrZset_ok_FT)rrwrxr)rrrnfn_namefnrrrrs   zDefaultCookiePolicy.set_okcCsZ|jdkrtd|j|jdS|jdkr:|js:tddS|jdkrV|jsVtddSdS)Nz0 Set-Cookie2 without version attribute (%s=%s)Fr z$ RFC 2965 cookies are switched offz$ Netscape cookies are switched offT)rrrwrxrr)rrrrrrset_ok_versions  z"DefaultCookiePolicy.set_ok_versioncCsJ|jrFt|rF|jdkr*|jr*tddS|jdkrF|jrFtddSdS)Nr z> third-party RFC 2965 cookie during unverifiable transactionFz> third-party Netscape cookie during unverifiable transactionT) unverifiablerrrrr)rrrrrrset_ok_verifiabilitysz(DefaultCookiePolicy.set_ok_verifiabilitycCs0|jdkr,|jr,|jdr,td|jdSdS)Nr $z' illegal name (starts with '$'): '%s'FT)rrrwrrr)rrrrrr set_ok_names   zDefaultCookiePolicy.set_ok_namecCsL|jrHt|}|jdks(|jdkrH|jrH||j|sHtd|j|dSdS)Nr z7 path attribute %s is not a prefix of request path %sFT)rrrrrrr)rrrreq_pathrrr set_ok_paths  zDefaultCookiePolicy.set_ok_pathc Cs||jrtd|jdS||jr8td|jdS|jrt|\}}|j}|jr|ddkr|d}|dd|}|dkr||dd}||d|} | dkrt |dkrtd |dS| dr|dd} n|} | ddk} | s|d krtd |dS|j dkrX||sX| dsXd||sXtd ||dS|j dksr|j|j@rt||std ||dS|j dks|j|j@r|dt | } | ddkrt|std| |dSdS)Nz" domain %s is in user block-listFz& domain %s is not in user allow-listrrr r)coZacZcomZeduZorgZnetZgovZmilrAZaeroZbizcatZcoopinfoZjobsZmobiZmuseumrwZproZtraveleuz& country-code second level domain %sz.localz/ non-local domain %s contains no embedded dotzO effective request-host %s (even with added initial dot) does not end with %sz5 effective request-host %s does not domain-match %sz. host prefix %s for domain %s contains a dotT)rrrrrrrcountrrKlenrrrrrrDomainRFC2965MatchrDomainStrictNoDotsrr@) rrrrrrrjZtldZsldZundotted_domainZ embedded_dotsZ host_prefixrrr set_ok_domainsb                 z!DefaultCookiePolicy.set_ok_domainc Cs|jrt|}|dkrd}nt|}x\|jdD]:}y t|Wntk r`td|dSX||kr2Pq2Wtd||jdSdS)N80rkz bad port %s (not numeric)Fz$ request port (%s) not found in %sT)rrstrrrrArLr)rrrreq_portrrrr set_ok_port(s"   zDefaultCookiePolicy.set_ok_portcCsBtd|j|jx,dD]$}d|}t||}|||sdSqWdS)Nz - checking cookie %s=%s)rrrrrrZ return_ok_FT)rrwrxr)rrrrrrrrrr=s    zDefaultCookiePolicy.return_okcCs<|jdkr|jstddS|jdkr8|js8tddSdS)Nr z$ RFC 2965 cookies are switched offFz$ Netscape cookies are switched offT)rrrr)rrrrrrreturn_ok_versionOsz%DefaultCookiePolicy.return_ok_versioncCsJ|jrFt|rF|jdkr*|jr*tddS|jdkrF|jrFtddSdS)Nr z> third-party RFC 2965 cookie during unverifiable transactionFz> third-party Netscape cookie during unverifiable transactionT)rrrrrr)rrrrrrreturn_ok_verifiabilityXsz+DefaultCookiePolicy.return_ok_verifiabilitycCs |jr|jdkrtddSdS)NZhttpsz( secure cookie with non-secure requestFT)rtyper)rrrrrrreturn_ok_securedsz$DefaultCookiePolicy.return_ok_securecCs||jrtddSdS)Nz cookie expiredFT)r_nowr)rrrrrrreturn_ok_expiresjs z%DefaultCookiePolicy.return_ok_expirescCsP|jrLt|}|dkrd}x0|jdD]}||kr(Pq(Wtd||jdSdS)Nr rkz0 request port %s does not match cookie port %sFT)rrrr)rrrr rrrrreturn_ok_portps z"DefaultCookiePolicy.return_ok_portcCst|\}}|j}|r*|ds*d|}n|}|jdkr^|j|j@r^|js^||kr^tddS|jdkrt||std||dS|jdkrd| |std||dSdS)Nrr zQ cookie with unspecified domain does not string-compare equal to request domainFzQ effective request-host name %s does not domain-match RFC 2965 cookie domain %sz; request-host %s does not match Netscape cookie domain %sT) rrrrrrDomainStrictNonDomainrrrr)rrrrrr dotdomainrrrreturn_ok_domain~s&    z$DefaultCookiePolicy.return_ok_domaincCst|\}}|dsd|}|ds0d|}|rH|dsHd|}n|}||sd||sddS||r|td|dS||rtd|dSdS)NrFz" domain %s is in user block-listz& domain %s is not in user allow-listT)rrrrrrr)rrrrrrrrrrs"        z$DefaultCookiePolicy.domain_return_okcCsbtd|t|}t|}||kr&dS||rR|dsN|||ddkrRdStd||dS)Nz- checking cookie path=%sTrrz %s does not path-match %sF)rrrrrr)rrrrZpathlenrrrrs   z"DefaultCookiePolicy.path_return_ok)rrrrrrZ DomainLiberalZ DomainStrictrrrrrrrrrrrrr r rrrrrrrrrrrrrrbsJ    ;  cCst|}t|j|S)N)sortedkeysmapr)Zadictrrrrvals_sorted_by_keys rc csZt|}xL|D]D}d}y |jWntk r4YnXd}t|EdH|s|VqWdS)NFT)ritemsAttributeError deepvalues)mappingvaluesobjrrrrs  rc@s eZdZdS)AbsentN)rrrrrrrr"sr"c@seZdZedZedZedZedZedZ edej Z d2dd Z d d Z d d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd3d$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Z dS)4rz\Wz([\"\\])z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)NcCs(|dkrt}||_t|_i|_dS)N)r_policy _threadingRLock _cookies_lock_cookies)rpolicyrrrrs  zCookieJar.__init__cCs ||_dS)N)r#)rr(rrr set_policyszCookieJar.set_policycCsg}|j||sgStd||j|}xd|D]X}|j||sHq4||}x:|D].}|j||svtdqZtd||qZWq4W|S)Nz!Checking %s for cookies to returnz not returning cookiez it's a match) r#rrr'rrr rrq)rrrcookiesZcookies_by_pathrZcookies_by_namerrrr_cookies_for_domains   zCookieJar._cookies_for_domaincCs.g}x$|jD]}||||qW|S)N)r'rextendr+)rrr*rrrr_cookies_for_requestszCookieJar._cookies_for_requestc CsF|jddddd}g}x$|D]}|j}|sLd}|dkrL|d||jdk r~|j|jr~|dkr~|jd|j}n|j}|jdkr||jn|d |j|f|dkr"|j r|d |j |j d r|j }|j s| d r|d d}|d ||jdk r"d}|jr4|d|j}||q"W|S)NcSs t|jS)N)rr)arrrz)CookieJar._cookie_attrs..T)rreverseFr z $Version=%sz\\\1z%s=%sz $Path="%s"rrz $Domain="%s"z$Portz="%s")sortrrqrx non_word_rer@quote_rer]rwrrrrrrrr) rr*rattrsrrrxrrrrr _cookie_attrs s>      zCookieJar._cookie_attrscCstd|jztt|j_|_||}||}|r^| ds^| dd ||jj r|jj s| dsx$|D]}|jdkr~| ddPq~WWd|jX|dS)Nadd_cookie_headerrz; ZCookie2rz $Version="1")rr&acquirerArMr#rr-r6Z has_headerZadd_unredirected_headerr{rrrreleaseclear_expired_cookies)rrr*r5rrrrr7Fs$          zCookieJar.add_cookie_headerc Csg}d}d}x||D]r}|d\}}d}d} i} i} x4|ddD]"\} } | }||ksh||krl|} | |kr| dkrd} | | krqF| dkr| dkrtdd} P| } | d kr|rqF| dkrtd qF| d krd}y t| } Wn$tk rtd d} PYnXd } |j| } | |ks2| |krb| dkrX| d krXtd| d} P| | | <qF| | | <qFW| rvq|||| | fqW|S)N)rr)rrzmax-agerrrr commenturlr FrTrz% missing value for domain attributerzM missing or invalid value for expires attribute: treating as session cookiezmax-agez? missing or invalid (non-numeric) value for max-age attribute)rrr;z! missing value for %s attribute)rKrrArLrrq)r attrs_set cookie_tuples boolean_attrs value_attrsZ cookie_attrsrwrxZ max_age_setZ bad_cookiestandardrr~rrrrr_normalized_cookie_tuplesgsf          z#CookieJar._normalized_cookie_tuplescCs$|\}}}}|dt}|dt}|dt} |dt} |dd} | dk rry t| } Wntk rpdSX|dd} |dd} |d d}|d d}|tk r|d krd }t|}nXd}t|}|d }|dkr| dkr|d|}n|d|d}t|dkrd }|tk }d}|r8t| d}|tkrTt |\}}|}n| dshd|}d}| tk r| dkrt |} nd }t dd | } nd} | tkrd} d } nH| |jkry||||Wntk rYnXtd|||dSt| ||| ||||||| | | |||S)NrrrrrrFrrr;rVTrrr rrz\s+z2Expiring cookie, domain='%s', path='%s', name='%s')rr"rArLrrrrboolrrrrrsr]rclearKeyErrorrr)rtuprrwrxr@rrrrrrrrrrrrrrrrrrrr_cookie_from_cookie_tuples                       z#CookieJar._cookie_from_cookie_tuplecCs:||}g}x&|D]}|||}|r||qW|S)N)rArFrq)rr<rr=r*rErrrr_cookies_from_attrs_set$s   z!CookieJar._cookies_from_attrs_setcCsLt|jdd}|dkr |jj }x&|D]}|jdkr&d|_|r&d|_q&WdS)NrrTr )rr#rrr)rr*Z rfc2109_as_nsrrrr_process_rfc2109_cookies-s   z"CookieJar._process_rfc2109_cookiesc Cs>|}|dg}|dg}tt|j_|_|jj}|jj}|sN|rf|sV|rf|s^|rf|sj|sjgSy|t ||}Wnt k rt g}YnX|r:|r:y|t ||} Wnt k rt g} YnX| | |r*i} x |D]} d| | j| j| jf<qW| fdd} t| | } | r:|| |S)Nz Set-Cookie2z Set-CookiecSs|j|j|jf}||kS)N)rrrw)Z ns_cookielookuprrrrno_matching_rfc2965fsz3CookieJar.make_cookies..no_matching_rfc2965)rZget_allrArMr#rrrrGry ExceptionrrrHrrrwfilterr,) rresponserr|Z rfc2965_hdrsZns_hdrsrrr*Z ns_cookiesrIrrJrrr make_cookies9sD          zCookieJar.make_cookiescCsN|jz2tt|j_|_|j||r:||Wd|jXdS)N) r&r8rArMr#rr set_cookier9)rrrrrrset_cookie_if_okps  zCookieJar.set_cookie_if_okcCsl|j}|jzJ|j|kr&i||j<||j}|j|krDi||j<||j}|||j<Wd|jXdS)N)r'r&r8rrrwr9)rrcZc2Zc3rrrrO}s     zCookieJar.set_cookiecCsftd||jz|dk rX|dkrJtd|j||=n|dk rj|j|=ni|_dS)Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rLr')rrrrwrrrrCs  zCookieJar.clearcCsH|jz,x&|D]}|jr||j|j|jqWWd|jXdS)N)r&r8rrCrrrwr9)rrrrrclear_session_cookiess   zCookieJar.clear_session_cookiescCsT|jz8t}x*|D]"}||r||j|j|jqWWd|jXdS)N) r&r8rMrrCrrrwr9)rrrrrrr:s   zCookieJar.clear_expired_cookiescCs t|jS)N)rr')rrrr__iter__szCookieJar.__iter__cCsd}x|D] }|d}q W|S)Nr rr)rrrrrr__len__s zCookieJar.__len__cCs6g}x|D]}|t|q Wd|jjd|fS)Nz<%s[%s]>z, )rqrrrr{)rrrrrrrs zCookieJar.__repr__cCs6g}x|D]}|t|q Wd|jjd|fS)Nz<%s[%s]>z, )rqr rrr{)rrVrrrrrs zCookieJar.__str__)N)NNN)!rrrrscompiler3r4Zstrict_domain_reZ domain_reZdots_reASCIImagic_rerr)r+r-r6r7rArFrGrHrNrPrOrRrCrSr:rTrUrrrrrrrs6      ;!a\  7   c@s eZdZdS)rN)rrrrrrrrsc@s4eZdZd ddZd ddZd ddZdd d ZdS)rNFcCsJt|||dk r6y |dWntdYnX||_t||_dS)NrVzfilename must be string-like)rrrLfilenamerB delayload)rrZr[r(rrrrs  zFileCookieJar.__init__cCs tdS)N)r)rrZignore_discardignore_expiresrrrsaveszFileCookieJar.savec CsJ|dkr"|jdk r|j}nttt|}|||||WdQRXdS)N)rZrLMISSING_FILENAME_TEXTopen _really_load)rrZr\r]rrrrloads   zFileCookieJar.loadcCs|dkr"|jdk r|j}ntt|jzFt|j}i|_y||||Wnt k rn||_YnXWd|j XdS)N) rZrLr_r&r8rZdeepcopyr'rbOSErrorr9)rrZr\r]Z old_staterrrrevert s    zFileCookieJar.revert)NFN)NFF)NFF)NFF)rrrrr^rbrdrrrrrs    cCs$|j|jfd|jfd|jfg}|jdk r8|d|jf|jrH|d|jrX|d|jrh|d|j rx|d|j r|dt t |j f|j r|d |jr|d |jf|jr|d |jft|j}x$|D]}||t|j|fqW|d t|jft|gS) Nrrr) path_specN) port_specN) domain_dotN)rNr)rNrr;r)rwrxrrrrqrrrrrr5rZrrrrrrr rr)rrrr~rrrlwp_cookie_str$s6         rhc@s(eZdZd ddZd ddZdd ZdS) rTcCsXt}g}x:|D]2}|s"|jr"q|s2||r2q|dt|qWd|dgS)NzSet-Cookie3: %s rV)rMrrrqrhr{)rr\r]rrVrrrr as_lwp_strMs  zLWPCookieJar.as_lwp_strNFc CsX|dkr"|jdk r|j}nttt|d"}|d||||WdQRXdS)Nwz#LWP-Cookies-2.0 )rZrLr_r`writerj)rrZr\r]rrrrr^]s   zLWPCookieJar.savecCsD|}|j|s$d|}t|t}d}d} d} yx|} | dkrRP| |s^q@| t|d} xt| gD]p} | d\} }i}i}x| D] }d||<qWx| ddD]p\}}|dk r| }nd}|| ks|| kr|}|| kr|dkrd }|||<q|| kr&|||<q|||<qW|j }|d }|d }|dk rZt |}|dkrhd }|d }|d }t |d| ||d|d|||d|d|d|d|||d|d|}|s|j rq|s||rq||qWq@WWnBtk rYn,tk r>ttd|| fYnXdS)Nz5%r does not look like a Set-Cookie3 (LWP) format filez Set-Cookie3:)rfrergrr)rrrrrrr;rVr FrTrrrrrrrfrgrrerrr;z&invalid Set-Cookie3 format file %r: %r)readlinerYr@rrMrrrrryrKrrdrrrrOrcrKr)rrrZr\r]magicrrheaderr>r?linedatarwrxr@rr~rrrrrrrrQrrrrais                   zLWPCookieJar._really_load)TT)NFF)rrrrjr^rarrrrr@s  c@s,eZdZedZdZddZd ddZdS) rz#( Netscape)? HTTP Cookie Filezr# Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This is a generated file! Do not edit. cCsdt}|}|j|s(td|yx|}|dkr>P|drT|dd}|ds,|dkrpq,|d\}} } } } } }| dk} | dk} | dkr|} d}|d}d }| dkrd} d }t d | |dd || || d | | |ddi}|s|j rq,|s | |r q,| |q,WWnBt k r4Yn,tk r^ttd ||fYnXdS) Nz4%r does not look like a Netscape format cookies filerVrir)#r TRUErFTr z+invalid Netscape format cookies file %r: %r)rMrmrYr@rrrrrrrrrrOrcrKr)rrrZr\r]rrnrprrrrrrwrxrrrQrrrras`     zMozillaCookieJar._really_loadNFc Cs|dkr"|jdk r|j}nttt|d}||jt}x|D]}|sX|jrXqH|sh||rhqH|j rtd}nd}|j drd}nd}|j dk rt |j } nd} |jdkrd} |j} n |j} |j} |d|j ||j|| | | gdqHWWdQRXdS)NrkrtZFALSErrVrsri)rZrLr_r`rlrorMrrrrrrrr rxrwr{r) rrZr\r]rrrrrrrwrxrrrr^ s<          zMozillaCookieJar.save)NFF) rrrrsrWrYrorar^rrrrrs A)N)N)V__all__rr-rsrMZ urllib.parserZurllib.requestZ threadingr$Z http.clientZhttpZcalendarr r r rr ZclientZ HTTP_PORTrr_rr%r,r6r7rIr(rqrKr5r8r>rWrXr?rFrSrXIr\Xr^rarbrdrjrlrmrornryrzrrrrrrrrrrrrrrrrrrrrrrrrr"rrcrrrhrrrrrrs       88!    U D'    #b!`:x