o
    Z�¿jÕ4  ã                   @   s  d g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 ddl	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 d
dlmZ ddlmZmZ ed eeeef eeeef  f ZeG dd„ dƒƒZ e !dej"¡Z#e !dej"¡Z$G dd „ d eeef ƒZ%dS )ÚCookiesé    N)Úsuppress)Ú	dataclass)ÚCookieÚ	CookieJar)Ú_unquote)ÚOptionalÚUnion)ÚIteratorÚMutableMapping)Úurlparseé   )ÚCurlCffiWarningé   )ÚCookieConflictÚRequestsErrorc                   @   s¸   e Zd ZU eed< eed< dZeed< dZeed< dZeed< dZ	eed	< d
Z
eed< dZeed< edd„ ƒZedd„ ƒZedefdd„ƒZdd„ Zedefdd„ƒZdefdd„ZdS )Ú
CurlMorselÚnameÚvalueÚ ÚhostnameFÚ
subdomainsú/ÚpathÚsecurer   ÚexpiresÚ	http_onlyc                 C   s   | dkS )NÚTRUE© ©Úsr   r   úU/home/dinkstrade/pdmp/venv/lib/python3.10/site-packages/curl_cffi/requests/cookies.pyÚ
parse_bool$   s   zCurlMorsel.parse_boolc                 C   s   | rdS dS )Nr   ÚFALSEr   r   r   r   r!   Ú	dump_bool(   s   zCurlMorsel.dump_boolÚset_cookie_linec              
   C   sr   |  ¡  d¡\}}}}}}}|r|d dkrd}	|dd … }
nd}	|}
| |
|  |¡||  |¡t|ƒ|t|ƒ|	d�S )Nú	r   ú#Té
   F)r   r   r   r   r   r   r   r   )ÚdecodeÚsplitr"   Úintr   )Úclsr%   r   r   r   r   r   r   r   r   Údomainr   r   r!   Úfrom_curl_format,   s0   
øøzCurlMorsel.from_curl_formatc              	   C   sT   | j std| j› d| j› �ƒ‚d | j |  | j¡| j|  | j¡t	| j
ƒ| j| jg¡S )NzDomain not found for cookie ú=r&   )r   r   r   r   Újoinr$   r   r   r   Ústrr   ©Úselfr   r   r!   Úto_curl_formatI   s   

ùÿzCurlMorsel.to_curl_formatÚcookiec              
   C   s2   | |j |jpd|j|j|j|jt|jpdƒdd�S )Nr   r   F)r   r   r   r   r   r   r   r   )r   r   r-   Údomain_specifiedr   r   r+   r   )r,   r5   r   r   r!   Úfrom_cookiejar_cookieX   s   øz CurlMorsel.from_cookiejar_cookieÚreturnc                 C   sâ   t di dd“d| j“d| j“dd “dd“d| j“d	| j“d
t| j d¡ƒ“d| j“dt| jƒ“d| j“d| j	dkr;d n| j	“d| j	dk“dd “dd “dt
| j› d�“dd“ŽS “d| j	dk“dd “dd “dt
| j› d�“dd“ŽS )NÚversionr   r   r   ÚportÚport_specifiedFr-   r6   Údomain_initial_dotÚ.r   Úpath_specifiedr   r   ÚdiscardÚcommentÚcomment_urlÚrest)r   Úrfc2109r   )r   r   r   r   r   ÚboolÚ
startswithr   r   r   Údictr   r2   r   r   r!   Úto_cookiejar_cookiee   s^   ÿþýüûúùø	÷

öõó
òñðïîó
òñðïîzCurlMorsel.to_cookiejar_cookieN)Ú__name__Ú
__module__Ú__qualname__r1   Ú__annotations__r   r   rD   r   r   r   r+   r   Ústaticmethodr"   r$   ÚclassmethodÚbytesr.   r4   r   r7   rG   r   r   r   r!   r      s&   
 

r   z:\d+$z\.\d+$c                   @   sò  e Zd ZdZd;dee ddfdd„Zdefdd„Zd	eddfd
d„Z	de
fdd„Zdee fdd„Zdee fdd„Zdeddfdd„Zdee ddfdd„Z	d<de
de
de
de
ddf
d d!„Z			d=de
d"ee
 dee
 dee
 dee
 f
d#d$„Z	d>dee
 dee
 defd%d&„Z		d>de
dee
 dee
 ddfd'd(„Zd>dee
 dee
 ddfd)d*„Zd;dee ddfd+d,„Zde
de
ddfd-d.„Zde
de
fd/d0„Zde
ddfd1d2„Zdefd3d4„Zdee
 fd5d6„Zde fd7d8„Z!de
fd9d:„Z"dS )?r   z-
    HTTP Cookies, as a mutable mapping.
    NÚcookiesr8   c                 C   s²   |d u s	t |tƒr%tƒ | _t |tƒr!| ¡ D ]\}}|  ||¡ qd S d S t |tƒr=tƒ | _|D ]
\}}|  ||¡ q0d S t |tƒrTtƒ | _|jD ]}| j |¡ qId S || _d S ©N)	Ú
isinstancerF   r   ÚjarÚitemsÚsetÚlistr   Ú
set_cookie)r3   rO   Úkeyr   r5   r   r   r!   Ú__init__ˆ   s$   
þ
ÿ

ÿ
zCookies.__init__c                 C   sB   | j  ¡ }| d¡}|j  ¡ }| dd ¡ t|ƒ|d< ||d< |S )NrR   Ú_cookies_lockÚ	_jar_typeÚ
_jar_state)Ú__dict__ÚcopyÚpopÚtype)r3   ÚstaterR   Ú	jar_stater   r   r!   Ú__getstate__™   s   


zCookies.__getstate__r`   c                 C   sJ   |  d¡}|  d¡}t |¡}|j |¡ t ¡ |_| j |¡ || _d S )NrZ   r[   )	r^   ÚobjectÚ__new__r\   ÚupdateÚ	threadingÚRLockrY   rR   )r3   r`   Újar_typera   rR   r   r   r!   Ú__setstate__¢   s   




zCookies.__setstate__c                 C   s^   t |jƒd }|dkr|j dd¡}t d|d¡}| ¡ }| d¡dkr-t 	|¡s-|d7 }|S )z›
        Almost equivalent to the eff_request_host function in:
            https://github.com/python/cpython/blob/3.11/Lib/http/cookiejar.py#L636
        r   r   ÚHostr=   éÿÿÿÿz.local)
r   ÚurlÚheadersÚgetÚcut_port_reÚsubÚlowerÚfindÚIPV4_REÚsearch)r3   ÚrequestÚhostr   r   r!   Ú_eff_request_host«   s   zCookies._eff_request_hostc                 C   sˆ   | j j ¡  g }z-tt ¡ ƒ | j j_| _| j D ]}t |¡}|j	s(|  
|¡|_	| |¡ qW | j j ¡  n| j j ¡  w | j  ¡  |S )zWthe process is similar to ``cookiejar.add_cookie_header``, but load all
        cookies)rR   rY   Úacquirer+   ÚtimeÚ_policyÚ_nowr   r7   r   rw   ÚappendÚreleaseÚclear_expired_cookies)r3   ru   Úmorselsr5   Úmorselr   r   r!   Úget_cookies_for_curl»   s   

ü
zCookies.get_cookies_for_curlr   c                 C   s,   |D ]}|  ¡ }| j |¡ q| j ¡  d S rP   )rG   rR   rV   r~   )r3   r   r€   r5   r   r   r!   Úupdate_cookies_from_curlÍ   s   z Cookies.update_cookies_from_curlr€   c              	   C   sr   |j g}|jr|j  d¡}|d|› �g}|D ] }ttƒ� | j ||j|j¡ W d   ƒ n1 s1w   Y  qd S )Nr=   )	r   r   Úlstripr   ÚKeyErrorrR   Úclearr   r   )r3   r€   Údomainsr-   r   r   r!   Ú_delete_curl_morselÓ   s   
ÿ€ÿzCookies._delete_curl_morselÚchangesc                 C   sz   |D ]3}|  d¡\}}}|r|dvrtd|›�ƒ‚t |¡}|dkr0|  |¡ | j | ¡ ¡ q|  |¡ q| j ¡  d S )Nó   	)ó   SETs   DELETEzInvalid curl cookie change: rŠ   )	Ú	partitionÚ
ValueErrorr   r.   r‡   rR   rV   rG   r~   )r3   rˆ   ÚchangeÚactionÚ	separatorÚcurl_formatr€   r   r   r!   Ú update_cookies_from_curl_changesÝ   s   

z(Cookies.update_cookies_from_curl_changesr   r   Fr   r   r-   r   c                 C   sü   |  d¡r|du rtjdtdd� d}n|  d¡r1|du s#|s#|dkr1tjd	tdd� d}d
}d}i dd“d|“d|“dd“dd“d|“dt|ƒ“d|  d¡“d|“dt|ƒ“d|“dd“dd“dd“dd“dddi“dd“}td i |¤Ž}| j |¡ dS )!zU
        Set a cookie value by name. May optionally include domain and path.
        z	__Secure-Fz9`secure` changed to True for `__Secure-` prefixed cookiesr   )Ú
stacklevelTz__Host-r   z^`host` changed to True, `domain` removed, `path` changed to `/` for `__Host-` prefixed cookiesr   r9   r   r   r   r:   Nr;   r-   r6   r<   r=   r   r>   r   r   r?   r@   rA   rB   ÚHttpOnlyrC   r   )rE   ÚwarningsÚwarnr   rD   r   rR   rV   )r3   r   r   r-   r   r   Úkwargsr5   r   r   r!   rT   ì   sj   ýüÿþýüûúù
ø	÷
öõôóòñðïzCookies.setÚdefaultc           	      C   s²   d}d}| j D ]I}|j|krP|du s|j|krP|du s |j|krP|durH| |j¡sHt|jƒ |¡sH||jkrHd|› d|› d|j› d�}t|ƒ‚|j}|jpOd}q|du rW|S |S )zŒ
        Get a cookie by name. May optionally include domain and path
        in order to specify exactly which cookie to retrieve.
        Nr   z!Multiple cookies exist with name=z on z and z., add domain parameter to suppress this error.)rR   r   r-   r   Úendswithr1   r   r   )	r3   r   r—   r-   r   r   Úmatched_domainr5   Úmessager   r   r!   rn     s2   


ÿþ
ÿÿÿ
€zCookies.getc                 C   sD   i }| j D ]}|du s|j|kr|du s|j|kr|j||j< q|S )zš
        Cookies with the same name on different domains may overwrite each other,
        do NOT use this function as a method of serialization.
        N)rR   r-   r   r   r   )r3   r-   r   Úretr5   r   r   r!   Úget_dictA  s   
€zCookies.get_dictc                    s\   ˆ durˆdur| j  ˆ ˆˆ¡S ‡ ‡‡fdd„| j D ƒ}|D ]}| j  |j|j|j¡ qdS )z�
        Delete a cookie by name. May optionally include domain and path
        in order to specify exactly which cookie to delete.
        Nc                    s>   g | ]}|j ˆkrˆ d u s|jˆ krˆd u s|jˆkr|‘qS rP   )r   r-   r   ©Ú.0r5   ©r-   r   r   r   r!   Ú
<listcomp>]  s    
üz"Cookies.delete.<locals>.<listcomp>)rR   r…   r-   r   r   )r3   r   r-   r   Úremover5   r   rŸ   r!   ÚdeleteP  s   
þÿzCookies.deletec                 C   sD   g }|dur|  |¡ |dur|dusJ ‚|  |¡ | jj|Ž  dS )z‡
        Delete all cookies. Optionally include a domain and path in
        order to only delete a subset of all the cookies.
        N)r|   rR   r…   )r3   r-   r   Úargsr   r   r!   r…   h  s   

zCookies.clearc                 C   s$   t |ƒ}|jD ]}| j |¡ qd S rP   )r   rR   rV   )r3   rO   r5   r   r   r!   re   u  s   
ÿzCookies.updatec                 C   s   |   ||¡S rP   )rT   ©r3   r   r   r   r   r!   Ú__setitem__z  s   zCookies.__setitem__c                 C   s   |   |¡}|d u rt|ƒ‚|S rP   )rn   r„   r¤   r   r   r!   Ú__getitem__}  s   
zCookies.__getitem__c                 C   s
   |   |¡S rP   )r¢   )r3   r   r   r   r!   Ú__delitem__ƒ  ó   
zCookies.__delitem__c                 C   s
   t | jƒS rP   )ÚlenrR   r2   r   r   r!   Ú__len__†  r¨   zCookies.__len__c                 C   s   dd„ | j D ƒS )Nc                 s   s   � | ]}|j V  qd S rP   )r   r�   r   r   r!   Ú	<genexpr>Š  s   € z#Cookies.__iter__.<locals>.<genexpr>©rR   r2   r   r   r!   Ú__iter__‰  s   zCookies.__iter__c                 C   s   | j D ]} dS dS )NTFr¬   )r3   Ú_r   r   r!   Ú__bool__Œ  s   
zCookies.__bool__c                 C   s"   d  dd„ | jD ƒ¡}d|› d�S )Nz, c              	   S   s*   g | ]}d |j › d|j› d|j› d�‘qS )z<Cookie r/   z for z />)r   r   r-   r�   r   r   r!   r    “  s    ÿÿz$Cookies.__repr__.<locals>.<listcomp>z	<Cookies[z]>)r0   rR   )r3   Úcookies_reprr   r   r!   Ú__repr__‘  s   þÿzCookies.__repr__rP   )r   r   F)NNN)NN)#rH   rI   rJ   Ú__doc__r   ÚCookieTypesrX   rF   rb   ri   r1   rw   rU   r   r�   r‚   r‡   rN   r‘   rT   rn   rœ   r¢   r…   re   r¥   r¦   r§   r+   rª   r
   r­   rD   r¯   r±   r   r   r   r!   r   ƒ   s€    		
ÿÿÿÿÿ
þ1ûþýüû
ú(ÿÿÿ
þüþýü
û )&Ú__all__Úrerf   ry   r”   Ú
contextlibr   Údataclassesr   Úhttp.cookiejarr   r   Úhttp.cookiesr   Útypingr   r	   Úcollections.abcr
   r   Úurllib.parser   Úutilsr   Úerrorsr   r   rF   r1   rU   Útupler³   r   ÚcompileÚASCIIro   rs   r   r   r   r   r!   Ú<module>   s(   $e