o
     JAfg.                    @   s  	 g d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z
ddlZddlmZ dZdadd ZdZdZeejjZed	Zd
ZdZdd ZdZdd Zg dZg dZ g Z!e D ]	Z"e!#e"$  q`dhddZ%dhddZ&dddddZ'edej(Z)dd Z*dd Z+edej(Z,edej-ej(B Z.edej/ej(B Z0d d! Z1ed"ej/ej(B Z2d#d$ Z3d%d& Z4ed'Z5ed(Z6ed)Z7ed*Z8d+d, Z9ed-Z:d.d/ Z;d0d1 Z<d2d3 Z=ed4ej(Z>d5d6 Z?d7d8 Z@d9d: ZAd;d< ZBed=ej(ZCd>d? ZDd@dA ZEdBdC ZFdDdE ZGdFZHedGZIdHdI ZJdJdK ZKdLdM ZLdNdO ZMG dPdQ dQZNG dRdS dSZOG dTdU dUeOZPdVdW ZQdXdY ZRG dZd[ d[ZSG d\d] d]ZTG d^d_ d_eUZVG d`da daeTZWdbdc ZXG ddde deeWZYG dfdg dgeWZZdS )i)Cookie	CookieJarCookiePolicyDefaultCookiePolicyFileCookieJarLWPCookieJar	LoadErrorMozillaCookieJar    N)timegmFc                  G   s(   t sd S tsdd l}|datj |  S )Nr	   zhttp.cookiejar)debugloggerlogging	getLogger)argsr    r   %/usr/lib/python3.10/http/cookiejar.py_debug,   s   

r   ZHTTPOnlyz
#HttpOnly_z#( Netscape)? HTTP Cookie FilezQa filename was not supplied (nor was the CookieJar instance initialised with one)zr# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

c                  C   sJ   dd l } dd l}dd l}|  }|d | | }|jd| dd d S )Nr	   zhttp.cookiejar bug!
%s   )
stacklevel)iowarnings	tracebackStringIO	print_excgetvaluewarn)r   r   r   fmsgr   r   r   _warn_unhandled_exceptionB   s
   r   i  c                 C   s   | d d \}}}}}}|t krTd|  krdkrTn d S d|  kr'dkrTn d S d|  kr4dkrTn d S d|  krAdkrTn d S d|  krQdkrTt| S  d S d S )	N            r	      ;   =   )
EPOCH_YEARr
   )ttyearmonthZmdayhourminsecr   r   r   _timegmQ   s   r-   )ZMonZTueZWedZThuZFriZSatZSun)ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc                 C   sB   	 | d u rt j  }nt j | }d|j|j|j|j|j|jf S )Nz%04d-%02d-%02d %02d:%02d:%02dZ)	datetimeutcnowutcfromtimestampr(   r)   dayr*   minutesecondtZdtr   r   r   	time2isoz_   s   r6   c                 C   sT   	 | d u rt j  }nt j | }dt|  |jt|jd  |j|j	|j
|jf S )Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr    )r.   r/   r0   DAYSZweekdayr1   MONTHSr)   r(   r*   r2   r3   r4   r   r   r   time2netscaper   s   
r9   )ZGMTUTCZUTZz^([-+])?(\d\d?):?(\d\d)?$c                 C   sl   d }| t v r
d}|S t| }|r4dt|d }|dr*|dt|d  }|ddkr4| }|S )Nr	   i  r      <   r    -)	UTC_ZONESTIMEZONE_REsearchintgroup)tzoffsetmr   r   r   offset_from_tz_string   s   	

rG   c                 C   s  t |}|tjkrd S zt| d }W n/ tyE   zt |}W n ty.   Y Y d S w d|  kr9dkr@n Y d S |}nY d S Y nw |d u rLd}|d u rRd}|d u rXd}t | } t |}t |}t |}|dk rtt d }|d }	|}
|| |	 }|	|
 }	t	|	dkr|	dkr|d }n|d }t
||| ||||f}|d ur|d u rd}| }t|}|d u rd S || }|S )Nr    r!   r	   i  d   2   r:   )rB   r.   ZMAXYEARMONTHS_LOWERindexlower
ValueErrortime	localtimeabsr-   upperrG   )r1   monyrhrr+   r,   rD   ZimonZcur_yrrF   tmpr5   rE   r   r   r   	_str2time   sV   
rV   zV^[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                 C   s   	 t | }|r7| }t|d  d }t|d |t|d t|d t|d t|d f}t|S | 	 } t
d| d} d gd \}}}}}}	}
t| }|d urc| \}}}}}}	}
nd S t||||||	|
S )	Nr    r   r	   r<             )STRICT_DATE_RErA   groupsrJ   rK   rL   rB   floatr-   lstrip
WEEKDAY_REsubLOOSE_HTTP_DATE_RErV   )textrF   grR   r'   r1   rS   rT   r+   r,   rD   r   r   r   	http2time   s"   

rd   a  ^
    (\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           
      C   sf   	 |   } d gd \}}}}}}}t| }|d ur'| \}}}}}}}}	nd S t|||||||S )NrZ   )r^   ISO_DATE_RErA   r\   rV   )
rb   r1   rR   rS   rT   r+   r,   rD   rF   _r   r   r   iso2time3  s   
rg   c                 C   s,   	 |  d\}}| jd | | j|d   S )Nr	   )spanstring)matchstartendr   r   r   	unmatchedT  s   rm   z^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c           
      C   s  	 g }| D ]{}|}g }|ryt |}|rSt|}|d}t|}|r4t|}|d}td|}nt|}|rIt|}|d}| }nd }|	||f n$|
 drl|
 dd  }|ri|	| g }ntdd|\}}	|}|s|r|	| q|S )Nr    z\1,z^[=\s;]*rY   )HEADER_TOKEN_RErA   rm   rC   HEADER_QUOTED_VALUE_REHEADER_ESCAPE_REr`   HEADER_VALUE_RErstripappendr^   
startswithresubn)
Zheader_valuesresultrb   Z	orig_textpairsrF   namevalueZnon_junkZnr_junk_charsr   r   r   split_header_words]  s@   -






 r|   ([\"\\])c                 C   s~   	 g }| D ]4}g }|D ]#\}}|d ur)t d|s#td|}d| }d||f }|| q|r9|d| qd|S )Nz^\w+$\\\1z"%s"%s=%s; , )rv   rA   HEADER_JOIN_ESCAPE_REr`   rt   join)Zlistsheadersry   attrkvr   r   r   join_header_words  s   
r   c                 C   s0   |  dr| dd  } | dr| d d } | S )N"r    )ru   endswithrb   r   r   r   strip_quotes  s
   

r   c                 C   s   	 d}g }| D ]s}g }d}t |dD ]W\}}| }|d\}}	}
| }|s1|dkr0 n<q|	r7|
 nd }
|dkrd| }||v rG|}|dkrV|
d urSt|
}
d}n|dkrd|
d urdtt|
}
|||
f q|rz|su|d	 || q|S )
N)expiresdomainpathsecureversionportmax-ageF;=r	   r   Tr   )r   0)	enumeratesplitstrip	partitionrL   r   rd   rt   )Z
ns_headersZknown_attrsrx   Z	ns_headerry   version_setiiZparamkeysepvallcr   r   r   parse_ns_headers  sB   

r   z\.\d+$c                 C   s<   	 t | rdS | dkrdS | d dks| d dkrdS dS )NFrY   r	   .r   TIPV4_RErA   r   r   r   r   is_HDN  s   
r   c                 C   sn   	 |   } |  }| |krdS t| sdS | |}|dks"|dkr$dS |ds+dS t|dd  s5dS dS )NTFr   r	   r   r    )rL   r   rfindru   )ABir   r   r   domain_match'  s   

r   c                 C   s   	 t | rdS dS NFTr   r   r   r   r   liberal_is_HDNN  s   
r   c                 C   sb   	 |   } |  }t| rt|s| |krdS dS |d}|r'| |r'dS |s/| |kr/dS dS )NTFr   )rL   r   ru   r   )r   r   initial_dotr   r   r   user_domain_matchX  s   
r   z:\d+$c                 C   sD   	 |   }tj|d }|dkr| dd}td|d}| S )Nr    rY   ZHost)get_full_urlurllibparseurlparseZ
get_headercut_port_rer`   rL   )requesturlhostr   r   r   request_hostm  s   r   c                 C   s6   	 t |  }}|ddkrt|s|d }||fS )Nr   r   .local)r   findr   rA   )r   erhnreq_hostr   r   r   eff_request_host}  s
   r   c                 C   s6   	 |   }tj|}t|j}|dsd| }|S )N/)r   r   r   urlsplitescape_pathr   ru   )r   r   partsr   r   r   r   request_path  s   

r   c                 C   s^   | j }|d}|dkr+||d d  }zt| W |S  ty*   td| Y d S w t}|S )N:r	   r    znonnumeric port: '%s')r   r   rB   rM   r   DEFAULT_HTTP_PORT)r   r   r   r   r   r   r   request_port  s   


r   z%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])c                 C   s   d|  d  S )Nz%%%sr    )rC   rQ   )rj   r   r   r   uppercase_escaped_char  s   r   c                 C   s    	 t j| t} tt| } | S N)r   r   quoteHTTP_PATH_SAFEESCAPED_CHAR_REr`   r   )r   r   r   r   r     s   	r   c                 C   sR   	 |  d}|dkr'| |d d  }| d}t| r'|dks#|dkr'd| S | S )Nr   r	   r    local)r   r   )hr   br   r   r   reach  s   

r   c                 C   s"   	 t | }t|t| jsdS dS NTF)r   r   r   Zorigin_req_host)r   r   r   r   r   is_third_party  s
   	r   c                   @   sN   e Zd Z	 	dddZdd ZdddZd	d
 ZdddZdd Zdd Z	dS )r   Fc                 C   s   |d urt |}|d urt t|}|d u r|du rtd|| _|| _|| _|| _|| _| | _	|| _
|| _|	| _|
| _|| _|| _|| _|| _|| _|| _t|| _d S )NTz-if port is None, port_specified must be false)rB   r]   rM   r   rz   r{   r   port_specifiedrL   r   domain_specifieddomain_initial_dotr   path_specifiedr   r   discardcommentcomment_urlrfc2109copy_rest)selfr   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   restr   r   r   r   __init__  s*   
zCookie.__init__c                 C   s
   || j v S r   r   )r   rz   r   r   r   has_nonstandard_attr$     
zCookie.has_nonstandard_attrNc                 C   s   | j ||S r   )r   get)r   rz   defaultr   r   r   get_nonstandard_attr&     zCookie.get_nonstandard_attrc                 C   s   || j |< d S r   r   )r   rz   r{   r   r   r   set_nonstandard_attr(  r   zCookie.set_nonstandard_attrc                 C   s,   |d u rt   }| jd ur| j|krdS dS r   )rN   r   )r   nowr   r   r   
is_expired+  s   zCookie.is_expiredc                 C   sX   | j d u rd}nd| j  }| j| | j }| jd ur#d| j| jf }n| j}d||f S )NrY   r   r   z<Cookie %s for %s>)r   r   r   r{   rz   )r   plimitZ	namevaluer   r   r   __str__1  s   

zCookie.__str__c                 C   sl   g }dD ]}t | |}|d|t|f  q|dt| j  |dt| j  d| jjd|f S )N)r   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   zrest=%sz
rfc2109=%sz%s(%s)r   )getattrrt   reprr   r   	__class____name__r   )r   r   rz   r   r   r   r   __repr__;  s   
zCookie.__repr__)Fr   )
r   
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r     s    
*


r   c                   @   s.   e Zd Z	 dd Zdd Zdd Zdd Zd	S )
r   c                 C      	 t  r   NotImplementedErrorr   cookier   r   r   r   set_okS  s   zCookiePolicy.set_okc                 C   r   r   r   r   r   r   r   	return_ok\     zCookiePolicy.return_okc                 C      	 dS NTr   )r   r   r   r   r   r   domain_return_ok`     zCookiePolicy.domain_return_okc                 C   r   r   r   )r   r   r   r   r   r   path_return_oke  r   zCookiePolicy.path_return_okN)r   r   r   r   r   r   r   r   r   r   r   r   J  s    	r   c                   @   s   e Zd Z	 dZdZdZdZeeB Zdddddddddedddfd	d
Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 ZdS )7r   r    r   rW   r	   NTF)httpswssc                 C   sx   	 || _ || _|| _|| _|| _|| _|	| _|
| _|| _|| _	|| _
|d ur,t|| _nd| _|d ur7t|}|| _d S )Nr   )netscaperfc2965rfc2109_as_netscapehide_cookie2strict_domainstrict_rfc2965_unverifiablestrict_ns_unverifiablestrict_ns_domainstrict_ns_set_initial_dollarstrict_ns_set_pathsecure_protocolstuple_blocked_domains_allowed_domains)r   blocked_domainsallowed_domainsr  r  r  r  r  r  r  r  r	  r
  r  r   r   r   r   u  s$   
zDefaultCookiePolicy.__init__c                 C      	 | j S r   )r  r   r   r   r   r    r   z#DefaultCookiePolicy.blocked_domainsc                 C   s   	 t || _d S r   )r  r  )r   r  r   r   r   set_blocked_domains  s   z'DefaultCookiePolicy.set_blocked_domainsc                 C   s    | j D ]
}t||r dS qdS r   )r  r   )r   r   Zblocked_domainr   r   r   
is_blocked  s
   

zDefaultCookiePolicy.is_blockedc                 C   r  r   )r  r  r   r   r   r    r   z#DefaultCookiePolicy.allowed_domainsc                 C   s   	 |d ur	t |}|| _d S r   )r  r  )r   r  r   r   r   set_allowed_domains  s   
z'DefaultCookiePolicy.set_allowed_domainsc                 C   s.   | j d u rdS | j D ]
}t||r dS q
dS r   )r  r   )r   r   Zallowed_domainr   r   r   is_not_allowed  s   


z"DefaultCookiePolicy.is_not_allowedc                 C   B   	 t d|j|j dD ]}d| }t| |}|||s dS qdS )N - checking cookie %s=%s)r   verifiabilityrz   r   r   r   Zset_ok_FTr   rz   r{   r   r   r   r   nZfn_namefnr   r   r   r     s   

zDefaultCookiePolicy.set_okc                 C   sZ   |j d u rtd|j|j dS |j dkr| jstd dS |j dkr+| js+td dS dS )Nz0   Set-Cookie2 without version attribute (%s=%s)Fr	   $   RFC 2965 cookies are switched off$   Netscape cookies are switched offT)r   r   rz   r{   r  r  r   r   r   r   set_ok_version  s   
z"DefaultCookiePolicy.set_ok_versionc                 C   J   |j r#t|r#|jdkr| jrtd dS |jdkr#| jr#td dS dS Nr	   z>   third-party RFC 2965 cookie during unverifiable transactionFz>   third-party Netscape cookie during unverifiable transactionTZunverifiabler   r   r  r   r  r   r   r   r   set_ok_verifiability     z(DefaultCookiePolicy.set_ok_verifiabilityc                 C   s0   |j dkr| jr|jdrtd|j dS dS )Nr	   $z'   illegal name (starts with '$'): '%s'FT)r   r	  rz   ru   r   r   r   r   r   set_ok_name  s   
zDefaultCookiePolicy.set_ok_namec                 C   sL   |j r$t|}|jdks|jdkr$| jr$| |j|s$td|j| dS dS )Nr	   z7   path attribute %s is not a prefix of request path %sFT)r   r   r   r
  r   r   r   )r   r   r   req_pathr   r   r   set_ok_path  s   
zDefaultCookiePolicy.set_ok_pathc                 C   s  |  |jrtd|j dS | |jrtd|j dS |jrt|\}}|j}| jre|ddkre|d}|dd|}|dkre||d d  }||d | }	|		 dv ret
|dkretd	| dS |drq|dd  }
n|}
|
ddk}|s|d
krtd| dS |jdkr||s|dsd| |std|| dS |jdks| j| j@ rt||std|| dS |jdks| j| j@ r|d t
|  }|ddkrt|std|| dS dS )N"   domain %s is in user block-listF&   domain %s is not in user allow-listr   r   r	   r    )coZacZcomZeduZorgZnetZgovZmilrB   ZaeroZbizcatZcoopinfoZjobsZmobiZmuseumrz   ZproZtraveleuz&   country-code second level domain %sr   z/   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)r  r   r   r  r   r   r  countr   rL   lenru   r   r   r   r  DomainRFC2965Matchr   DomainStrictNoDotsr   rA   )r   r   r   r   r   r   r   jZtldZsldZundotted_domainZembedded_dotsZhost_prefixr   r   r   set_ok_domain  st   









z!DefaultCookiePolicy.set_ok_domainc              	   C   s   |j rBt|}|d u rd}nt|}|jdD ] }zt| W n ty0   td| Y  dS w ||kr8 dS qtd||j dS dS )N80rn   z   bad port %s (not numeric)Fz$   request port (%s) not found in %sT)r   r   strr   r   rB   rM   r   r   r   r   Zreq_portr   r   r   r   set_ok_port3  s*   
zDefaultCookiePolicy.set_ok_portc                 C   r  )Nr  )r   r  r   r   r   r   Z
return_ok_FTr  r  r   r   r   r   H  s   

zDefaultCookiePolicy.return_okc                 C   s<   |j dkr| jstd dS |j dkr| jstd dS dS )Nr	   r  Fr  T)r   r  r   r  r   r   r   r   return_ok_versionZ  s   z%DefaultCookiePolicy.return_ok_versionc                 C   r!  r"  r#  r   r   r   r   return_ok_verifiabilityc  r%  z+DefaultCookiePolicy.return_ok_verifiabilityc                 C   s"   |j r|j| jvrtd dS dS )Nz(   secure cookie with non-secure requestFT)r   typer  r   r   r   r   r   return_ok_secureo  s   z$DefaultCookiePolicy.return_ok_securec                 C   s   | | jrtd dS dS )Nz   cookie expiredFT)r   _nowr   r   r   r   r   return_ok_expiresu  s   z%DefaultCookiePolicy.return_ok_expiresc                 C   sP   |j r&t|}|d u rd}|j dD ]	}||kr dS qtd||j  dS dS )Nr6  rn   z0   request port %s does not match cookie port %sFT)r   r   r   r   r8  r   r   r   return_ok_port{  s   z"DefaultCookiePolicy.return_ok_portc                 C   s   t |\}}|j}|r|dsd| }n|}|jdkr/| j| j@ r/|js/||kr/td dS |jdkrAt||sAtd|| dS |jdkrUd| 	|sUtd|| dS dS )Nr   r	   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)
r   r   ru   r   r  DomainStrictNonDomainr   r   r   r   )r   r   r   r   r   r   	dotdomainr   r   r   return_ok_domain  s0   


z$DefaultCookiePolicy.return_ok_domainc                 C   s   t |\}}|dsd| }|dsd| }|r$|ds$d| }n|}||s2||s2dS | |r>td| dS | |rJtd| dS dS )Nr   Fr*  r+  T)r   ru   r   r  r   r  )r   r   r   r   r   rB  r   r   r   r     s"   






z$DefaultCookiePolicy.domain_return_okc                 C   sb   t d| t|}t|}||krdS ||r)|ds'|||d  dkr)dS t d|| dS )Nz- checking cookie path=%sTr   r    z  %s does not path-match %sF)r   r   r1  ru   r   )r   r   r   r(  pathlenr   r   r   r     s   

z"DefaultCookiePolicy.path_return_ok)r   r   r   r3  rA  r2  ZDomainLiberalZDomainStrictr   r  r  r  r  r  r  r   r   r$  r'  r)  r5  r9  r   r:  r;  r=  r?  r@  rC  r   r   r   r   r   r   r   k  sR    
#	;	r   c                 C   s   t |  }t| j|S r   )sortedkeysmapr   )ZadictrF  r   r   r   vals_sorted_by_key  s   rH  c              	   c   sX    	 t | }|D ]!}d} z|j W n	 ty   Y n
w d} t|E d H  | s)|V  qd S r   )rH  itemsAttributeError
deepvalues)mappingvaluesobjr   r   r   rK    s    
rK  c                   @      e Zd ZdS )AbsentNr   r   r   r   r   r   r   rP        rP  c                   @   s   e Zd Z	 edZedZedZedZedZ	edej
Zd2dd	Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd3d$d%Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z dS )4r   z\Wr}   z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)Nc                 C   s(   |d u rt  }|| _t | _i | _d S r   )r   _policy
_threadingRLock_cookies_lock_cookiesr   policyr   r   r   r     s
   

zCookieJar.__init__c                 C   s
   || _ d S r   )rS  rX  r   r   r   
set_policy  r   zCookieJar.set_policyc                 C   s   g }| j ||sg S td| | j| }| D ]*}| j ||s#q|| }| D ]}| j ||s9td q+td || q+q|S )Nz!Checking %s for cookies to returnz   not returning cookiez   it's a match)	rS  r   r   rW  rF  r   rM  r   rt   )r   r   r   cookiesZcookies_by_pathr   Zcookies_by_namer   r   r   r   _cookies_for_domain  s"   

zCookieJar._cookies_for_domainc                 C   s,   	 g }| j  D ]}|| || q|S r   )rW  rF  extendr\  )r   r   r[  r   r   r   r   _cookies_for_request  s
   zCookieJar._cookies_for_requestc           	      C   s8  	 |j dd dd d}g }|D ]}|j}|s$d}|dkr$|d|  |jd ur=| j|jr=|dkr=| jd|j}n|j}|jd u rL||j n
|d	|j|f  |dkr|j	re|d
|j
  |jdr|j}|js||dr||dd  }|d|  |jd urd}|jr|d|j  }|| q|S )Nc                 S   
   t | jS r   )r1  r   )ar   r   r   <lambda>   s   
 z)CookieJar._cookie_attrs.<locals>.<lambda>T)r   reverseFr	   z$Version=%sr~   r   z
$Path="%s"r   r    z$Domain="%s"z$Portz="%s")sortr   rt   r{   non_word_rerA   quote_rer`   rz   r   r   r   ru   r   r   r   )	r   r[  r   attrsr   r   r{   r   r   r   r   r   _cookie_attrs  sH   	



zCookieJar._cookie_attrsc                 C   s   	 t d | j  zKtt  | j_| _| |}| |}|r0|	ds0|
dd| | jjrO| jjsO|	dsO|D ]}|jdkrN|
dd  nq?W | j  n| j  w |   d S )Nadd_cookie_headerr   r   ZCookie2r    z$Version="1")r   rV  acquirerB   rN   rS  r>  r^  rg  Z
has_headerZadd_unredirected_headerr   r  r  r   releaseclear_expired_cookies)r   r   r[  rf  r   r   r   r   rh  Q  s.   





zCookieJar.add_cookie_headerc              
   C   sv  	 g }d}d}|D ]}|d \}}d}d}	i }
i }|dd  D ]\}}|  }||v s/||v r1|}||v r;|d u r;d}||
v r@q|dkrT|d u rPtd d}	 n\|  }|d	krd|r[q|d u rdtd
 q|dkrd}zt|}W n ty   td d}	Y  n,w d	}| j| }||v s||v r|d u r|dvrtd|  d}	 n
||
|< q|||< q|	rq	||||
|f q	|S )N)r   r   )r   r   r   r   r   r   r   
commenturlr	   Fr    Tr   z%   missing value for domain attributer   zM   missing or invalid value for expires attribute: treating as session cookier   z?   missing or invalid (non-numeric) value for max-age attribute)r   r   rl  z!   missing value for %s attribute)rL   r   rB   rM   r>  rt   )r   	attrs_setcookie_tuplesboolean_attrsvalue_attrsZcookie_attrsrz   r{   Zmax_age_setZ
bad_cookiestandardr   r   r   r   r   r   r   _normalized_cookie_tuplesr  sj   
	


z#CookieJar._normalized_cookie_tuplesc                 C   s  |\}}}}| dt}| dt}| dt}	| dt}
| dd }|d ur9zt|}W n
 ty8   Y d S w | dd}| dd}| d	d }| d
d }|tur`|dkr`d}t|}n*d}t|}|d}|dkr|dkrz|d | }n|d |d  }t|dkrd}|tu}d}|rt|	d}|tu rt
|\}}|}n	|	dsd| }d}|	tur|	d u rt|}	nd}tdd|	}	nd }	|
tu rd }
d}n!|
| jkrz	| ||| W n	 ty   Y nw td||| d S t||||	||||||||
||||S )Nr   r   r   r   r   r   Fr   r   rl  rY   Tr   r   r	   r    r   z\s+z2Expiring cookie, domain='%s', path='%s', name='%s')r   rP  rB   rM   r   r   r   r1  boolru   r   r   rv   r`   r>  clearKeyErrorr   r   )r   tupr   rz   r{   rq  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _cookie_from_cookie_tuple  s   




z#CookieJar._cookie_from_cookie_tuplec                 C   s6   |  |}g }|D ]}| ||}|r|| q	|S r   )rr  rw  rt   )r   rm  r   rn  r[  rv  r   r   r   r   _cookies_from_attrs_set/  s   
z!CookieJar._cookies_from_attrs_setc                 C   sH   t | jdd }|d u r| jj }|D ]}|jdkr!d|_|r!d|_qd S )Nr  r    Tr	   )r   rS  r  r   r   )r   r[  Zrfc2109_as_nsr   r   r   r   _process_rfc2109_cookies8  s   

z"CookieJar._process_rfc2109_cookiesc                 C   s0  	 |  }|dg }|dg }tt  | j_| _| jj}| jj}|s(|r4|s,|r4|s0|r4|s6|s6g S z
| t	||}W n t
yN   t  g }Y nw |r|rz
| t||}	W n t
yk   t  g }	Y nw | |	 |ri }
|D ]}d |
|j|j|jf< qw|
fdd}t||	}	|	r||	 |S )NzSet-Cookie2z
Set-Cookiec                 S   s   | j | j| jf}||vS r   )r   r   rz   )Z	ns_cookielookupr   r   r   r   no_matching_rfc2965q  s   z3CookieJar.make_cookies.<locals>.no_matching_rfc2965)r.  Zget_allrB   rN   rS  r>  r  r  rx  r|   	Exceptionr   r   ry  r   r   rz   filterr]  )r   responser   r   Zrfc2965_hdrsZns_hdrsr  r  r[  Z
ns_cookiesrz  r   r{  r   r   r   make_cookiesD  s`   


zCookieJar.make_cookiesc                 C   sh   	 | j   z'tt  | j_| _| j||r&| | W | j   d S W | j   d S | j   w r   )	rV  ri  rB   rN   rS  r>  r   
set_cookierj  r   r   r   r   set_cookie_if_ok{  s   
zCookieJar.set_cookie_if_okc                 C   sv   	 | j }| j  z+|j|vri ||j< ||j }|j|vr#i ||j< ||j }|||j< W | j  d S | j  w r   )rW  rV  ri  r   r   rz   rj  )r   r   cc2Zc3r   r   r   r    s   


zCookieJar.set_cookiec                 C   sl   	 t d|  | j  z"| ||D ]}| j||r't d| | | qW | j  d S | j  w )Nzextract_cookies: %sz setting cookie: %s)	r   r.  rV  ri  r  rS  r   r  rj  )r   r~  r   r   r   r   r   extract_cookies  s   


zCookieJar.extract_cookiesc                 C   s|   	 |d ur|d u s|d u rt d| j| | |= d S |d ur/|d u r't d| j| |= d S |d ur9| j|= d S i | _d S )Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rM   rW  )r   r   r   rz   r   r   r   rt    s    
zCookieJar.clearc                 C   sN   	 | j   z| D ]}|jr| |j|j|j q	W | j   d S | j   w r   )rV  ri  r   rt  r   r   rz   rj  )r   r   r   r   r   clear_session_cookies  s   
zCookieJar.clear_session_cookiesc                 C   sZ   	 | j   z t }| D ]}||r| |j|j|j qW | j   d S | j   w r   )	rV  ri  rN   r   rt  r   r   rz   rj  )r   r   r   r   r   r   rk    s   
	
zCookieJar.clear_expired_cookiesc                 C   r_  r   )rK  rW  r  r   r   r   __iter__  r   zCookieJar.__iter__c                 C   s   	 d}| D ]}|d }q|S )Nr	   r    r   )r   r   r   r   r   r   __len__  s   zCookieJar.__len__c                 C   2   g }| D ]	}| t| qd| jjd|f S Nz<%s[%s]>r   )rt   r   r   r   r   r   rr   r   r   r   r        zCookieJar.__repr__c                 C   r  r  )rt   r7  r   r   r   r  r   r   r   r     r  zCookieJar.__str__r   )NNN)!r   r   r   rv   compilerd  re  Zstrict_domain_reZ	domain_reZdots_reASCIImagic_rer   rZ  r\  r^  rg  rh  rr  rw  rx  ry  r  r  r  r  rt  r  rk  r  r  r   r   r   r   r   r   r     s:    





;!a\	7
r   c                   @   rO  )r   NrQ  r   r   r   r   r     rR  r   c                   @   s:   e Zd Z	 dddZdddZdddZ		dd	d
ZdS )r   NFc                 C   s4   	 t | | |d urt|}|| _t|| _d S r   )r   r   osfspathfilenamers  	delayload)r   r  r  rY  r   r   r   r     s   
zFileCookieJar.__init__c                 C   r   r   r   )r   r  ignore_discardignore_expiresr   r   r   save  r   zFileCookieJar.savec                 C   sb   	 |d u r| j d ur| j }nttt|}| |||| W d    d S 1 s*w   Y  d S r   )r  rM   MISSING_FILENAME_TEXTopen_really_loadr   r  r  r  r   r   r   r   load  s   
"zFileCookieJar.loadc                 C   s   	 |d u r| j d ur| j }ntt| j  z&t| j}i | _z	| ||| W n t	y5   || _ w W | j
  d S | j
  w r   )r  rM   r  rV  ri  r   deepcopyrW  r  OSErrorrj  )r   r  r  r  Z	old_stater   r   r   revert  s    
zFileCookieJar.revert)NFNNFF)r   r   r   r   r  r  r  r   r   r   r   r     s    


	r   c                 C   s"  	 | j | jfd| jfd| jfg}| jd ur|d| jf | jr%|d | jr-|d | jr5|d | j	r=|d | j
rL|dtt| j
f | jrT|d	 | jr_|d
| jf | jrj|d| jf t| j }|D ]}||t| j| f qs|dt| jf t|gS )Nr   r   r   )	path_specN)	port_specN)
domain_dotN)r   Nr   )r   Nr   rl  r   )rz   r{   r   r   r   rt   r   r   r   r   r   r6   r]   r   r   r   rE  r   rF  r7  r   r   )r   r   rF  r   r   r   r   lwp_cookie_str,  s*   

r  c                   @   s*   e Zd Z	 d
ddZdddZdd	 ZdS )r   Tc                 C   sV   	 t   }g }| D ]}|s|jrq	|s||rq	|dt|  q	d|dg S )NzSet-Cookie3: %s
rY   )rN   r   r   rt   r  r   )r   r  r  r   r  r   r   r   r   
as_lwp_strU  s   
zLWPCookieJar.as_lwp_strNFc                 C   sn   |d u r| j d ur| j }nttt|d}|d || || W d    d S 1 s0w   Y  d S )Nwz#LWP-Cookies-2.0
)r  rM   r  r  writer  r  r   r   r   r  e  s   
"zLWPCookieJar.savec                 C   s
  |  }| j|sd| }t|t }d}d}	d}
z	 |  }|dkr)W d S ||s/q|t|d   }t|gD ]}|d \}}i }i }|	D ]}d||< qL|dd  D ]5\}}|d urf|	 }nd }||
v sp||	v rr|}||	v r|d u r|d	}|||< qY||
v r|||< qY|||< qY|j
}|d
}|d}|d urt|}|d u rd	}|d}|d}t|d|||d|d|||d|d|d|d|||d|d|}|s|jrq>|s||rq>| | q>q ty     ty   t  td||f w )Nz5%r does not look like a Set-Cookie3 (LWP) format filezSet-Cookie3:)r  r  r  r   r   )r   r   r   r   r   r   rl  r    rY   r	   FTr   r   r   r   r   r   r  r  r   r  r   r   rl  z&invalid Set-Cookie3 format file %r: %r)readliner  rA   r   rN   ru   r1  r   r|   rL   r   rg   r   r   r   r  r  r|  r   )r   r   r  r  r  magicr   r   headerro  rp  linedatarz   r{   rq  r   r   r   r   r   r   r   r   r   r  r   r   r   r  q  s   









5zLWPCookieJar._really_load)TTr  )r   r   r   r  r  r  r   r   r   r   r   H  s
    

r   c                   @   s    e Zd Z	 dd ZdddZdS )r   c                 C   sj  t   }t| std| z	 | }i }|dkr W d S |tr1d|t< |ttd  }|	dr<|d d }|
 dsI|
 dkrJq|d\}}	}
}}}}|dk}|	dk}	|dkrf|}d }|d	}d
}|dkrud }d}td||d d
||	||
d
|||d d |}|s|jrq|s||rq| | q ty     ty   t  td||f w )Nz4%r does not look like a Netscape format cookies filer    rY   r  r   )#r&  	TRUEr   FTr	   z+invalid Netscape format cookies file %r: %r)rN   NETSCAPE_MAGIC_RGXrj   r  r   ru   HTTPONLY_PREFIXHTTPONLY_ATTRr1  r   r   r   r   r   r   r  r  r|  r   )r   r   r  r  r  r   r  r   r   r   r   r   r   rz   r{   r   r   r  r   r   r   r    sp   




9zMozillaCookieJar._really_loadNFc                 C   s&  |d u r| j d ur| j }nttt|ds}|t t }| D ]^}|j}|s-|jr-q"|s5|	|r5q"|j
r;d}nd}|drEd}	nd}	|jd urRt|j}
nd}
|jd u r_d}|j}n|j}|j}|trnt| }|d||	|j||
||gd  q"W d    d S 1 sw   Y  d S )Nr  r  FALSEr   rY   r  r  )r  rM   r  r  r  NETSCAPE_HEADER_TEXTrN   r   r   r   r   ru   r   r7  r{   rz   r   r  r  r   r   )r   r  r  r  r   r   r   r   r   r   r   rz   r{   r   r   r   r  )  sF   




"zMozillaCookieJar.saver  )r   r   r   r  r  r   r   r   r   r     s    Ir   r   )[__all__r  r   r.   rv   rN   urllib.parser   Zurllib.request	threadingrT  Zhttp.clienthttpZcalendarr
   r   r   r   r  r  r7  clientZ	HTTP_PORTr   r  r  r  r  r   r&   r-   r7   r8   rJ   r)   rt   rL   r6   r9   r?   r  r@   rG   rV   r[   Ir_   Xra   rd   re   rg   rm   ro   rp   rr   rq   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH  rK  rP  r   r  r   r   r  r   r   r   r   r   r   <module>   s    	


8
8
!




UD'


#b!  b    7x