o
    )f6                     @   s  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 dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZ ddlm Z m!Z! dd	l"m#Z# dd
l$m%Z%m&Z&m'Z' dZ(ee)df Z*G dd de Z+G dd de Z,dS )    N)defaultdict)
BaseCookieMorselSimpleCookie)ceil)DefaultDictDictIterableIteratorListMappingOptionalSetTupleUnioncast)URL   )AbstractCookieJarClearCookiePredicate)is_ip_address)LooseCookiesPathLikeStrOrURL)	CookieJarDummyCookieJarMorsel[str]c                       s  e Zd ZdZedZedZedZedej	Z
edZeejjjejjd d Zz
eee W n eefyK   ed	ZY n eyU   d
ZY nw ed Zddddddededeeee df de e!j" ddf
 fddZ#de$ddfddZ%de$ddfddZ&d?de e' ddfddZ(de)ddfdd Z*d@d"d#Z+defd$d%Z,dAd&d'Z-d(e.de)d)e)d*e)ddf
d+d,Z/e0 fd-e1d.e0ddfd/d0Z2e0 fd1e0dd2fd3d4Z3e4de)d5e)defd6d7Z5e4d8e)d9e)defd:d;Z6e7d<e)de e fd=d>Z8  Z9S )Br   z/Implements cookie storage adhering to RFC 6265.z][\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]*(?P<token>[\x00-\x08\x0A-\x1F\d:a-zA-Z\x7F-\xFF]+)z(\d{1,2}):(\d{1,2}):(\d{1,2})z	(\d{1,2})zG(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec)z	(\d{2,4}))Ztzinfor   )	i           ;   r    r!   r!   iFTN)unsafequote_cookietreat_as_secure_originloopr"   r#   r$   r%   returnc                   s   t  j|d tt| _t | _|| _|| _|d u rg }nt	|t
r(| g}nt	|tr5t
| g}ndd |D }|| _tt | _i | _d S )Nr%   c                 S   s*   g | ]}t |trt| n| qS  )
isinstancestrr   origin).0Zurlr(   r(   1lib/python3.10/site-packages/aiohttp/cookiejar.py
<listcomp>b   s    z&CookieJar.__init__.<locals>.<listcomp>)super__init__r   r   _cookiesset_host_only_cookies_unsafe_quote_cookier)   r   r+   r*   _treat_as_secure_originr   time_next_expiration_expirations)selfr"   r#   r$   r%   	__class__r(   r-   r0   L   s&   


zCookieJar.__init__	file_pathc                 C   sN   t |}|jdd}t| j|tj W d    d S 1 s w   Y  d S )Nwbmode)pathlibPathopenpickledumpr1   ZHIGHEST_PROTOCOLr:   r=   fr(   r(   r-   savej   s   
"zCookieJar.savec                 C   sH   t |}|jdd}t|| _W d    d S 1 sw   Y  d S )Nrbr?   )rA   rB   rC   rD   loadr1   rF   r(   r(   r-   rJ   o   s   
"zCookieJar.load	predicatec           
      C   s0  |d u rt t | _| j  | j  | j  d S g }t }| j D ])\\}}}| D ]\}}|||f}	|	| jv rF| j|	 |ksJ||rO||	 q1q'|D ])\}}}| j	||f |||f}	|	| jv rq| j|||f= | j||f 
|d  qS| jrtg | j | jR  d | _d S | j| _d S )Nr   )r   r7   r8   r1   clearr3   r9   itemsappenddiscardpopminvaluesSUB_MAX_TIMEMAX_TIME)
r:   rK   Zto_delZnowdomainpathcookienameZmorselkeyr(   r(   r-   rL   t   s8   






zCookieJar.clearrU   c                    s     fdd d S )Nc                    s     | d S )NrU   )_is_domain_matchxrU   r:   r(   r-   <lambda>   s    z(CookieJar.clear_domain.<locals>.<lambda>rL   r:   rU   r(   r]   r-   clear_domain   s   zCookieJar.clear_domainIterator[Morsel[str]]c                 c   s,    |    | j D ]	}| E d H  q
d S N)_do_expirationr1   rR   )r:   valr(   r(   r-   __iter__   s
   zCookieJar.__iter__c                 C   s   t dd | D S )Nc                 s   s    | ]}d V  qdS )r   Nr(   )r,   ir(   r(   r-   	<genexpr>   s    z$CookieJar.__len__.<locals>.<genexpr>)sumr:   r(   r(   r-   __len__      zCookieJar.__len__c                 C   s   |  dd  d S )Nc                 S      dS )NFr(   r[   r(   r(   r-   r^      s    z*CookieJar._do_expiration.<locals>.<lambda>r_   rj   r(   r(   r-   rd      rl   zCookieJar._do_expirationwhenrV   rX   c                 C   s"   t | j|| _|| j|||f< d S rc   )rQ   r8   r9   )r:   rn   rU   rV   rX   r(   r(   r-   _expire_cookie   s   zCookieJar._expire_cookiecookiesresponse_urlc              	   C   s  |j }| jst|rdS t|tr| }|D ]\}}t|ts+t }|||< || }|d }|dr9d}|d= |sM|durM| j	
||f | }|d< |dr\|dd }||d< |re| ||seq|d }|rp|ds|j}|ds{d}nd|d|d  }||d< |d }	|	rzt|	}
tt |
 | j}| |||| W n' ty   d|d< Y nw |d	 }|r| |}|r| |||| nd|d	< || j||f |< q|   dS )
zUpdate cookies.NrU   . r   rV   /zmax-ageexpires)raw_hostr4   r   r)   r   rM   r   r   endswithr3   add
startswithrZ   rV   rfindintrQ   r7   rT   ro   
ValueError_parse_dater1   rd   )r:   rp   rq   hostnamerX   rW   tmprU   rV   Zmax_ageZdelta_secondsZmax_age_expirationru   Zexpire_timer(   r(   r-   update_cookies   s\   





zCookieJar.update_cookiesrequest_urlBaseCookie[str]c           
      C   sZ  | j rt nt }| js|S |   | js|S t|}|jpd}|jdv}|rK| jrKt }t	
t | }W d   n1 sAw   Y  || jv}t| dd dD ]W}|j}|d }|sd|j||< qS| jslt|rlqS||f| jv ry||krxqSn| ||sqS| |j|d sqS|r|d	 rqStd
||jt }	|	|j|j|j |	||< qS|S )z8Returns this jar's cookies filtered by their attributes.rs   )ZhttpsZwssNc                 S   s   t | d S )NrV   )len)cr(   r(   r-   r^     s    z*CookieJar.filter_cookies.<locals>.<lambda>)rY   rU   rV   Zsecurer   )r5   r   r   r1   rd   r   rv   Zschemer6   
contextlibsuppressr|   r+   sortedrY   valuer4   r   r3   rZ   _is_path_matchrV   r   getr   r2   Zcoded_value)
r:   r   Zfilteredr~   Zis_not_secureZrequest_originrW   rX   rU   Zmrsl_valr(   r(   r-   filter_cookies   sL   






zCookieJar.filter_cookiesr~   c                 C   sD   || krdS | | sdS |dt|   }| dsdS t| S )z0Implements domain matching adhering to RFC 6265.TFNrr   )rw   r   r   )rU   r~   non_matchingr(   r(   r-   rZ   $  s   


zCookieJar._is_domain_matchreq_pathcookie_pathc                 C   sP   |  dsd} | |krdS |  |sdS |drdS | t|d }| dS )z.Implements path matching adhering to RFC 6265.rt   TFN)ry   rw   r   )r   r   r   r(   r(   r-   r   4  s   



zCookieJar._is_path_matchdate_strc                 C   s  |sdS d}d}d}d}d } }}d}	d}
d}| j |D ]\}|d}|s>| j|}|r>d}dd | D \}}}q|sQ| j|}|rQd}t| }	q|sh| j|}|rhd}|j	dusdJ |j	}
q|sz| j
|}|rzd}t| }qd|  krd	krn n|d
7 }nd|  krdkrn n|d7 }d||||fv rdS d|	  krdksdS  dS |dk s|dks|dks|dkrdS t||
|	|||dddf	S )z4Implements date string parsing adhering to RFC 6265.NFr   tokenTc                 s   s    | ]}t |V  qd S rc   )r{   )r,   sr(   r(   r-   rh   _  s    z(CookieJar._parse_date.<locals>.<genexpr>F   c   il  E   i  r   r   iA  r   r    r!   )DATE_TOKENS_REfinditergroupDATE_HMS_TIME_REmatchgroupsDATE_DAY_OF_MONTH_REr{   DATE_MONTH_RE	lastindexDATE_YEAR_REcalendartimegm)clsr   Z
found_timeZ	found_dayZfound_monthZ
found_yearZhourZminutesecondZdayZmonthZyearZtoken_matchr   Z
time_matchZ	day_matchZmonth_matchZ
year_matchr(   r(   r-   r}   G  sd   

 zCookieJar._parse_daterc   r&   rb   )r&   N):__name__
__module____qualname____doc__recompiler   r   r   Ir   r   r{   datetimemaxreplacetimezoneZutcZ	timestamprT   r   r   r7   gmtimeOSErrorr|   OverflowErrorrS   boolr   r   r   r   asyncioAbstractEventLoopr0   r   rH   rJ   r   rL   r*   ra   rf   rk   rd   floatro   r   r   r   r   staticmethodrZ   r   classmethodr}   __classcell__r(   r(   r;   r-   r   '   sj    




H7 r   c                       s   e Zd ZdZdddeej ddf fddZdd	d
Zde	fddZ
ddee ddfddZdeddfddZe fdededdfddZdeddfddZ  ZS )r   zxImplements a dummy cookie storage.

    It can be used with the ClientSession when no cookie processing is needed.

    Nr'   r%   r&   c                   s   t  j|d d S )Nr'   )r/   r0   )r:   r%   r;   r(   r-   r0     rl   zDummyCookieJar.__init__rb   c                 c   s    d S rc   r(   rj   r(   r(   r-   rf     s   zDummyCookieJar.__iter__c                 C   rm   )Nr   r(   rj   r(   r(   r-   rk        zDummyCookieJar.__len__rK   c                 C      d S rc   r(   )r:   rK   r(   r(   r-   rL     r   zDummyCookieJar.clearrU   c                 C   r   rc   r(   r`   r(   r(   r-   ra     r   zDummyCookieJar.clear_domainrp   rq   c                 C   r   rc   r(   )r:   rp   rq   r(   r(   r-   r     r   zDummyCookieJar.update_cookiesr   r   c                 C   s   t  S rc   )r   )r:   r   r(   r(   r-   r     s   zDummyCookieJar.filter_cookiesr   rc   )r   r   r   r   r   r   r   r0   rf   r{   rk   r   rL   r*   ra   r   r   r   r   r   r(   r(   r;   r-   r     s    "
r   )-r   r   r   r   osrA   rD   r   r7   collectionsr   Zhttp.cookiesr   r   r   Zmathr   typingr   r   r	   r
   r   r   r   r   r   r   r   Zyarlr   abcr   r   Zhelpersr   Ztypedefsr   r   r   __all__r*   Z
CookieItemr   r   r(   r(   r(   r-   <module>   s.    4  c