o
    `g3D                     @   s4  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
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$ dd	l%m&Z&m'Z'm(Z( d
Z)ee*df Z+dj,Z-dj,Z.dZ/G dd de!Z0G dd de!Z1dS )    N)defaultdict)
BaseCookieMorselSimpleCookie)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}d   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e.e)e)e)f  ddfd)d*Z/d+e0de)d,e)d-e)ddf
d.d/Z1e2 fd0e3d1e2ddfd2d3Z4e2 fd4e2dd5fd6d7Z5e6de)d8e)defd9d:Z7e8d;e)de e fd<d=Z9  Z:S )Ar   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t| _t | _|| _	|| _
|d u r"g }nt|tr-| g}nt|tr:t| g}ndd |D }|| _g | _i | _d S )Nr&   c                 S   s*   g | ]}t |trt| n| qS  )
isinstancestrr   origin).0urlr)   r)   L/var/www/html/propose/venv/lib/python3.10/site-packages/aiohttp/cookiejar.py
<listcomp>p   s    z&CookieJar.__init__.<locals>.<listcomp>)super__init__r   r   _cookiesdict_morsel_cacheset_host_only_cookies_unsafe_quote_cookier*   r   r,   r+   _treat_as_secure_origin_expire_heap_expirations)selfr#   r$   r%   r&   	__class__r)   r/   r2   W   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/   savex   s   
"zCookieJar.savec                 C   sH   t |}|jdd}t|| _W d    d S 1 sw   Y  d S )NrbrB   )rD   rE   rF   rG   loadr3   rJ   r)   r)   r/   rN   }   s   
"zCookieJar.load	predicatec                    sz   d u rj   j  j  j  j  d S t  fddj D }|r;| d S d S )Nc                    sT   g | ]&\\}}}|  D ]\}}|||f  jv r!j  ks%|r qqS r)   )itemsr<   )r-   domainpathcookienamemorselkeynowrO   r=   r)   r/   r0      s    
z#CookieJar.clear.<locals>.<listcomp>)	r;   clearr3   r5   r7   r<   timerP   _delete_cookies)r=   rO   to_delr)   rV   r/   rY      s   





zCookieJar.clearrQ   c                    s     fdd d S )Nc                    s     | d S )NrQ   )_is_domain_match)xrQ   r=   r)   r/   <lambda>   s    z(CookieJar.clear_domain.<locals>.<lambda>)rY   r=   rQ   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_expirationr3   values)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 rd   )lenrf   )r-   rS   r)   r)   r/   	<genexpr>   s    z$CookieJar.__len__.<locals>.<genexpr>)sumr3   rf   r=   r)   r)   r/   __len__   s   zCookieJar.__len__c                    s   t  j }s	dS |tkr'|t  jd kr' fdd jD  _t j t }g } jrR jd \}}||kr<nt j  j||krO|	|  js0|r[ 
| dS dS )zRemove expired cookies.N   c                    s(   g | ]} j |d  |d kr|qS )r   r   )r<   get)r-   entryrl   r)   r/   r0      s
    z,CookieJar._do_expiration.<locals>.<listcomp>r   )ri   r;    _MIN_SCHEDULED_COOKIE_EXPIRATIONr<   heapqheapifyrZ   heappopro   appendr[   )r=   expire_heap_lenrX   r\   when
cookie_keyr)   rl   r/   re      s*   

zCookieJar._do_expirationr\   c                 C   sd   |D ]-\}}}| j ||f | j||f |d  | j||f |d  | j|||fd  qd S rd   )r7   discardr3   popr5   r<   )r=   r\   rQ   rR   rT   r)   r)   r/   r[      s   zCookieJar._delete_cookiesrw   rR   rT   c                 C   s>   |||f}| j ||krd S t| j||f || j |< d S rd   )r<   ro   rr   heappushr;   )r=   rw   rQ   rR   rT   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 }|r<|d dkr<d}|d= |sP|durP| j	||f | }|d< |rb|d dkrb|dd }||d< |rk| 
||skq|d }|rw|d d	kr|j}|d	sd	}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< ||f}| j| ||kr|| j| |< | j| |d q|   dS )zUpdate cookies.NrQ   r"   . r   r   rR   /zmax-ageexpires)raw_hostr8   r   r*   r   rP   r   r   r7   addr]   rR   
startswithrfindrstripintminrZ   MAX_TIMEr|   
ValueError_parse_dater3   ro   r5   rz   re   )r=   r}   r~   hostnamerT   rS   tmprQ   rR   max_agedelta_secondsmax_age_expirationr   expire_timerW   r)   r)   r/   update_cookies   s`   



zCookieJar.update_cookiesrequest_urlBaseCookie[str]c                 C   s  | j rt nt }| js|S |   | js|S t|tur.tjdt| t	dd t|}|j
p2d}|jdv}|r^| jr^t }tt | }W d   n1 sTw   Y  || jv}| jd  D ]}|j||j< qet|r{| jsw|S |f}ntt|dt}t|jd	t}t||}	t|j}
|	D ]_}| j|  D ]U\}}|d
 }||f| j v r||krqt|d |
krq|r|d rq|| j!| v r| j!| | ||< qt"d|#|jt$ }|%|j|j|j& || j!| |< |||< qq|S )z8Returns this jar's cookies filtered by their attributes.zQfilter_cookies expects yarl.URL instances only,and will stop working in 4.x, got rn   )
stacklevelr   )httpswssN)r   r   r   r   rQ   rR   securer   )'r9   r   r   r3   re   typer   warningswarnDeprecationWarningr   schemer:   
contextlibsuppressr   r,   rf   valuerW   r   r8   	itertools
accumulatereversedsplit_FORMAT_DOMAIN_REVERSEDrR   _FORMAT_PATHproductri   rP   r7   r5   r   ro   r   r6   coded_value)r=   r   filteredr   is_not_securerequest_origincdomainspathspairspath_lenprT   rS   rQ   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.TFNr   )endswithri   r   )rQ   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 rd   )r   )r-   sr)   r)   r/   rj     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     sd   

 zCookieJar._parse_daterd   r'   rc   )r'   N);__name__
__module____qualname____doc__recompiler   r   r   Ir   r   r   datetimemaxreplacetimezoneutc	timestampr   r   r   rZ   gmtimeOSErrorr   OverflowErrorSUB_MAX_TIMEboolr   r   r
   r   asyncioAbstractEventLoopr2   r   rL   rN   r   rY   r+   rb   rh   rm   re   r   r[   floatr|   r   r   r   r   staticmethodr]   classmethodr   __classcell__r)   r)   r>   r/   r   2   sh    


!

 +JN 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     s   zDummyCookieJar.__init__rc   c                 c   s    d S rd   r)   rl   r)   r)   r/   rh     s   zDummyCookieJar.__iter__c                 C   s   dS )Nr   r)   rl   r)   r)   r/   rm        zDummyCookieJar.__len__rO   c                 C      d S rd   r)   )r=   rO   r)   r)   r/   rY     r   zDummyCookieJar.clearrQ   c                 C   r   rd   r)   ra   r)   r)   r/   rb     r   zDummyCookieJar.clear_domainr}   r~   c                 C   r   rd   r)   )r=   r}   r~   r)   r)   r/   r     r   zDummyCookieJar.update_cookiesr   r   c                 C   s   t  S rd   )r   )r=   r   r)   r)   r/   r     s   zDummyCookieJar.filter_cookiesr   rd   )r   r   r   r   r   r   r   r2   rh   r   rm   r   rY   r+   rb   r   r   r   r   r   r)   r)   r>   r/   r     s    "
r   )2r   r   r   r   rr   r   osrD   rG   r   rZ   r   collectionsr   http.cookiesr   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   yarlr   abcr   r   helpersr   typedefsr   r   r   __all__r+   
CookieItemformatr   r   rq   r   r   r)   r)   r)   r/   <module>   s:    4   