o
    Rh8                     @   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	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+dj,Z-dj,Z.G dd de!Z/G dd de!Z0d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]z{}/{}z{1}.{0}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,d=d&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Z5e6d8e)de e fd9d:Z7  Z8S )>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}))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).0urlr)   r)   S/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/aiohttp/cookiejar.py
<listcomp>g   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/   r2   Q   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dumpr3   HIGHEST_PROTOCOLr<   r?   fr)   r)   r/   saveo   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   loadr3   rI   r)   r)   r/   rM   t   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   r9   r:   r3   clearr5   r;   itemsappenddiscardpopminvaluesSUB_MAX_TIMEMAX_TIME)
r<   rN   to_delnowdomainpathcookienamemorselkeyr)   r)   r/   rO   y   s8   






zCookieJar.clearrZ   c                    s     fdd d S )Nc                    s     | d S )NrZ   )_is_domain_matchxrZ   r<   r)   r/   <lambda>   s    z(CookieJar.clear_domain.<locals>.<lambda>rO   r<   rZ   r)   rc   r/   clear_domain   s   zCookieJar.clear_domainIterator[Morsel[str]]c                 c   s,    |    | j D ]	}| E d H  q
d S N)_do_expirationr3   rU   )r<   valr)   r)   r/   __iter__   s
   zCookieJar.__iter__c                 C   s   t dd | j D S )zReturn number of cookies.

        This function does not iterate self to avoid unnecessary expiration
        checks.
        c                 s   s    | ]	}t | V  qd S ri   )lenrU   )r-   r\   r)   r)   r/   	<genexpr>   s    z$CookieJar.__len__.<locals>.<genexpr>)sumr3   rU   r<   r)   r)   r/   __len__   s   zCookieJar.__len__c                 C   s   |  dd  d S )Nc                 S      dS )NFr)   ra   r)   r)   r/   rd      s    z*CookieJar._do_expiration.<locals>.<lambda>re   rp   r)   r)   r/   rj         zCookieJar._do_expirationwhenr[   r]   c                 C   s"   t | j|| _|| j|||f< d S ri   )rT   r:   r;   )r<   rt   rZ   r[   r]   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}|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.NrZ   . r   r[   /zmax-ageexpires)raw_hostr6   r   r*   r   rP   r   r   endswithr5   add
startswithr`   r[   rfindrstripintrT   r9   rW   ru   
ValueError_parse_dater3   rj   )r<   rv   rw   hostnamer]   r\   tmprZ   r[   max_agedelta_secondsmax_age_expirationr{   expire_timer)   r)   r/   update_cookies   s^   






zCookieJar.update_cookiesrequest_urlBaseCookie[str]c                    s   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} jd  D ]}|j||j< qRt|rh jsd|S |f}ntt|dt}t|jdt}t||}	tj fdd|	D }
t|j}|
D ]>}|j}|d	 }||f jv r||krqt|d
 |krq|r|d rqtd||jt  }|!|j|j|j" |||< q|S )z8Returns this jar's cookies filtered by their attributes.ry   )httpswssN)ry   ry   rx   rz   c                 3   s    | ]
} j |  V  qd S ri   )r3   rU   )r-   prp   r)   r/   rn   "  s    
z+CookieJar.filter_cookies.<locals>.<genexpr>rZ   r[   securer   )#r7   r   r   r3   rj   r   r|   schemer8   
contextlibsuppressr   r,   rU   valuer_   r   r6   	itertools
accumulatereversedsplit_FORMAT_DOMAIN_REVERSEDr[   _FORMAT_PATHproductchainfrom_iterablerm   r5   r   getr   r4   coded_value)r<   r   filteredr   is_not_securerequest_origincdomainspathspairsrv   path_lenr\   r]   rZ   mrsl_valr)   rp   r/   filter_cookies   sZ   






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.TFNrx   )r}   rm   r   )rZ   r   non_matchingr)   r)   r/   r`   =  s   


zCookieJar._is_domain_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 ri   )r   )r-   sr)   r)   r/   rn   e  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   
found_time	found_dayfound_month
found_yearhourminuteseconddaymonthyeartoken_matchr   
time_match	day_matchmonth_match
year_matchr)   r)   r/   r   M  sd   

 zCookieJar._parse_dateri   r'   rh   )r'   N)9__name__
__module____qualname____doc__recompiler   r   r   Ir   r   r   datetimemaxreplacetimezoneutc	timestamprW   r   r   r9   gmtimeOSErrorr   OverflowErrorrV   boolr   r   r   r   asyncioAbstractEventLoopr2   r   rK   rM   r   rO   r+   rg   rl   rq   rj   floatru   r   r   r   r   staticmethodr`   classmethodr   __classcell__r)   r)   r=   r/   r   ,   sf    




IE 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(   )r1   r2   )r<   r&   r=   r)   r/   r2     rs   zDummyCookieJar.__init__rh   c                 c   s    d S ri   r)   rp   r)   r)   r/   rl     s   zDummyCookieJar.__iter__c                 C   rr   )Nr   r)   rp   r)   r)   r/   rq        zDummyCookieJar.__len__rN   c                 C      d S ri   r)   )r<   rN   r)   r)   r/   rO     r   zDummyCookieJar.clearrZ   c                 C   r   ri   r)   rf   r)   r)   r/   rg     r   zDummyCookieJar.clear_domainrv   rw   c                 C   r   ri   r)   )r<   rv   rw   r)   r)   r/   r     r   zDummyCookieJar.update_cookiesr   r   c                 C   s   t  S ri   )r   )r<   r   r)   r)   r/   r     s   zDummyCookieJar.filter_cookiesr   ri   )r   r   r   r   r   r   r   r2   rl   r   rq   r   rO   r+   rg   r   r   r   r   r   r)   r)   r=   r/   r     s    "
r   )1r   r   r   r   r   osrC   rF   r   r9   collectionsr   http.cookiesr   r   r   mathr   typingr   r   r	   r
   r   r   r   r   r   r   r   yarlr   abcr   r   helpersr   typedefsr   r   r   __all__r+   
CookieItemformatr   r   r   r   r)   r)   r)   r/   <module>   s4    4  d