
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    '7`/                     @   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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 d dlmZ ddlmZ ddlmZmZ dd	l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MappingOptionalSetTupleUnioncast)URL   )AbstractCookieJar)is_ip_addressnext_whole_second)LooseCookiesPathLike)	CookieJarDummyCookieJarMorsel[str]c                       sx  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eeeej dd fddZeddddZeddddZddddZddddZedddZddddZ ej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d,d-d.Z*e+e!eej d/d0d1Z,  Z-S )2r   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loop)r   r   r   returnc                   sr   t  j|d tt| _t | _|| _|| _t	 | _
i | _| j| _z| j  W n tk
rl   | j| _Y nX d S Nr   )super__init__r   r   _cookiesset_host_only_cookies_unsafe_quote_cookier   _next_expiration_expirationsMAX_TIME	_max_time	timestampOverflowErrorMAX_32BIT_TIME)selfr   r   r   	__class__ D/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/cookiejar.pyr#   9   s    zCookieJar.__init__)	file_pathr   c              	   C   s8   t |}|jdd}t| j|tj W 5 Q R X d S )Nwbmode)pathlibPathopenpickledumpr$   ZHIGHEST_PROTOCOLr0   r5   fr3   r3   r4   saveP   s    
zCookieJar.savec              	   C   s2   t |}|jdd}t|| _W 5 Q R X d S )Nrbr7   )r9   r:   r;   r<   loadr$   r>   r3   r3   r4   rB   U   s    
zCookieJar.loadr   c                 C   s*   | j   | j  t | _| j  d S N)r$   clearr&   r   r)   r*   r0   r3   r3   r4   rE   Z   s    

zCookieJar.clearIterator[Morsel[str]]c                 c   s*   |    | j D ]}| E d H  qd S rD   )_do_expirationr$   values)r0   valr3   r3   r4   __iter__`   s    zCookieJar.__iter__c                 C   s   t dd | D S )Nc                 s   s   | ]
}d V  qdS )r   Nr3   ).0ir3   r3   r4   	<genexpr>f   s     z$CookieJar.__len__.<locals>.<genexpr>)sumrF   r3   r3   r4   __len__e   s    zCookieJar.__len__c           
      C   s   t j t jj}| j|krd S | js(d S | j}g }| j}| j}| D ]N\\}}}||kr|| 	|d  |
||f | j||f qFt||}qF|D ]
}	||	= qz|jddt jdd | _W n tk
r   | j| _Y nX d S )Nr   )microsecondr   seconds)datetimenowtimezoneutcr)   r*   r,   r$   itemspopappendr&   discardminreplace	timedeltar.   )
r0   rU   Znext_expirationZto_delcookiesZexpirationsdomainnamewhenkeyr3   r3   r4   rH   h   s2    


zCookieJar._do_expiration)rb   r`   ra   r   c                 C   s    t | j|| _|| j||f< d S rD   )r\   r)   r*   )r0   rb   r`   ra   r3   r3   r4   _expire_cookie   s    zCookieJar._expire_cookier_   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k	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k
rl   | j}Y nX | ||| W n tk
r   d|d< Y nX n6|d
 }|r| |}|r| ||| nd|d
< || j| |< q.|   dS )zUpdate cookies.Nr`   . r   path/zmax-agerR   expires)raw_hostr'   r   
isinstancer
   rX   r   r   endswithr&   add
startswith_is_domain_matchri   rfindintrT   rU   rV   rW   r^   r.   r,   rd   
ValueError_parse_dater$   rH   )r0   r_   rf   hostnamera   cookietmpr`   ri   Zmax_ageZdelta_secondsZmax_age_expirationrk   Zexpire_timer3   r3   r4   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}|jdk}| D ]}|j}|d }|s\|j||< q:| j	slt
|rlq:||f| jkr||krq:n| ||sq:| |j|d sq:|r|d rq:td||jt }||j|j|j |||< q:|S )z8Returns this jar's cookies filtered by their attributes.rh   )httpswssr`   ri   Zsecurer   )rH   r   r(   r   r   rl   schemerc   valuer'   r   r&   rq   _is_path_matchri   r   getr   r%   Zcoded_value)	r0   r|   filteredrv   Zis_not_securerw   ra   r`   Zmrsl_valr3   r3   r4   filter_cookies   s6    



zCookieJar.filter_cookies)r`   rv   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.TFNrg   )rn   lenr   )r`   rv   non_matchingr3   r3   r4   rq      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.rj   TFN)rp   rn   r   )r   r   r   r3   r3   r4   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k	st
|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k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   g | ]}t |qS r3   )rs   )rL   sr3   r3   r4   
<listcomp>;  s     z)CookieJar._parse_date.<locals>.<listcomp>F   c   il  E   i  r      iA     ;   r   )DATE_TOKENS_REfinditergroupDATE_HMS_TIME_REmatchgroupsDATE_DAY_OF_MONTH_RErs   DATE_MONTH_RE	lastindexAssertionError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_matchr3   r3   r4   ru   #  sn    

(      zCookieJar._parse_date).__name__
__module____qualname____doc__recompiler   r   r   Ir   r   rT   maxr]   rV   rW   r+   utcfromtimestampr/   boolr   asyncioAbstractEventLoopr#   r   r@   rB   rE   rK   rs   rP   rH   strrd   r   r   ry   r   r   staticmethodrq   r   classmethodru   __classcell__r3   r3   r1   r4   r   "   sR   


N,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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 r    )r"   r#   )r0   r   r1   r3   r4   r#   m  s    zDummyCookieJar.__init__rG   rC   c                 c   s   d S rD   r3   rF   r3   r3   r4   rK   p  s    zDummyCookieJar.__iter__c                 C   s   dS )Nr   r3   rF   r3   r3   r4   rP   t  s    zDummyCookieJar.__len__c                 C   s   d S rD   r3   rF   r3   r3   r4   rE   w  s    zDummyCookieJar.clearre   c                 C   s   d S rD   r3   )r0   r_   rf   r3   r3   r4   ry   z  s    zDummyCookieJar.update_cookiesrz   r{   c                 C   s   t  S rD   )r   )r0   r|   r3   r3   r4   r   }  s    zDummyCookieJar.filter_cookies)r   r   r   r   r   r   r   r#   rK   rs   rP   rE   r   r   ry   r   r   r3   r3   r1   r4   r   f  s    r   )&r   rT   osr9   r<   r   collectionsr   Zhttp.cookiesr   r   r   typingr   r   r   r	   r
   r   r   r   r   r   Zyarlr   abcr   Zhelpersr   r   Ztypedefsr   r   __all__r   Z
CookieItemr   r   r3   r3   r3   r4   <module>   s$   0  F