a
    }3e5                     @   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eeeeee df eej dd fddZeddddZeddddZd6ee ddddZ e!ddddZ"ddddZ#e$ddd Z%ddd!d"Z&eje!e!e!dd#d$d%Z'e( fe)e(dd&d'd(Z*e( fe(ed) d*d+d,Z+e,e!e!ed-d.d/Z-e,e!e!ed0d1d2Z.e/e!eej d3d4d5Z0  Z1S )7r   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loop)r   r    r!   r"   returnc                   s   t  j|d tt| _t | _|| _|| _|d u r:g }n>t	|t
rP| g}n(t	|trjt
| g}ndd |D }|| _t | _i | _| j| _z| j  W n ty   | j| _Y n0 d S )Nr"   c                 S   s*   g | ]"}t |trt| n| qS  )
isinstancestrr   origin).0urlr%   r%   D/home/pi/bot/my_env/lib/python3.9/site-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.   ;   s0    

zCookieJar.__init__)	file_pathr#   c                 C   sL   t |}|jdd"}t| j|tj W d    n1 s>0    Y  d S )Nwbmode)pathlibPathopenpickledumpr/   HIGHEST_PROTOCOLr<   r?   fr%   r%   r+   save_   s    
zCookieJar.savec                 C   sF   t |}|jdd}t|| _W d    n1 s80    Y  d S )NrbrA   )rC   rD   rE   rF   loadr/   rI   r%   r%   r+   rM   d   s    
zCookieJar.load	predicater#   c                 C   sP  |d u r2t  | _| j  | j  | j  d S g }tjtjj	}| j
 D ]R\\}}}|
 D ]<\}}|||f}	|	| jv r| j|	 |ks||rd||	 qdqP|D ]R\}}}| j||f |||f}	|	| jv r| j|||f= | j||f |d  qt| j | jd}
z|
jddtjdd | _W n tyJ   | j| _Y n0 d S )N)defaultr   )microsecondr   seconds)r   r5   r/   clearr1   r6   datetimenowtimezoneutcitemsappenddiscardpopminvaluesr8   replace	timedeltar:   )r<   rO   Zto_delrV   domainpathcookienamemorselkeyZnext_expirationr%   r%   r+   rT   i   sB    







zCookieJar.clearra   r#   c                    s     fdd d S )Nc                    s     | d S )Nra   )_is_domain_matchxra   r<   r%   r+   <lambda>       z(CookieJar.clear_domain.<locals>.<lambda>rT   r<   ra   r%   rk   r+   clear_domain   s    zCookieJar.clear_domainIterator[Morsel[str]]r#   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>   rm   z$CookieJar.__len__.<locals>.<genexpr>)sumr<   r%   r%   r+   __len__   s    zCookieJar.__len__c                 C   s   |  dd  d S )Nc                 S   s   dS )NFr%   ri   r%   r%   r+   rl      rm   z*CookieJar._do_expiration.<locals>.<lambda>rn   rz   r%   r%   r+   rt      s    zCookieJar._do_expiration)whenra   rb   rd   r#   c                 C   s"   t | j|| _|| j|||f< d S rs   )r]   r5   r6   )r<   r|   ra   rb   rd   r%   r%   r+   _expire_cookie   s    zCookieJar._expire_cookiecookiesresponse_urlr#   c              	   C   s  |j }| jst|rdS t|tr*| }|D ]\}}t|tsXt }|||< || }|d }|drtd}|d= |s|dur| j	
||f | }|d< |dr|dd }||d< |r| ||sq.|d }|r|ds|j}|dsd}nd|d|d  }||d< |d }	|	rzXt|	}
z tjtjjtj|
d	 }W n tyj   | j}Y n0 | |||| W n ty   d|d< Y n0 n8|d
 }|r| |}|r| |||| nd|d
< || j||f |< q.|   dS )zUpdate cookies.Nra   . r   rb   /zmax-agerR   expires)raw_hostr2   r   r&   r   rY   r   r   endswithr1   add
startswithrh   rb   rfindintrU   rV   rW   rX   r`   r:   r8   r}   
ValueError_parse_dater/   rt   )r<   r   r   hostnamerd   rc   tmpra   rb   Zmax_ageZdelta_secondsZmax_age_expirationr   expire_timer%   r%   r+   update_cookies   sh    






zCookieJar.update_cookies)BaseCookie[str]zSimpleCookie[str]request_urlr#   c           
      C   s@  |    t|}| jrt nt }|jp*d}t }tt |	 }W d   n1 sZ0    Y  |j
dvov|| jv}t| dd dD ]}|j}|d }|s|j||< q| jst|rq||f| jv r||krqn| ||sq| |j|d sq|r|d	 rqtd
||jt }	|	|j|j|j |	||< q|S )z8Returns this jar's cookies filtered by their attributes.r   N)httpswssc                 S   s   t | d S )Nrb   )len)cr%   r%   r+   rl      rm   z*CookieJar.filter_cookies.<locals>.<lambda>)rf   ra   rb   securer   )rt   r   r3   r   r   r   
contextlibsuppressr   r(   schemer4   sortedrf   valuer2   r   r1   rh   _is_path_matchrb   r   getr   r0   coded_value)
r<   r   filteredr   Zrequest_originZis_not_securerc   rd   ra   Zmrsl_valr%   r%   r+   filter_cookies   s@    
&


zCookieJar.filter_cookies)ra   r   r#   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   r   r   )ra   r   non_matchingr%   r%   r+   rh     s    

zCookieJar._is_domain_match)req_pathcookie_pathr#   c                 C   sP   |  dsd} | |krdS |  |s(dS |dr6d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_strr#   c              	   C   s  |sdS d}d}d}d}d } }}d}	d}
d}| j |D ]}|d}|s|| j|}|r|d}dd | D \}}}q<|s| j|}|rd}t| }	q<|s| j|}|rd}|j	dusJ |j	}
q<|s<| j
|}|r<d}t| }q<d|  krd	krn n
|d
7 }n$d|  kr4dkr@n n|d7 }d||||fv rVdS d|	  krndkstn 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 rs   )r   )r)   sr%   r%   r+   rx   Z  rm   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_RErU   rW   rX   )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   B  sb    

(zCookieJar._parse_date)N)2__name__
__module____qualname____doc__recompiler   r   r   Ir   r   rU   maxr_   rW   rX   r7   utcfromtimestampr;   boolr   r   r
   r   asyncioAbstractEventLoopr.   r   rK   rM   r   rT   r'   rp   rv   r   r{   rt   r}   r   r   r   r   staticmethodrh   r   classmethodr   __classcell__r%   r%   r=   r+   r   $   s\   


$!
N4r   c                       s   e Zd ZdZddeej dd fddZddd	d
Ze	dddZ
dee ddddZeddddZe feeddddZedd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.     s    zDummyCookieJar.__init__rq   rr   c                 c   s   d S rs   r%   rz   r%   r%   r+   rv     s    zDummyCookieJar.__iter__c                 C   s   dS )Nr   r%   rz   r%   r%   r+   r{     s    zDummyCookieJar.__len__rN   c                 C   s   d S rs   r%   )r<   rO   r%   r%   r+   rT     s    zDummyCookieJar.clearrg   c                 C   s   d S rs   r%   ro   r%   r%   r+   rp     s    zDummyCookieJar.clear_domainr~   c                 C   s   d S rs   r%   )r<   r   r   r%   r%   r+   r     s    zDummyCookieJar.update_cookiesr   r   c                 C   s   t  S rs   )r   )r<   r   r%   r%   r+   r     s    zDummyCookieJar.filter_cookies)N)r   r   r   r   r   r   r   r.   rv   r   r{   r   rT   r'   rp   r   r   r   r   r   r%   r%   r=   r+   r     s    r   )*r   r   rU   osrC   rF   r   collectionsr   http.cookiesr   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   Zyarlr   abcr   r   Zhelpersr   r   Ztypedefsr   r   r   __all__r'   Z
CookieItemr   r   r%   r%   r%   r+   <module>   s&   4  c