Xj1&ddlmZddlZddlZddlmZmZmZddlm Z ddl m Z m Z mZmZmZddlZddlmZmZddlmZmZmZmZmZmZddlmZdd lmZm Z m!Z!dd l"m#Z#m$Z$m%Z%m&Z&e rdd l'm(Z(dd l)m*Z*dd l+m,Z,ddl-m.Z.n dd l'm(Z(ejbdk\rddl m2Z2nddl3m2Z2hdZ4ddZ5Gdde6Z7e2dee8e fezeZ9Gddee8e fee9Z:ddZ;ddZ<Gdde:e9Z=y#e/$r dd l0m(Z(YzwxYw#e/$rdZ(YwxYw) ) annotationsN)AsyncGeneratorIteratorMapping)cookies) TYPE_CHECKINGAnyGenericNoReturncast)AwaitableOrContextManager AwaitableOrContextManagerWrapper)URLAddressFormDataHeaders QueryParamsState) HTTPException) FormParserMultiPartExceptionMultiPartParser)MessageReceiveScopeSend)parse_options_header) Starlette)Session)Router) )TypeVar> user-agent cache-controlaccept-encodingaccept-languageacceptci}|jdD]]}d|vr|jdd\}}nd|}}|j|j}}|s|sFtj|||<_|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 ;=)splitstrip http_cookies_unquote) cookie_string cookie_dictchunkkeyvals f/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/starlette/requests.py cookie_parserr8.s#%K$$S) : %<{{3*HC5C99; S #+44S9K  : c eZdZy)ClientDisconnectN)__name__ __module__ __qualname__r9r7r;r;Isr9r;StateT)bounddefaultcBeZdZdZdddZddZddZddZejZ ejZ e ddZ e ddZ e dd Ze dd Ze dd Ze dd Ze dd Ze ddZe ddZe ddZe ddZe d dZd!dZy)"HTTPConnectionz A base class for incoming HTTP connections, that is used to provide any functionality that is common to both `Request` and `WebSocket`. Nc$|ddvsJ||_y)Ntype)http websocketscope)selfrJreceives r7__init__zHTTPConnection.__init__VsV} 5555 r9c |j|SNrI)rKr5s r7 __getitem__zHTTPConnection.__getitem__Zszz#r9c,t|jSrO)iterrJrKs r7__iter__zHTTPConnection.__iter__]sDJJr9c,t|jSrO)lenrJrSs r7__len__zHTTPConnection.__len__`s4::r9c |jdS)NapprIrSs r7rYzHTTPConnection.appiszz%  r9cht|dst|j|_|jS)N_urlrI)hasattrrrJr[rSs r7urlzHTTPConnection.urlms&tV$$**-DIyyr9ct|dsot|j}|jd|jdd}|}|j ds|dz }||d<d|d<||d<t | |_|j S) N _base_url app_root_path root_pathr-/pathr9 query_stringrI)r\dictrJgetendswithrr_)rKbase_url_scoper`rcs r7base_urlzHTTPConnection.base_urlsst[)!$**-N+..@R@RS^`b@cdM D==% %)N6 "-0N> **7N; ' ~6DN~~r9cht|dst|j|_|jS)N_headersrI)r\rrJrkrSs r7headerszHTTPConnection.headerss&tZ(#$**5DM}}r9clt|dst|jd|_|jS)N _query_paramsrd)r\rrJrnrSs r7 query_paramszHTTPConnection.query_paramss.t_-!,TZZ-G!HD !!!r9c>|jjdi}|S)N path_params)rJrf)rKrqs r7rqzHTTPConnection.path_paramss&*jjnn]B&G r9ct|dsEi}|jjd}|D]}|jt |||_|j S)N_cookiescookie)r\rlgetlistupdater8rs)rKrcookie_headersheaders r7rzHTTPConnection.cookiessXtZ(&(G!\\11(;N( 6}V45 6$DM}}r9cN|jjd}|t|Sy)Nclient)rJrfr)rK host_ports r7rzzHTTPConnection.clients*JJNN8,  I& &r9cd|jvsJd|jd}t|dr|j|S)Nsessionz=SessionMiddleware must be installed to access request.session mark_accessed)rJr\r~)rKr}s r7r}zHTTPConnection.sessionsCDJJ&g(gg&::i0 7O ,  ! ! #r9cJd|jvsJd|jdS)NauthzAAuthenticationMiddleware must be installed to access request.authrIrSs r7rzHTTPConnection.auth)#h%hh#zz&!!r9cJd|jvsJd|jdS)NuserzAAuthenticationMiddleware must be installed to access request.userrIrSs r7rzHTTPConnection.userrr9ct|ds9|jjdit|jd|_t t |jS)N_statestate)r\rJ setdefaultrrr r@rSs r7rzHTTPConnection.statesHtX& JJ ! !'2 .  7 34DKFDKK((r9c |jjdxs|jjd}| td|j|fi|}|j |j S)NrouterrYzVThe `url_for` method can only be used inside a Starlette application or with a router.)ri)rJrf RuntimeError url_path_formake_absolute_urlri)rKnamerqurl_path_providerurl_paths r7url_forzHTTPConnection.url_forso7;zz~~h7O7hSWS]S]SaSabgSh  $wx x1$11$F+F))4==)AAr9rO)rJrrLzReceive | NonereturnNone)r5strrr )rz Iterator[str])rintrr )rr)rr)rr)rzdict[str, Any])rdict[str, str])rzAddress | None)rr@)rrrqr rr)r<r=r>__doc__rMrPrTrWobject__eq____hash__propertyrYr]rirlrorqrrzr}rrrrr?r9r7rDrDPs#   ]]FH !!   ""   """"))Br9rDc Ktdw)Nz+Receive channel has not been made availablerr?r9r7 empty_receivers D EE c Ktdw)Nz(Send channel has not been made availabler)messages r7 empty_sendrs A BBrceZdZUded<eefdfd ZeddZeddZ ddZ ddZ ddZ d d d d  dd Z d d d d  dd ZddZddZddZxZS)RequestzFormData | None_formc~t|||ddk(sJ||_||_d|_d|_d|_y)NrFrGF)superrM_receive_send_stream_consumed_is_disconnectedr)rKrJrLsend __class__s r7rMzRequest.__init__sG V}&&&  % % r9c<tt|jdS)Nmethod)r rrJrSs r7rzRequest.methodsCH-..r9c|jSrO)rrSs r7rLzRequest.receives }}r9cKt|dr|jdy|jr td|jsy|j d{}|ddk(r3|j dd}|j ddsd |_|r|n|dd k(rd |_t|jsydy7kw) N_bodyr9zStream consumedrFz http.requestbody more_bodyFThttp.disconnect)r\rrrrrfrr;)rKrrs r7streamzRequest.streams 4 !** I   01 1'' MMO+Gv.0{{63/{{;6,0D)J$55(,%&(('' ,sACCA$CCcKt|ds-g}|j23d{}|j||jS7"6dj||_&w)Nrr9)r\rappendjoinr)rKchunksr4s r7rz Request.bodysXtW%"$F#{{} % %e e$zz %}&)DJs%A"A AA A"A  A"cKt|ds2|jd{}tj||_|jS7*w)N_json)r\rjsonloadsr)rKrs r7rz Request.jsons=tW%$DD)DJzz%s AA +Aii max_files max_fields max_part_sizecK|jtJd|jjd}t|\}}|dk(rR t |j|j |||}|j d{|_|jS|dk(rQ t|j|j || } | j d{|_|jSt|_|jS7#t$r,}d|jvrtd|j|d}~wwxYw7j#t$r,}d|jvrtd|j|d}~wwxYww) NzEThe `python-multipart` library must be installed to use form parsing.z Content-Typesmultipart/form-datarrYi) status_codedetails!application/x-www-form-urlencoded)rr) rrrlrfrrparserrJrrrr) rKrrrcontent_type_header content_type_multipart_parserexc form_parsers r7 _get_formzRequest._get_form su :: '3 W 3#',,"2"2>"B 23FGOL!55 '6  "+#-&3 ($(8'='='?!?DJ(zz!EE ",  #-&3 #K (3'8'8':!:DJzz&Z zz)"@) *+CKKPPI";) *+CKKPPIsrAF ;DD  DF":E E E &'F D E'D??EFE E>'E99E>>Fc<t|j|||S)Nr)rr)rKrrrs r7formz Request.form9s$0 NNY:UbN c  r9cnK|j#|jjd{yy7wrO)rcloserSs r7rz Request.closeDs. :: !**""$ $ $ " $s *535cK|jsbi}tj5}|j|j d{}ddd|j ddk(rd|_|jS73#1swY2xYww)NrFrT)ranyio CancelScopecancelrrf)rKrcss r7is_disconnectedzRequest.is_disconnectedHs}$$!G""$ 0 $ / 0{{6"&77(,%$$$ 0 0 0s.#B $A? A= A?/B =A??BB cDKd|jjdivr|g}tD]S}|jj |D]3}|j |j d|j df5U|jd||dd{yy7w)Nzhttp.response.push extensionszlatin-1)rFrcrl)rJrfSERVER_PUSH_HEADERS_TO_COPYrlrurencoder)rKrc raw_headersrvalues r7send_push_promisezRequest.send_push_promiseVs 4::>>,#C C57K3 Z!\\11$7ZE&& I(> Y@W'XYZ Z**&:DU`ab b b D csBB BB )rJrrLrrr)rr)rr)rzAsyncGenerator[bytes, None])rbytesr)r int | floatrrrrrr)rrrrrrrz#AwaitableOrContextManager[FormData])rr)rbool)rcrrr)r<r=r>__annotations__rrrMrrrLrrrrrrrr __classcell__)rs@r7rrs 8ET^//("&"&( ++ +  +  +`"&"&(        -  % %cr9r)r2rrr)rr )rrrr )> __future__rrsyscollections.abcrrrrGrr0typingrr r r r rstarlette._utilsr rstarlette.datastructuresrrrrrrstarlette.exceptionsrstarlette.formparsersrrrstarlette.typesrrrrpython_multipart.multipartrstarlette.applicationsrstarlette.middleware.sessionsrstarlette.routingr ModuleNotFoundErrormultipart.multipart version_infor#typing_extensionsrr8 Exceptionr;rr@rDrrrr?r9r7rs" ==(>> XXX.QQ99?05($ A G w)6 y  c!2U!:E J{BWS#X&{B|FCFcnV$Fcw# A @ A $#$s*C55 DDDDDD