o
    ߥi6M                     @   s^  U 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
mZ ddlmZ ddlmZmZmZmZ ddlmZ g dZed	Zed
ZedZG dd dejZG dd deZG dd dZG dd dZejej  d Z!ee" e#d< e$de%e! j&Z'i dd e(e)de(e*e+e!d  D e+dde+ddiZ,eej-e.e"f  e#d< G d d! d!Z/G d"d# d#Z0G d$d% d%ej1eef ej2eef Z3G d&d' d'ej1eef e3eef ej4eef Z5G d(d) d)e3e"e"f Z6G d*d+ d+ej2e"e"f Z7G d,d- d-e7ej4e"e"f Z8G d.d/ d/Z9G d0d1 d1e3e"ej:e"e9f f Z;dS )2    N)SpooledTemporaryFile)SplitResult	parse_qsl	urlencodeurlsplit   )run_in_threadpool)EnvironFinalLiteralScope)parse_header)Address	MediaTypeContentTypeCookieURLMultiMappingMutableMultiMappingQueryParamsHeadersMutableHeaders
UploadFileFormDataTKTVTc                   @   s*   e Zd ZU eje ed< eje ed< dS )r   hostportN)__name__
__module____qualname__typingOptionalstr__annotations__int r'   r'   H/home/ubuntu/.local/lib/python3.10/site-packages/baize/datastructures.pyr   "   s   
 r   c                       s&   e Zd Zd fddZdd Z  ZS )defaultdictreturnNc                    s   || _ t j|i | d S N)default_factorysuper__init__)selfr,   argskwargs	__class__r'   r(   r.   (   s   zdefaultdict.__init__c                 C   s
   |  |S r+   )r,   r/   keyr'   r'   r(   __missing__,      
zdefaultdict.__missing__r*   N)r   r    r!   r.   r6   __classcell__r'   r'   r2   r(   r)   '   s    r)   c                   @   sb   e Zd ZdZdeddfddZdefddZdefd	d
Zede	fddZ
dede	fddZdS )r   )	main_typesub_typeoptionsmedia_type_raw_liner*   Nc                 C   s&   t |\}| _|d\| _}| _d S )N/)r   r<   	partitionr:   r;   )r/   r=   	full_type_r'   r'   r(   r.   3   s   zMediaType.__init__c                 C   s6   | j | jrd| j nd ddd | j D  S )Nr>    c                 s   $    | ]\}}d | d| V  qdS ; =Nr'   .0kvr'   r'   r(   	<genexpr>;      " z$MediaType.__str__.<locals>.<genexpr>)r:   r;   joinr<   itemsr/   r'   r'   r(   __str__7   s   zMediaType.__str__c                 C      d| j j d|  dS N<: >r3   r!   rO   r'   r'   r(   __repr__>      zMediaType.__repr__c                 C   s   | j dko	| jdkS )N*)r:   r;   rO   r'   r'   r(   is_all_typesA   s   zMediaType.is_all_typesotherc                 C   s.   | j rdS t|}| j|jko| jd|jhv S )NTrY   )rZ   r   r:   r;   )r/   r[   other_media_typer'   r'   r(   matchE   s   zMediaType.match)r   r    r!   	__slots__r$   r.   rP   rW   propertyboolrZ   r]   r'   r'   r'   r(   r   0   s    r   c                   @   sR   e Zd ZdZdeddfddZdefddZdefd	d
Zdej	de
fddZdS )r   )typer<   content_type_raw_liner*   Nc                 C   s   t |\| _| _d S r+   )r   ra   r<   )r/   rb   r'   r'   r(   r.   Q      zContentType.__init__c                 C   rQ   rR   rV   rO   r'   r'   r(   rW   T   rX   zContentType.__repr__c                 C   s    | j ddd | j D  S )NrB   c                 s   rC   rD   r'   rG   r'   r'   r(   rK   X   rL   z&ContentType.__str__.<locals>.<genexpr>)ra   rM   r<   rN   rO   r'   r'   r(   rP   W   s    zContentType.__str__r[   c                 C   s   t |tstS | j|kS r+   )
isinstancer$   NotImplementedra   r/   r[   r'   r'   r(   __eq__Z   s   

zContentType.__eq__)r   r    r!   r^   r$   r.   rW   rP   r"   Anyr`   rg   r'   r'   r'   r(   r   N   s    r   z!#$%&'*+-.^_`|~:_cookie_legal_charsz[%s]+c                 C   s   i | ]}|d | qS )z\%03or'   )rH   nr'   r'   r(   
<dictcomp>e   s    rk      z ()/<=>?@[]{}"z\"\z\\_cookie_translatorc                   @   s   e Zd Z							ddededejej deje d	eje d
ededede	d fddZ
dedefddZdefddZdefddZdedefddZdefddZdS )r   NFlaxnamevalueexpiresdomainpathhttponlysecuremax_agesamesite)strictrq   nonec
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S r+   )	rr   rs   rt   ru   rv   rw   rx   ry   rz   )
r/   rr   rs   rt   ru   rv   rw   rx   ry   rz   r'   r'   r(   r.   o   s   
zCookie.__init__r*   c                 C   s   t |r|S d|t d S )z
        Quote a string for use in a cookie header.

        If the string does not need to be double-quoted, then just return the
        string.  Otherwise, surround the string in doublequotes and quote
        (with a \) special characters.
        rm   )_cookie_is_legal_key	translatero   )r/   rs   r'   r'   r(   _quote   s   zCookie._quotec                 C   s   g }| | | j d| | j  | jr"| d| jd  | jdkr0| d| j  | jr<| d| j  | jrH| d| j  | j	rP| d | j
sX| jd	v r]| d
 | d| j  d|S )NrF   zexpires=z%a, %d %b %Y %H:%M:%S GMTrp   zmax-age=zdomain=zpath=rw   )r{   r|   rx   z	samesite=rE   )appendr   rr   rs   rt   strftimery   ru   rv   rw   rx   rz   rM   )r/   partsr'   r'   r(   rP      s$   $



zCookie.__str__c                 C   s   t | dS )Nascii)r$   encoderO   r'   r'   r(   	__bytes__      zCookie.__bytes__r[   c                 C   sJ   t |trt| |kS t |trt| |kS t |tr#t| t|kS tS r+   )rd   r$   bytesr   re   rf   r'   r'   r(   rg      s   


zCookie.__eq__c                 C   s   d| j  d| j dS )Nz<Cookie rT   rU   )rr   rs   rO   r'   r'   r(   rW      rX   zCookie.__repr__)NNNFFrp   rq   )r   r    r!   r$   r"   r#   datetimer`   r&   r   r.   r   rP   r   r   objectrg   rW   r'   r'   r'   r(   r   n   s@    
	

	r   c                   @   s  e Zd ZdZ	d9ddddedeje deje dej	d	df
d
dZ
			d:dedededejejeeje f  deje d	efddZed	efddZed	efddZed	efddZed	efddZed	efddZed	efddZed	eje fd d!Zed	eje fd"d#Zed	eje fd$d%Zed	eje fd&d'Zd(ej	d	d fd)d*Zd(ej	d	d fd+d,Zd(ej	d	d fd-d.Zd/ed	d fd0d1Zd2ej	d	efd3d4Z d	efd5d6Z!d	efd7d8Z"dS );r   )_url_componentsrB   N)scopeenvironurlr   r   
componentsr*   c                K   s8  |r|rJ dt djdi |j }n||d urV|dd}|dd }|dd|d  }|dd	}d }	|d
 D ]\}
}|
dkrK|d}	 nq<| |||||	}n<|d ur|d }|d t|d f}|dd|dd dd}|ddd}|dd }	| |||||	}|| _	t
|| _d S )Nz)Cannot set both "url" and "**components".rB   schemehttpserver	root_pathrv   query_string    headerss   hostlatin-1zwsgi.url_schemeSERVER_NAMESERVER_PORTSCRIPT_NAME	PATH_INFOlatin1utf8QUERY_STRING	HTTP_HOSTr'   )r   replacer   geturlgetdecode
_build_urlr&   r   r   r   r   )r/   r   r   r   r   r   r   rv   r   host_headerr5   rs   r'   r'   r(   r.      s6   
zURL.__init__r   r   rv   r   r   r   c           
      C   s   |d ur| d| | }n2|d u r|}n+|\}}ddddd| }	||	ks*|d u r4| d| | }n| d| d| | }|rK| d|   }|S )Nz://P   i  )r   httpswswss:?)r   )
r/   r   rv   r   r   r   r   r   r   default_portr'   r'   r(   r      s   zURL._build_urlc                 C      | j S r+   )r   rO   r'   r'   r(   r      s   zURL.componentsc                 C      | j jS r+   )r   r   rO   r'   r'   r(   r        z
URL.schemec                 C   r   r+   )r   netlocrO   r'   r'   r(   r     r   z
URL.netlocc                 C   r   r+   )r   rv   rO   r'   r'   r(   rv     r   zURL.pathc                 C   r   r+   )r   queryrO   r'   r'   r(   r     r   z	URL.queryc                 C   r   r+   )r   fragmentrO   r'   r'   r(   r     r   zURL.fragmentc                 C   r   r+   )r   usernamerO   r'   r'   r(   r     r   zURL.usernamec                 C   r   r+   )r   passwordrO   r'   r'   r(   r     r   zURL.passwordc                 C   r   r+   )r   hostnamerO   r'   r'   r(   r      r   zURL.hostnamec                 C   r   r+   )r   r   rO   r'   r'   r(   r   $  r   zURL.portr1   c           
      K   s  d|v sd|v sd|v sd|v rq| dd }| d| j}| d| j}| d| j}|d u rH| j}|d\}}}|d dkrH|dd	d
 }|}|d urU|d| 7 }|d urm|}|d urf|d| 7 }| d| }||d< | jjdi |}	| 	|	
 S )Nr   r   r   r   @rp   ]r   r   r   r   r'   )popr   r   r   r   
rpartitionrsplitr   _replacer3   r   )
r/   r1   r   r   r   r   r   rA   userpassr   r'   r'   r(   r   (  s0   zURL.replacec                 K   sB   t t| jdd}|dd | D  t| }| j|dS )NTkeep_blank_valuesc                 S   s   i | ]	\}}|t |qS r'   r$   rH   r5   rs   r'   r'   r(   rk   M  s    z,URL.include_query_params.<locals>.<dictcomp>r   )r   r   r   updaterN   r   multi_itemsr   )r/   r1   paramsr   r'   r'   r(   include_query_paramsI  s   zURL.include_query_paramsc                 K   s"   t dd | D }| j|dS )Nc                 S   s   g | ]
\}}|t |fqS r'   r   r   r'   r'   r(   
<listcomp>R      z,URL.replace_query_params.<locals>.<listcomp>r   )r   rN   r   )r/   r1   r   r'   r'   r(   replace_query_paramsQ  s   zURL.replace_query_paramskeysc                    s<   t t| jdd  fdd|D  t  }| j|dS )NTr   c                    s   g | ]}  |d qS r+   )r   )rH   r5   r   r'   r(   r   Y  s    z+URL.remove_query_params.<locals>.<listcomp>r   )r   r   r   r   r   r   )r/   r   r   r'   r   r(   remove_query_paramsU  s   zURL.remove_query_paramsr[   c                 C   s   t | t |kS r+   r   rf   r'   r'   r(   rg   ]     z
URL.__eq__c                 C   r   r+   )r   rO   r'   r'   r(   rP   `  s   zURL.__str__c                 C   s6   t | }| jrt | jdd}| jj dt| dS )Nz********)r   ())r$   r   r   r3   r   repr)r/   r   r'   r'   r(   rW   c  s   zURL.__repr__)rB   )r   NN)#r   r    r!   r^   r$   r"   r#   r   r	   rh   r.   r   Tupler&   r   r_   r   r   r   r   rv   r   r   r   r   r   r   r   r   r   r   r`   rg   rP   rW   r'   r'   r'   r(   r      sx    
*
!r   c                	   @   s   e Zd ZdZ	ddejejejee	f ej
ejee	f  f  ddfddZdede	fdd	Zdeje fd
dZdefddZdedeje	 fddZdejejee	f  fddZdejdefddZdefddZdS )r   _dict_listNrawr*   c                 C   s   |d u rg }n5t |trttjtjttf  t|	 }nt |tj
r8ttjtjttf  t| }nt|}t|| _|| _d S r+   )rd   r   r"   castListr   r   r   listr   MappingrN   dictr   r   )r/   r   _itemsr'   r'   r(   r.   m  s   

&

zMultiMapping.__init__r5   c                 C   s
   | j | S r+   r   r4   r'   r'   r(   __getitem__  r7   zMultiMapping.__getitem__c                 C   
   t | jS r+   )iterr   rO   r'   r'   r(   __iter__  r7   zMultiMapping.__iter__c                 C   r   r+   )lenr   rO   r'   r'   r(   __len__  r7   zMultiMapping.__len__c                    s    fdd| j D S )Nc                       g | ]
\}}| kr|qS r'   r'   )rH   item_key
item_valuer5   r'   r(   r     r   z(MultiMapping.getlist.<locals>.<listcomp>)r   r4   r'   r   r(   getlist  rc   zMultiMapping.getlistc                 C   r   r+   )r   r   rO   r'   r'   r(   r     r7   zMultiMapping.multi_itemsr[   c                 C   s"   t |t| ot| jt|jkS r+   )rd   ra   sortedr   rf   r'   r'   r(   rg     s   zMultiMapping.__eq__c                 C   s    | j j}|  }| d|dS Nr   r   )r3   r   r   )r/   
class_namerN   r'   r'   r(   rW        zMultiMapping.__repr__r+   )r   r    r!   r^   r"   r#   Unionr   r   r   Iterabler   r.   r   Iteratorr   r&   r   r   r   r   rh   r`   rg   r$   rW   r'   r'   r'   r(   r   j  s*    	
r   c                   @   s   e Zd ZejZdededdfddZdeddfddZded	e	j
e ddfd
dZdede	je fddZdededdfddZdS )r   r5   rs   r*   Nc                    sv   t  fddt| jD }|r,|d }t|D ]}||kr& |f| j|< q| j|= qn| j |f || j < d S )Nc                 3   s$    | ]\}}|d   kr|V  qdS )r   Nr'   )rH   indexkvr   r'   r(   rK     rL   z2MutableMultiMapping.__setitem__.<locals>.<genexpr>r   )tuple	enumerater   reversedr   r   )r/   r5   rs   indexesfrist_indexr   r'   r   r(   __setitem__  s   
zMutableMultiMapping.__setitem__c                    s>   | j d d  }| j   | j  fdd|D  | j = d S )Nc                 3   $    | ]\}}| kr||fV  qd S r+   r'   rG   r   r'   r(   rK     rL   z2MutableMultiMapping.__delitem__.<locals>.<genexpr>)r   clearextendr   )r/   r5   r   r'   r   r(   __delitem__  s   
zMutableMultiMapping.__delitem__valuesc                    sX   |r!g  fdd| j D  fdd|D | _ |d | j < d S  | v r*|  = d S d S )Nc                 3   r   r+   r'   rG   r   r'   r(   rK     rL   z.MutableMultiMapping.setlist.<locals>.<genexpr>c                 3   s    | ]} |fV  qd S r+   r'   )rH   rs   r   r'   r(   rK     s    rp   )r   r   r/   r5   r   r'   r   r(   setlist  s   
zMutableMultiMapping.setlistc                    s6    fdd| j D }z|  = W |S  ty   Y |S w )Nc                    r   r'   r'   rG   r   r'   r(   r     r   z/MutableMultiMapping.poplist.<locals>.<listcomp>)r   KeyErrorr   r'   r   r(   poplist  s   zMutableMultiMapping.poplistc                 C   s   | j ||f || j|< d S r+   )r   r   r   r/   r5   rs   r'   r'   r(   r     s   zMutableMultiMapping.append)r   r    r!   r   r^   r   r   r   r   r"   Sequencer   r   r   r   r'   r'   r'   r(   r     s    
r   c                
       s~   e Zd ZdZdZ	ddejejdeje	e	f ej
eje	e	f  e	ef  ddf fddZde	fd	d
Zde	fddZ  ZS )r   z+
    An immutable MutableMultiMapping.
    r   Nr   zMultiMapping[str, str]r*   c                    sZ   t |trt t|dd d S t |tr%t t|ddd d S t | d S )NTr   r   )rd   r$   r-   r.   r   r   r   )r/   r   r2   r'   r(   r.     s
   

zQueryParams.__init__c                 C   r   r+   )r   r   rO   r'   r'   r(   rP     r7   zQueryParams.__str__c                 C   s    | j j}t| }| d|dS r   )r3   r   r$   )r/   r   r   r'   r'   r(   rW     r   zQueryParams.__repr__r+   )r   r    r!   __doc__r^   r"   r#   r   r   r$   r   r   r   r.   rP   rW   r9   r'   r'   r2   r(   r     s(    r   c                	   @   s   e Zd ZdZ	ddejejejeef ej	ej
eef  f  ddfddZdedefdd	Zdeje fd
dZdefddZdS )r   r   Nr   r*   c                 C   s   i }t |tjrttjtjttf  | }n	|d u r d}n|}|D ]\}}| }||v r<||  d| ||< q$|||< q$|| _	d S )Nr'   , )
rd   r"   r   r   r   r   r$   rN   lowerr   )r/   r   storerN   r5   rs   r'   r'   r(   r.     s   	

zHeaders.__init__r5   c                 C   s   | j |  S r+   r   r  r4   r'   r'   r(   r     r   zHeaders.__getitem__c                 C   
   | j  S r+   )r   r   rO   r'   r'   r(   r     r7   zHeaders.__iter__c                 C   r  r+   )r   r   rO   r'   r'   r(   r     r7   zHeaders.__len__r+   )r   r    r!   r^   r"   r#   r   r   r$   r   r   r.   r   r   r   r&   r   r'   r'   r'   r(   r     s"    	
r   c                   @   sP   e Zd ZejZdededdfddZdeddfddZdededdfd	d
ZdS )r   r5   rs   r*   Nc                 C   sR   d|v sd|v sd|v rt dd|v sd|v sd|v r t d|| j| < d S )N
 z1Header names must not contain control characters.z2Header values must not contain control characters.)
ValueErrorr   r  r   r'   r'   r(   r     s
   zMutableHeaders.__setitem__c                 C   s   | j | = d S r+   r  r4   r'   r'   r(   r   $  r   zMutableHeaders.__delitem__c                 C   s.   || v r| |  d| | |< d S || |< d S )Nr  r'   r   r'   r'   r(   r   '  s   zMutableHeaders.append)	r   r    r!   r   r^   r$   r   r   r   r'   r'   r'   r(   r     s
    r   c                   @   s   e Zd ZdZdZdZdededdfdd	Ze	de
fd
dZdeddfddZdeddfddZd%dedefddZd%dedefddZdeddfddZdeddfddZd&ddZd&ddZd eddfd!d"Zd eddfd#d$ZdS )'r   z@
    An uploaded file included as part of the request data.
    )filenamer   content_typefile   r  r   r*   Nc                 C   s.   || _ || _|dd| _t| jdd| _d S )Nzcontent-typerB   zw+b)max_sizemode)r  r   r   r  r   spool_max_sizer  )r/   r  r   r'   r'   r(   r.   7  s   zUploadFile.__init__c                 C   s   t | jdd}| S )N_rolledT)getattrr  )r/   rolled_to_diskr'   r'   r(   	in_memory=  s   zUploadFile.in_memorydatac                 C      | j | d S r+   )r  writer/   r  r'   r'   r(   r  B  r   zUploadFile.writec                    ,   | j r| | d S t| j|I d H  d S r+   )r  r  r   r  r'   r'   r(   awriteE     zUploadFile.awriterp   sizec                 C   s   | j |S r+   )r  readr/   r  r'   r'   r(   r  K  s   zUploadFile.readc                    s$   | j r	| |S t| j|I d H S r+   )r  r  r   r  r'   r'   r(   areadN  s   
zUploadFile.areadoffsetc                 C   r  r+   )r  seekr/   r!  r'   r'   r(   r"  S  r   zUploadFile.seekc                    r  r+   )r  r"  r   r#  r'   r'   r(   aseekV  r  zUploadFile.aseekc                 C   s   | j   d S r+   )r  closerO   r'   r'   r(   r%  \  r   zUploadFile.closec                    s(   | j r
|   d S t| jI d H  d S r+   )r  r%  r   rO   r'   r'   r(   aclose_  s   zUploadFile.aclosefilepathc              	   C   s   t jdkrdnd}| j }| jdd z;t|d}| jj}|j}	 ||}|s+n|| q$W d   n1 s:w   Y  W | j| dS W | j| dS | j| w )z$
        Save file to disk.
        ntr  i   r   zwb+TN)osrr   r  tellr"  openr  r  )r/   r'  copy_bufsizefile_positiontarget_filesource_readtarget_writebufr'   r'   r(   savee  s$   
		zUploadFile.savec                    s   t | j|I dH  dS )z<
        Save file to disk, work in threading pool.
        N)r   r2  )r/   r'  r'   r'   r(   asavey  s   zUploadFile.asave)rp   r8   )r   r    r!   r  r^   r  r$   r   r.   r_   r`   r  r   r  r  r&   r  r   r"  r$  r%  r&  r2  r3  r'   r'   r'   r(   r   .  s"    

r   c                   @   s*   e Zd ZdZejZdddZdddZdS )	r   zQ
    An immutable MultiMapping, containing both file uploads and text input.
    r*   Nc                 C   s(   |   D ]\}}t|tr|  qd S r+   )r   rd   r   r%  r   r'   r'   r(   r%    s
   
zFormData.closec                    s0   |   D ]\}}t|tr| I d H  qd S r+   )r   rd   r   r&  r   r'   r'   r(   r&    s   
zFormData.acloser8   )r   r    r!   r  r   r^   r%  r&  r'   r'   r'   r(   r     s
    
r   )<r   r)  restringr"   tempfiler   urllib.parser   r   r   r   concurrencyr   r	   r
   r   r   utilsr   __all__TypeVarr   r   r   
NamedTupler   r   r)   r   r   ascii_lettersdigitsri   r$   r%   compileescape	fullmatchr}   setrangemapordro   Dictr&   r   r   Genericr   r   MutableMappingr   r   r   r   r   r   r   r'   r'   r'   r(   <module>   sR   
 


	
P &-
5"/#)&R