
    mϞi.                       d dl mZ d dl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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( ej^                  dk\  rd dlm0Z0 nd dl1m0Z0 h dZ2ddZ3 G d de4      Z5 e0dee6ef   ez  e      Z7 G d dee6ef   ee7         Z8ddZ9ddZ: G d de8e7         Z;y# e-$ r	 d dl.m(Z( Y zw xY w# e-$ r dZ(Y w xY w)    )annotationsN)AsyncGeneratorIteratorMapping)cookies)TYPE_CHECKINGAnyGenericNoReturncast)AwaitableOrContextManager AwaitableOrContextManagerWrapper)URLAddressFormDataHeadersQueryParamsState)HTTPException)
FormParserMultiPartExceptionMultiPartParser)MessageReceiveScopeSend)parse_options_header)	Starlette)Router)      )TypeVar>   
user-agentcache-controlaccept-encodingaccept-languageacceptc                    i }| j                  d      D ]]  }d|v r|j                  dd      \  }}nd|}}|j                         |j                         }}|s|sFt        j                  |      ||<   _ |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)cookie_stringcookie_dictchunkkeyvals        T/var/www/html/jploft-chatbot/venv/lib/python3.12/site-packages/starlette/requests.pycookie_parserr7   -   s     #%K$$S) 
:%<{{3*HC 5C99;		S#+44S9K
:     c                      e Zd Zy)ClientDisconnectN)__name__
__module____qualname__ r8   r6   r:   r:   H   s    r8   r:   StateT)bounddefaultc                  B   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dd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zed d       Zd!dZy)"HTTPConnectionz
    A base class for incoming HTTP connections, that is used to provide
    any functionality that is common to both `Request` and `WebSocket`.
    Nc                $    |d   dv sJ || _         y )Ntype)http	websocketscope)selfrI   receives      r6   __init__zHTTPConnection.__init__U   s    V} 5555
r8   c                     | j                   |   S NrH   )rJ   r4   s     r6   __getitem__zHTTPConnection.__getitem__Y   s    zz#r8   c                ,    t        | j                        S rN   )iterrI   rJ   s    r6   __iter__zHTTPConnection.__iter__\   s    DJJr8   c                ,    t        | j                        S rN   )lenrI   rR   s    r6   __len__zHTTPConnection.__len___   s    4::r8   c                     | j                   d   S )NapprH   rR   s    r6   rX   zHTTPConnection.apph   s    zz%  r8   c                h    t        | d      st        | j                        | _        | j                  S )N_urlrH   )hasattrr   rI   rZ   rR   s    r6   urlzHTTPConnection.urll   s&    tV$$**-DIyyr8   c                   t        | d      sot        | j                        }|j                  d|j                  dd            }|}|j	                  d      s|dz  }||d<   d|d<   ||d<   t        |	      | _        | j                  S )
N	_base_urlapp_root_path	root_pathr,   /pathr8   query_stringrH   )r[   dictrI   getendswithr   r^   )rJ   base_url_scoper_   rb   s       r6   base_urlzHTTPConnection.base_urlr   s    t[)!$**-N +..@R@RS^`b@cdM D==%%)N6"-0N>**7N;' ~6DN~~r8   c                h    t        | d      st        | j                        | _        | j                  S )N_headersrH   )r[   r   rI   rj   rR   s    r6   headerszHTTPConnection.headers   s&    tZ(#$**5DM}}r8   c                l    t        | d      st        | j                  d         | _        | j                  S )N_query_paramsrc   )r[   r   rI   rm   rR   s    r6   query_paramszHTTPConnection.query_params   s.    t_-!,TZZ-G!HD!!!r8   c                :    | j                   j                  di       S )Npath_params)rI   re   rR   s    r6   rp   zHTTPConnection.path_params   s    zz~~mR00r8   c                    t        | d      sEi }| j                  j                  d      }|D ]  }|j                  t	        |              || _        | j
                  S )N_cookiescookie)r[   rk   getlistupdater7   rr   )rJ   r   cookie_headersheaders       r6   r   zHTTPConnection.cookies   sX    tZ(&(G!\\11(;N( 6}V456 $DM}}r8   c                N    | j                   j                  d      }|t        | S y )Nclient)rI   re   r   )rJ   	host_ports     r6   ry   zHTTPConnection.client   s*     JJNN8,	 I&&r8   c                J    d| j                   v sJ d       | j                   d   S )Nsessionz=SessionMiddleware must be installed to access request.sessionrH   rR   s    r6   r|   zHTTPConnection.session   s)    DJJ&g(gg&zz)$$r8   c                J    d| j                   v sJ d       | j                   d   S )NauthzAAuthenticationMiddleware must be installed to access request.authrH   rR   s    r6   r~   zHTTPConnection.auth   )    #h%hh#zz&!!r8   c                J    d| j                   v sJ d       | j                   d   S )NuserzAAuthenticationMiddleware must be installed to access request.userrH   rR   s    r6   r   zHTTPConnection.user   r   r8   c                    t        | d      s9| j                  j                  di        t        | j                  d         | _        t        t        | j                        S )N_statestate)r[   rI   
setdefaultr   r   r   r?   rR   s    r6   r   zHTTPConnection.state   sH    tX&JJ!!'2.  

7 34DKFDKK((r8   c                   | j                   j                  d      xs | j                   j                  d      }|t        d       |j                  |fi |}|j	                  | j
                        S )NrouterrX   zVThe `url_for` method can only be used inside a Starlette application or with a router.)rh   )rI   re   RuntimeErrorurl_path_formake_absolute_urlrh   )rJ   namerp   url_path_providerurl_paths        r6   url_forzHTTPConnection.url_for   so    7;zz~~h7O7hSWS]S]SaSabgSh$wxx1$11$F+F))4==)AAr8   rN   )rI   r   rK   zReceive | NonereturnNone)r4   strr   r	   )r   zIterator[str])r   intr   r	   )r   r   )r   r   )r   r   )r   zdict[str, Any])r   dict[str, str])r   zAddress | None)r   r?   )r   r   rp   r	   r   r   )r;   r<   r=   __doc__rL   rO   rS   rV   object__eq____hash__propertyrX   r\   rh   rk   rn   rp   r   ry   r|   r~   r   r   r   r>   r8   r6   rC   rC   O   s#   
  ]]FH! !  
     
 " "
 1 1 	 	   % % " " " " ) )Br8   rC   c                     K   t        d      w)Nz+Receive channel has not been made availabler   r>   r8   r6   empty_receiver      s     
D
EE   c                    K   t        d      w)Nz(Send channel has not been made availabler   )messages    r6   
empty_sendr      s     
A
BBr   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ddZ xZS )RequestzFormData | None_formc                ~    t         |   |       |d   dk(  sJ || _        || _        d| _        d| _        d | _        y )NrE   rF   F)superrL   _receive_send_stream_consumed_is_disconnectedr   )rJ   rI   rK   send	__class__s       r6   rL   zRequest.__init__   sG    V}&&&
 % %
r8   c                <    t        t        | j                  d         S )Nmethod)r   r   rI   rR   s    r6   r   zRequest.method   s    CH-..r8   c                    | j                   S rN   )r   rR   s    r6   rK   zRequest.receive   s    }}r8   c                 K   t        | d      r| j                   d y | j                  rt        d      | j                  sy| j	                          d {   }|d   dk(  r3|j                  dd      }|j                  dd      sd	| _        |r| n|d   d
k(  rd	| _        t               | j                  syd y 7 kw)N_bodyr8   zStream consumedrE   zhttp.requestbody	more_bodyFThttp.disconnect)r[   r   r   r   r   re   r   r:   )rJ   r   r   s      r6   streamzRequest.stream   s     4!**I  011'' MMO+Gv.0{{63/{{;6,0D)J$55(,%&(( '' 	 ,s   ACCA$C Cc                   K   t        | d      s-g }| j                         2 3 d {   }|j                  |       | j                  S 7 "6 dj                  |      | _        &w)Nr   r8   )r[   r   appendjoinr   )rJ   chunksr3   s      r6   r   zRequest.body   sX     tW%"$F#{{} % %ee$zz%}&)DJs%   A"A
AA
A"A

A"c                   K   t        | d      s2| j                          d {   }t        j                  |      | _        | j                  S 7 *w)N_json)r[   r   jsonloadsr   )rJ   r   s     r6   r   zRequest.json   s=     tW%$DD)DJzz %s    AA+Ai  i   	max_files
max_fieldsmax_part_sizec                 K   | j                   t        J d       | j                  j                  d      }t        |      \  }}|dk(  rR	 t	        | j                  | j                         |||      }|j                          d {   | _         | j                   S |dk(  rMt        | j                  | j                               }	|	j                          d {   | _         | j                   S t               | _         | j                   S 7 # t        $ r,}d| j                  v rt        d|j                        |d }~ww xY w7 jw)	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   rI   r   r   r   r   )
rJ   r   r   r   content_type_headercontent_type_multipart_parserexcform_parsers
             r6   	_get_formzRequest._get_form  s3     ::'3 W3 #',,"2"2>"B23FGOL!55'6"+#-&3($ (8'='='?!?DJ zz !EE(t{{}E#.#4#4#66
 zz &Z
zz "@) 

*+CKKPPI 7sI   AE;D D		D AEE0E	D 	E 'D;;E  Ec               <    t        | j                  |||            S )Nr   )r   r   )rJ   r   r   r   s       r6   formzRequest.form)  s$     0NNY:UbNc
 	
r8   c                n   K   | j                   #| j                   j                          d {    y y 7 wrN   )r   closerR   s    r6   r   zRequest.close4  s.     ::!**""$$$ "$s   *535c                  K   | j                   sbi }t        j                         5 }|j                          | j	                          d {   }d d d        |j                  d      dk(  rd| _         | j                   S 7 3# 1 sw Y   2xY ww)NrE   r   T)r   anyioCancelScopecancelr   re   )rJ   r   css      r6   is_disconnectedzRequest.is_disconnected8  s}     $$!G ""$ 0		 $/0 {{6"&77(,%$$$ 00 0s.   #B$A?	A=
A?/B=A??BBc                D  K   d| j                   j                  di       v r|g }t        D ]S  }| j                  j	                  |      D ]3  }|j                  |j                  d      |j                  d      f       5 U | j                  d||d       d {    y y 7 w)Nzhttp.response.push
extensionszlatin-1)rE   rb   rk   )rI   re   SERVER_PUSH_HEADERS_TO_COPYrk   rt   r   encoder   )rJ   rb   raw_headersr   values        r6   send_push_promisezRequest.send_push_promiseF  s     4::>>,#CC57K3 Z!\\11$7 ZE&&I(>Y@W'XYZZ **&:DU`abbb D
 cs   BB BB )rI   r   rK   r   r   r   )r   r   )r   r   )r   zAsyncGenerator[bytes, None])r   bytesr   )r   int | floatr   r   r   r   r   r   )r   r   r   r   r   r   r   z#AwaitableOrContextManager[FormData])r   r   )r   bool)rb   r   r   r   )r;   r<   r=   __annotations__r   r   rL   r   r   rK   r   r   r   r   r   r   r   r   __classcell__)r   s   @r6   r   r      s    8ET^  / /  ( "&"&(! !  	!
 ! 
!L "&"&(	
 	
  		

 	
 
-	
%%cr8   r   )r1   r   r   r   )r   r   )r   r   r   r   )<
__future__r   r   syscollections.abcr   r   r   rF   r   r/   typingr   r	   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.multipartversion_infor"   typing_extensionsr   r7   	Exceptionr:   r   r?   rC   r   r   r   r>   r8   r6   <module>r      s   "  
 = = ( > >  X X X . Q Q 9 9?0($	AG w) 6	y 	 
c!2U!:E	JvBWS#X& vBrFC|cnV$ |cm # 	A@	A $#$s*   <C/ /C=:D  <C==D   D
	D
