
    	h-                       d dl mZ d dl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 d dlZd dlmZmZ d dlmZmZmZmZmZm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$ erd dl%m&Z& d dl'm(Z( d dl)m*Z* n(	 	 d dl%m&Z& n# e+$ r	 d dl,m&Z& Y nw xY wn# e+$ r dZ&Y nw xY wh dZ-ddZ. G d de/          Z0 G d dee1ef                   Z2d dZ3d!dZ4 G d de2          Z5dS )"    )annotationsN)AsyncGeneratorIteratorMapping)cookies)TYPE_CHECKINGAnyNoReturncast)AwaitableOrContextManager AwaitableOrContextManagerWrapper)URLAddressFormDataHeadersQueryParamsState)HTTPException)
FormParserMultiPartExceptionMultiPartParser)MessageReceiveScopeSend)parse_options_header)	Starlette)Router>   
user-agentcache-controlaccept-encodingaccept-languageacceptcookie_stringstrreturndict[str, str]c                   i }|                      d          D ]g}d|v r|                     dd          \  }}nd|}}|                                |                                }}|s|rt          j        |          ||<   h|S )a   
    This function parses a ``Cookie`` HTTP header into a dict of key/value pairs.

    It attempts to mimic browser cookie parsing behavior: browsers and web servers
    frequently disregard the spec (RFC 6265) when setting and reading cookies,
    so we attempt to suit the common scenarios here.

    This function has been adapted from Django 3.1.0.
    Note: we are explicitly _NOT_ using `SimpleCookie.load` because it is based
    on an outdated spec and will fail on lots of input we want to support
    ;=    )splitstriphttp_cookies_unquote)r$   cookie_dictchunkkeyvals        _/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/starlette/requests.pycookie_parserr6   (   s     #%K$$S)) 
: 
:%<<{{3**HC 5C99;;		S 	:# 	:+4S99K    c                      e Zd ZdS )ClientDisconnectN)__name__
__module____qualname__ r7   r5   r9   r9   C   s        Dr7   r9   c                  x   e Zd ZdZd(d)d	Zd*dZd+dZd,dZej	        Z	ej
        Z
ed-d            Zed.d            Zed.d            Zed/d            Zed0d            Zed1d            Zed2d            Zed3d            Zed1d             Zed-d!            Zed-d"            Zed4d$            Zd5d'ZdS )6HTTPConnectionz
    A base class for incoming HTTP connections, that is used to provide
    any functionality that is common to both `Request` and `WebSocket`.
    Nscoper   receiveReceive | Noner&   Nonec                ,    |d         dv sJ || _         d S )Ntype)http	websocketr@   )selfr@   rA   s      r5   __init__zHTTPConnection.__init__M   s#    V} 55555


r7   r3   r%   r	   c                    | j         |         S NrH   )rI   r3   s     r5   __getitem__zHTTPConnection.__getitem__Q   s    z#r7   Iterator[str]c                *    t          | j                  S rL   )iterr@   rI   s    r5   __iter__zHTTPConnection.__iter__T   s    DJr7   intc                *    t          | j                  S rL   )lenr@   rQ   s    r5   __len__zHTTPConnection.__len__W   s    4:r7   c                    | j         d         S )NapprH   rQ   s    r5   rX   zHTTPConnection.app`   s    z%  r7   r   c                d    t          | d          st          | j                  | _        | j        S )N_urlrH   )hasattrr   r@   rZ   rQ   s    r5   urlzHTTPConnection.urld   s0    tV$$ 	.$*---DIyr7   c                ,   t          | d          s~t          | j                  }|                    d|                    dd                    }|}|                    d          s|dz  }||d<   d|d<   ||d<   t          |	          | _        | j        S )
N	_base_urlapp_root_path	root_pathr,   /pathr7   query_stringrH   )r[   dictr@   getendswithr   r^   )rI   base_url_scoper_   rb   s       r5   base_urlzHTTPConnection.base_urlj   s    t[)) 	7!$*--N +..@R@RS^`b@c@cddM D==%% %)N6"-0N>**7N;' ~666DN~r7   r   c                d    t          | d          st          | j                  | _        | j        S )N_headersrH   )r[   r   r@   rj   rQ   s    r5   headerszHTTPConnection.headers{   s0    tZ(( 	6#$*555DM}r7   r   c                n    t          | d          st          | j        d                   | _        | j        S )N_query_paramsrc   )r[   r   r@   rm   rQ   s    r5   query_paramszHTTPConnection.query_params   s5    t_-- 	I!,TZ-G!H!HD!!r7   dict[str, Any]c                8    | j                             di           S )Npath_params)r@   re   rQ   s    r5   rq   zHTTPConnection.path_params   s    z~~mR000r7   r'   c                    t          | d          s4i }| j                            d          }|rt          |          }|| _        | j        S )N_cookiescookie)r[   rk   re   r6   rs   )rI   r   cookie_headers      r5   r   zHTTPConnection.cookies   sR    tZ(( 	$&(G L,,X66M 7'66#DM}r7   Address | Nonec                P    | j                             d          }|	t          | S d S )Nclient)r@   re   r   )rI   	host_ports     r5   rx   zHTTPConnection.client   s-     JNN8,,	 I&&tr7   c                B    d| j         v s
J d            | j         d         S )Nsessionz=SessionMiddleware must be installed to access request.sessionrH   rQ   s    r5   r{   zHTTPConnection.session   s+    DJ&&&(g&&&z)$$r7   c                B    d| j         v s
J d            | j         d         S )NauthzAAuthenticationMiddleware must be installed to access request.authrH   rQ   s    r5   r}   zHTTPConnection.auth   +    ###%h###z&!!r7   c                B    d| j         v s
J d            | j         d         S )NuserzAAuthenticationMiddleware must be installed to access request.userrH   rQ   s    r5   r   zHTTPConnection.user   r~   r7   r   c                    t          | d          s:| j                            di            t          | j        d                   | _        | j        S )N_statestate)r[   r@   
setdefaultr   r   rQ   s    r5   r   zHTTPConnection.state   sL    tX&& 	5J!!'2...  
7 344DK{r7   namerq   c                   | j                             d          p| j                             d          }|t          d           |j        |fi |}|                    | j                  S )NrouterrX   zVThe `url_for` method can only be used inside a Starlette application or with a router.)rh   )r@   re   RuntimeErrorurl_path_formake_absolute_urlrh   )rI   r   rq   url_path_providerurl_paths        r5   url_forzHTTPConnection.url_for   sw    7;z~~h7O7O7hSWS]SaSabgShSh$wxxx1$1$FF+FF))4=)AAAr7   rL   )r@   r   rA   rB   r&   rC   )r3   r%   r&   r	   )r&   rN   )r&   rS   r&   r	   )r&   r   )r&   r   )r&   r   )r&   ro   )r&   r'   )r&   rv   )r&   r   )r   r%   rq   r	   r&   r   )r:   r;   r<   __doc__rJ   rM   rR   rV   object__eq____hash__propertyrX   r\   rh   rk   rn   rq   r   rx   r{   r}   r   r   r   r=   r7   r5   r?   r?   G   s        
                  ]FH! ! ! X!    X
    X     X
 " " " X"
 1 1 1 X1    X    X % % % X% " " " X" " " " X"    XB B B B B Br7   r?   r
   c                 $   K   t          d          )Nz+Receive channel has not been made availabler   r=   r7   r5   empty_receiver      s      
D
E
EEr7   messager   c                $   K   t          d          )Nz(Send channel has not been made availabler   )r   s    r5   
empty_sendr      s      
A
B
BBr7   c                       e Zd ZU ded<   eefd& fd	Zed'd            Zed(d            Z	d)dZ
d*dZd+dZddddd,dZddddd-dZd.d!Zd/d#Zd0d%Z xZS )1RequestzFormData | None_formr@   r   rA   r   sendr   c                    t                                          |           |d         dk    sJ || _        || _        d| _        d| _        d | _        d S )NrE   rF   F)superrJ   _receive_send_stream_consumed_is_disconnectedr   )rI   r@   rA   r   	__class__s       r5   rJ   zRequest.__init__   sY    V}&&&&
 % %


r7   r&   r%   c                B    t          t          | j        d                   S )Nmethod)r   r%   r@   rQ   s    r5   r   zRequest.method   s    CH-...r7   c                    | j         S rL   )r   rQ   s    r5   rA   zRequest.receive   s
    }r7   AsyncGenerator[bytes, None]c                 K   t          | d          r| j        W V  dW V  d S | j        rt          d          | j        s|                                  d {V }|d         dk    r;|                    dd          }|                    dd          sd	| _        |r|W V  n!|d         d
k    rd	| _        t                      | j        dW V  d S )N_bodyr7   zStream consumedrE   zhttp.requestbody	more_bodyFThttp.disconnect)r[   r   r   r   r   re   r   r9   )rI   r   r   s      r5   streamzRequest.stream   s     4!! 	*IIIIF  	20111' 
	) MMOO++++++Gv.00{{63//{{;66 1,0D) JJJJ$555(,%&((( ' 
	) 						r7   bytesc                   K   t          | d          sNg }|                                 2 3 d {V }|                    |           6 d                    |          | _        | j        S )Nr   r7   )r[   r   appendjoinr   )rI   chunksr2   s      r5   r   zRequest.body   s      tW%% 	*"$F#{{}} % % % % % % %ee$$$$  -&))DJzs   Ar	   c                   K   t          | d          s3|                                  d {V }t          j        |          | _        | j        S )N_json)r[   r   jsonloadsr   )rI   r   s     r5   r   zRequest.json   sP      tW%% 	*$$$$$$DD))DJzr7   i  i   	max_files
max_fieldsmax_part_sizer   int | floatr   r   rS   r   c               h  K   | j         "t          
J d            | j                            d          }t          |          \  }}|dk    r	 t	          | j        |                                 |||          }|                                 d {V | _         n# t          $ r&}d| j        v rt          d|j
                  |d }~ww xY w|dk    rGt          | j        |                                           }	|	                                 d {V | _         nt                      | _         | j         S )	NzEThe `python-multipart` library must be installed to use form parsing.zContent-Types   multipart/form-datar   rX   i  )status_codedetails!   application/x-www-form-urlencoded)r   r   rk   re   r   r   parser   r@   r   r   r   r   )
rI   r   r   r   content_type_headercontent_type_multipart_parserexcform_parsers
             r5   	_get_formzRequest._get_form   s`      :'33W 433 #',"2"2>"B"B23FGGOL!555'6"+#-&3( ( ($ (8'='='?'?!?!?!?!?!?!?DJJ)   
**+CKPPPPI !EEE(t{{}}EE#.#4#4#6#6666666

%ZZ
zs   A
B 
C
$!CC
#AwaitableOrContextManager[FormData]c               L    t          |                     |||                    S )Nr   )r   r   )rI   r   r   r   s       r5   formzRequest.form   s,     0NNY:UbNcc
 
 	
r7   rC   c                Z   K   | j         !| j                                          d {V  d S d S rL   )r   closerQ   s    r5   r   zRequest.close+  sB      :!*""$$$$$$$$$$$ "!r7   boolc                  K   | j         s{i }t          j                    5 }|                                 |                                  d {V }d d d            n# 1 swxY w Y   |                    d          dk    rd| _         | j         S )NrE   r   T)r   anyioCancelScopecancelr   re   )rI   r   css      r5   is_disconnectedzRequest.is_disconnected/  s      $ 		-!G "$$ 0		 $//////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {{6""&777(,%$$s   /AA!Arb   c                R  K   d| j                             di           v rg }t          D ]\}| j                            |          D ]?}|                    |                    d          |                    d          f           @]|                     d||d           d {V  d S d S )Nzhttp.response.push
extensionszlatin-1)rE   rb   rk   )r@   re   SERVER_PUSH_HEADERS_TO_COPYrk   getlistr   encoder   )rI   rb   raw_headersr   values        r5   send_push_promisezRequest.send_push_promise=  s      4:>>,#C#CCC57K3 Z Z!\11$77 Z ZE&&I(>(>Y@W@W'XYYYYZ**&:DU`aabbbbbbbbbbb DCr7   )r@   r   rA   r   r   r   )r&   r%   )r&   r   )r&   r   )r&   r   r   )r   r   r   r   r   rS   r&   r   )r   r   r   r   r   rS   r&   r   )r&   rC   )r&   r   )rb   r%   r&   rC   )r:   r;   r<   __annotations__r   r   rJ   r   r   rA   r   r   r   r   r   r   r   r   __classcell__)r   s   @r5   r   r      si        8ET^        / / / X/    X   (       "&"&(! ! ! ! ! !L "&"&(	
 	
 	
 	
 	
 	
% % % %% % % %c c c c c c c cr7   r   )r$   r%   r&   r'   )r&   r
   )r   r   r&   r
   )6
__future__r   r   collections.abcr   r   r   rF   r   r/   typingr   r	   r
   r   r   starlette._utilsr   r   starlette.datastructuresr   r   r   r   r   r   starlette.exceptionsr   starlette.formparsersr   r   r   starlette.typesr   r   r   r   python_multipart.multipartr   starlette.applicationsr   starlette.routingr   ModuleNotFoundErrormultipart.multipartr   r6   	Exceptionr9   r%   r?   r   r   r   r=   r7   r5   <module>r      s   " " " " " "  = = = = = = = = = = ( ( ( ( ( ( 5 5 5 5 5 5 5 5 5 5 5 5  X X X X X X X X X X X X X X X X X X X X X X X X . . . . . . Q Q Q Q Q Q Q Q Q Q 9 9 9 9 9 9 9 9 9 9 9 9 $??????000000((((((($	AGGGGGGG" 	A 	A 	A@@@@@@@@	A $ $ $#$      6	 	 	 	 	y 	 	 	uB uB uB uB uBWS#X& uB uB uBpF F F FC C C C|c |c |c |c |cn |c |c |c |c |cs0   6A= <B =BB 
BB BB