o
    n~b5                     @   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mZ d dl	m
Z
mZ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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)DefaultDictDictIterableIteratorListMappingOptionalSetTupleUnioncast)URL   )AbstractCookieJarClearCookiePredicate)is_ip_addressnext_whole_second)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jjjejjdZej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%d>d$d%Z&d&ejde!d'e!ddfd(d)Z'e( fd*e)d+e(ddfd,d-Z*e( fd.e(ded/ fd0d1Z+e,de!d2e!defd3d4Z-e,d5e!d6e!defd7d8Z.e/d9e!deej fd:d;Z0  Z1S )?r   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})tzinfoi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 | _i | _| j| _z| j  W d S  ty`   | j| _Y d S w )Nr"   c                 S   s*   g | ]}t |trt| n| qS  )
isinstancestrr   origin).0urlr%   r%   </usr/local/lib/python3.10/dist-packages/aiohttp/cookiejar.py
<listcomp>Q   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   _next_expiration_expirationsMAX_TIME	_max_time	timestampOverflowErrorMAX_32BIT_TIME)selfr   r    r!   r"   	__class__r%   r+   r.   ;   s2   

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dumpr/   HIGHEST_PROTOCOLr<   r?   fr%   r%   r+   save_   s   
"zCookieJar.savec                 C   sH   t |}|jdd}t|| _W d    d S 1 sw   Y  d S )NrbrA   )rC   rD   rE   rF   loadr/   rI   r%   r%   r+   rM   d   s   
"zCookieJar.load	predicatec           
      C   s:  |d u rt  | _| j  | j  | j  d S g }tjtjj	}| j
 D ]&\}}|
 D ]\}}||f}|| jv rD| j| |ksH||rM|| q0q(|D ]"\}}||f}| j| || jv rj| j||f= | j| |d  qQt| j | jd}	z|	jddtjdd | _W d S  ty   | j| _Y d S w )N)defaultr   )microsecondr   seconds)r   r5   r/   clearr1   r6   datetimenowtimezoneutcitemsappenddiscardpopminvaluesr8   replace	timedeltar:   )
r<   rN   Zto_delrU   domaincookienamemorselkeyZnext_expirationr%   r%   r+   rS   i   sH   





zCookieJar.clearr`   c                    s     fdd d S )Nc                    s     | d S )Nr`   )_is_domain_matchxr`   r<   r%   r+   <lambda>   s    z(CookieJar.clear_domain.<locals>.<lambda>rS   r<   r`   r%   rh   r+   clear_domain   s   zCookieJar.clear_domainIterator[Morsel[str]]c                 c   s,    |    | j D ]	}| E d H  q
d S N)_do_expirationr/   r]   )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%   rf   r%   r%   r+   ri      s    z*CookieJar._do_expiration.<locals>.<lambda>rj   ru   r%   r%   r+   ro      rw   zCookieJar._do_expirationwhenrb   c                 C   s    t | j|| _|| j||f< d S rn   )r\   r5   r6   )r<   ry   r`   rb   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|	}
ztjtjjtj|
d	 }W n ty   | j}Y nw | ||| W n& ty   d|d< Y nw |d
 }|r| |}|r| ||| nd|d
< || j| |< q|   dS )zUpdate cookies.Nr`   . r   path/zmax-agerQ   expires)raw_hostr2   r   r&   r   rX   r   r   endswithr1   add
startswithre   r   rfindintrT   rU   rV   rW   r_   r:   r8   rz   
ValueError_parse_dater/   ro   )r<   r{   r|   hostnamerb   ra   tmpr`   r   Zmax_ageZdelta_secondsZmax_age_expirationr   expire_timer%   r%   r+   update_cookies   sl   







zCookieJar.update_cookiesrequest_url)BaseCookie[str]zSimpleCookie[str]c           
      C   s0  |    t|}| jrt nt }|jpd}t }tt |	 }W d   n1 s-w   Y  |j
dvo;|| jv}| D ]W}|j}|d }|sO|j||< q>| jsWt|rWq>||f| jv rd||krcq>n| ||skq>| |j|d suq>|r||d r|q>td||jt }	|	|j|j|j |	||< q>|S )z8Returns this jar's cookies filtered by their attributes.r~   N)httpswssr`   r   securer   )ro   r   r3   r   r   r   
contextlibsuppressr   r(   schemer4   rd   valuer2   r   r1   re   _is_path_matchr   r   getr   r0   coded_value)
r<   r   filteredr   Zrequest_originZis_not_securera   rb   r`   Zmrsl_valr%   r%   r+   filter_cookies   sD   




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.TFNr}   )r   lenr   )r`   r   non_matchingr%   r%   r+   re     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.r   TFN)r   r   r   )r   r   r   r%   r%   r+   r   ,  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j||
|	|||tjjdS )z4Implements date string parsing adhering to RFC 6265.NFr   tokenTc                 s   s    | ]}t |V  qd S rn   )r   )r)   sr%   r%   r+   rs   W  s    z(CookieJar._parse_date.<locals>.<genexpr>F   c   il  E   i  r      iA     ;   r   )DATE_TOKENS_REfinditergroupDATE_HMS_TIME_REmatchgroupsDATE_DAY_OF_MONTH_REr   DATE_MONTH_RE	lastindexDATE_YEAR_RErT   rV   rW   )clsr   Z
found_timeZ	found_dayZfound_monthZ
found_yearhourminuteseconddaymonthyearZtoken_matchr   Z
time_matchZ	day_matchZmonth_matchZ
year_matchr%   r%   r+   r   ?  sh   

 zCookieJar._parse_datern   r#   rm   )r#   N)2__name__
__module____qualname____doc__recompiler   r   r   Ir   r   rT   maxr^   rV   rW   r7   utcfromtimestampr;   boolr   r   r
   r   asyncioAbstractEventLoopr.   r   rK   rM   r   rS   r'   rl   rq   r   rv   ro   rz   r   r   r   r   staticmethodre   r   classmethodr   __classcell__r%   r%   r=   r+   r   $   sd    


$!

N
3"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-   r.   )r<   r"   r=   r%   r+   r.     rw   zDummyCookieJar.__init__rm   c                 c   s    d S rn   r%   ru   r%   r%   r+   rq     s   zDummyCookieJar.__iter__c                 C   rx   )Nr   r%   ru   r%   r%   r+   rv        zDummyCookieJar.__len__rN   c                 C      d S rn   r%   )r<   rN   r%   r%   r+   rS     r   zDummyCookieJar.clearr`   c                 C   r   rn   r%   rk   r%   r%   r+   rl     r   zDummyCookieJar.clear_domainr{   r|   c                 C   r   rn   r%   )r<   r{   r|   r%   r%   r+   r     r   zDummyCookieJar.update_cookiesr   r   c                 C   s   t  S rn   )r   )r<   r   r%   r%   r+   r     s   zDummyCookieJar.filter_cookiesr   rn   )r   r   r   r   r   r   r   r.   rq   r   rv   r   rS   r'   rl   r   r   r   r   r   r%   r%   r=   r+   r     s    "
r   )*r   r   rT   osrC   rF   r   collectionsr   http.cookiesr   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   Zyarlr   abcr   r   helpersr   r   Ztypedefsr   r   r   __all__r'   Z
CookieItemr   r   r%   r%   r%   r+   <module>   s(    4  `