XjZNddlmZddlZddlmZmZmZmZmZm Z m Z m Z ddl m Z ddl mZmZmZmZmZmZddlmZmZmZmZddlmZddlmZGd d eZed Zed d Zej@dejBZ"GddZ#Gdde$Z%GddZ&Gdde e$Z'GddeeefZ(Gdde(eefZ)Gdde(e$e$fZ*GddZ+Gd d!e(e$e+e$zfZ,Gd"d#ee$e$fZ-Gd$d%e-Z.Gd&d'Z/y)() annotationsN) ItemsViewIterableIteratorKeysViewMappingMutableMappingSequence ValuesView)shlex)AnyBinaryIOLiteral NamedTupleTypeVarcast) SplitResult parse_qsl urlencodeurlsplit)run_in_threadpool)Scopec"eZdZUded<ded<y)AddressstrhostintportN)__name__ __module__ __qualname____annotations__l/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/starlette/datastructures.pyrr s I Ir$r_KeyType_CovariantValueTypeT) covariantz5^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9.:]+\])(?::[0-9]+)?$c&eZdZ d ddZeddZeddZeddZeddZeddZ eddZ edd Z edd Z edd Z edd Zedd ZddZddZddZddZddZddZddZy)URLNc ||rJd|rJd|jdd}|jdd}|d}|jdd}d}|d D]\} } | d k(s | jd }n|tj|r|} n"||\} } d d d d d|}| |k(r| n| d| } nd} |j}| &t || ||dj }||_ y|r|d|n|}||_ y|r<|rJdt djdi|jj }||_ y)Nz"Cannot set both "url" and "scope".z+Cannot set both "scope" and "**components".schemehttpserverpath query_stringr$headersshostlatin-1Pi)r-httpswswss:)r,netlocr/queryfragment?z)Cannot set both "url" and "**components".r#) getdecode_HOST_RE fullmatchrgeturlr*replace components_url)selfurlscoperCr,r.r/r0 host_headerkeyvaluer9rr default_portr:s r%__init__z URL.__init__s   @@ @7! P#P P>YYx0FYYx.F=D 99^S9LK#I.  U'>"',,y"9K  &8+=+=k+J$## d(*S3OPVW !%!5dV1TF;K '')E!!TQVacdkkm ,1aw'd   GG G7!#b'///J/::AACC r$cft|dst|j|_|jS)N _components)hasattrrrDrNrEs r%rCzURL.componentsEs)t]+' 2D r$c.|jjSN)rCr,rPs r%r,z URL.schemeK%%%r$c.|jjSrR)rCr9rPs r%r9z URL.netlocOrSr$c.|jjSrR)rCr/rPs r%r/zURL.pathS###r$c.|jjSrR)rCr:rPs r%r:z URL.queryWs$$$r$c.|jjSrR)rCr;rPs r%r;z URL.fragment['''r$c.|jjSrR)rCusernamerPs r%r[z URL.username_rYr$c.|jjSrR)rCpasswordrPs r%r]z URL.passwordcrYr$c.|jjSrR)rChostnamerPs r%r_z URL.hostnamegrYr$c.|jjSrR)rCrrPs r%rzURL.portkrVr$c|jdvS)N)r4r6)r,rPs r% is_securez URL.is_secureos{{...r$c 4d|vs d|vsd|vsd|vr|jdd}|jd|j}|jd|j}|jd|j}|@|j}|j d\}}}|r|ddk7r|j dd d }|}||d|z }||}||d|z }|d|}||d <|jjd i|} |j| jS) Nr[r]r_r@]r7rr9r#) poprr[r]r9 rpartitionrsplitrC_replace __class__rA) rEkwargsr_rr[r]r9_userpassrCs r%rBz URL.replacess<  :#7:;OSY]cSczz*d3H::fdii0Dzz*dmmsA!c,t|jSrR)lenrrPs r%__len__zCommaSeparatedStrings.__len__4;;r$c |j|SrR)r)rEindexs r% __getitem__z!CommaSeparatedStrings.__getitem__s{{5!!r$c,t|jSrR)iterrrPs r%__iter__zCommaSeparatedStrings.__iter__rr$cf|jj}|Dcgc]}|}}|d|dScc}wNrrr)rErrrws r%rzCommaSeparatedStrings.__repr__s<^^,, "&'$''Quiq))(s .c2djd|DS)N, c32K|]}t|ywrR)r).0rs r% z0CommaSeparatedStrings.__str__..s5d5s)joinrPs r%rzCommaSeparatedStrings.__str__syy5555r$N)rJrrr)rz int | slicerr rz Iterator[str]r) rr r!rLrrrrrr#r$r%rrs & "!* 6r$rceZdZUded< ddZddZddZddZddZddZ dd Z dd Z dd Z dd Z dd ZddZy)ImmutableMultiDictz#dict[_KeyType, _CovariantValueType]_dictc>t|dksJd|r|dng}|r3t|jt|jz}|sg}nt|dr7t tt t f|}t|j}nZt|dr7t tt t f|}t|j}nt d|}t|}|Dcic]\}}|| c}}|_ ||_ ycc}}w)NToo many arguments.rrxrwzlist[tuple[Any, Any]]) rrrxrOrr&r'rrrwr_list)rEargsrmrJrkvs r%rLzImmutableMultiDict.__init__s4y1}333} $T!W" &u-99;>PQW>X>d>d>ffE,.F UM *+H6I,IJERE%++-.F UG $+>!>?GE%++-(F0%8E%[F'-.tq!ad.  /s; DcX|jDcgc] \}}||k(s |c}}Scc}}wrRr)rErIitem_key item_values r%getlistzImmutableMultiDict.getlists&7;zzU3xXQT_ UUUs &&c6|jjSrR)rrrPs r%rzImmutableMultiDict.keysszz  r$c6|jjSrR)rvaluesrPs r%rzImmutableMultiDict.values"szz  ""r$c6|jjSrR)rrwrPs r%rwzImmutableMultiDict.items%szz!!r$c,t|jSrRrrrPs r%rxzImmutableMultiDict.multi_items(sDJJr$c |j|SrRrrErIs r%rzImmutableMultiDict.__getitem__+szz#r$c||jvSrRrrs r% __contains__zImmutableMultiDict.__contains__.sdjj  r$c4t|jSrRrrrPs r%rzImmutableMultiDict.__iter__1DIIK  r$c,t|jSrR)rrrPs r%rzImmutableMultiDict.__len__44::r$ct||jsyt|jt|jk(SNF)r~rlsortedrrs r%rzImmutableMultiDict.__eq__7s0%0djj!VEKK%888r$c^|jj}|j}|d|dSr)rlrrx)rErrws r%rzImmutableMultiDict.__repr__<s2^^,,   "Quiq))r$N)rzImmutableMultiDict[_KeyType, _CovariantValueType] | Mapping[_KeyType, _CovariantValueType] | Iterable[tuple[_KeyType, _CovariantValueType]]rmr rr)rIr rzlist[_CovariantValueType])rzKeysView[_KeyType])rzValuesView[_CovariantValueType])rz(ItemsView[_KeyType, _CovariantValueType])rz*list[tuple[_KeyType, _CovariantValueType]])rIr&rr'rIr rr)rzIterator[_KeyType]rrr)rr r!r"rLrrrrwrxrrrrrrr#r$r%rrsc ..9    8V!#" !!9 *r$rcleZdZd dZd dZdddZddZddZddZdddZ dd Z d d Z dd Z y)ruc*|j||gyrR)setlistrErIrJs r% __setitem__zMultiDict.__setitem__Cs S5'"r$c|jDcgc]\}}||k7s ||fc}}|_|j|=ycc}}wrR)rr)rErIrrs r% __delitem__zMultiDict.__delitem__Fs7)-@AqCxq!f@ JJsOAs ;;Nc|jDcgc]\}}||k7s ||fc}}|_|jj||Scc}}wrR)rrrh)rErIdefaultrrs r%rhz MultiDict.popJsA)-@AqCxq!f@ zz~~c7++As A A c|jj\}}|jDcgc]\}}||k7s ||fc}}|_||fScc}}wrR)rpopitemr)rErIrJrrs r%rzMultiDict.popitemNsLZZ'') U)-@AqCxq!f@ EzAs AAc||jDcgc] \}}||k(s |}}}|j||Scc}}wrR)rrh)rErIrrrs r%poplistzMultiDict.poplistSs8 $ 71a3h!77   8s 88cl|jj|jjyrR)rclearrrPs r%rzMultiDict.clearXs"  r$cl||vr,||j|<|jj||f||SrR)rrappend)rErIrs r% setdefaultzMultiDict.setdefault\s6 d?%DJJsO JJ  sGn -Cyr$c|s|j|dy|jDcgc]\}}||k7s ||f}}}||Dcgc]}||fc}z|_|d|j|<ycc}}wcc}w)Nre)rhrr)rErIrrrexisting_itemsrJs r%rzMultiDict.setlistcsm HHS$ 37::J!Qcq!fJNJ'V*LEC<*LLDJ$RjDJJsOK*Ls A)A) A/c\|jj||f||j|<yrR)rrrrs r%rzMultiDict.appendks% 3,' 3r$ct|i|}|jDcgc]\}}||jvs||f}}}||jz|_|jj |ycc}}wrR)rurrrxrrv)rErrmrJrrrs r%rvzMultiDict.updateosl 4*6*/3zzSVaQejjl=R1a&SS#e&7&7&99  % Ts A3A3rIr rJr rrrIr rrrR)rIr rr rr )rztuple[Any, Any])rIr r list[Any]rr)rIr rr rr)rz5MultiDict | Mapping[Any, Any] | list[tuple[Any, Any]]rmr rr) rr r!rrrhrrrrrrrvr#r$r%ruruBsP#,  ) !D!!  !r$ruc@eZdZdZ dfd ZddZddZxZS) QueryParamsz! An immutable multidict. c@t|dksJd|r|dng}t|trt|t |dfi|nJt|t r+t|t |jddfi|nt||i||jDcgc]\}}t|t|fc}}|_|jjDcic]\}}t|t|c}}|_ ycc}}wcc}}w)NrrrTrrr2) rr~rsuperrLrbytesr>rrrw)rErrmrJrrrls r%rLzQueryParams.__init__s 4y1}333}QR eS ! G YuE P P u % G Yu||I'>RVW b[a b G d -f -37::>41as1vs1v&> 151A1A1CDAc!fc!fnD ?Ds % D+Dc,t|jSrR)rrrPs r%rzQueryParams.__str__s$$r$cT|jj}t|}|d|dSr)rlrr)rErr0s r%rzQueryParams.__repr__s.^^,, 4y Q|.a00r$)rzVImmutableMultiDict[Any, Any] | Mapping[Any, Any] | list[tuple[Any, Any]] | str | bytesrmr rrr)rr r!rrLrr __classcell__rls@r%rrzs7EeEE  E$%1r$rceZdZdZdddd d dZeddZeddZddZddZ ddd Z dd Z dd Z dd Z y) UploadFilez@ An uploaded file included as part of the request data. N)sizefilenamer1c||_||_||_|xs t|_t |jdd|_y)N _max_sizer)rfilerHeadersr1getattr _max_mem_size)rErrrr1s r%rLzUploadFile.__init__s>!   +') %TYY Q?r$c:|jjddS)Nz content-type)r1r=rPs r% content_typezUploadFile.content_types||55r$c6t|jdd}| S)N_rolledT)rr)rErolled_to_disks r% _in_memoryzUploadFile._in_memorys!It<!!!r$c|jsy|jj|z}|jrt ||jkDSdS)NTF)r&rtellr r)rE size_to_add future_sizes r% _will_rollzUploadFile._will_rollsGiinn&4 9=9K9KtK$"4"445VQVVr$cKt|}|j|xj|z c_|j|r)t|jj |d{y|jj |y7!wrR)rrr+rrwrite)rEdata new_data_lens r%r-zUploadFile.writes`4y 99 II %I ??< (#DIIOOT: : : IIOOD ! ;sA!B#B$"BcK|jr|jj|St|jj|d{S7wrR)r&rreadr)rErs r%r1zUploadFile.reads; ??99>>$' '&tyy~~t<<<**, $JC%,kkm## $#s'AAAA)rzNFormData | Mapping[str, str | UploadFile] | list[tuple[str, str | UploadFile]]rmzstr | UploadFilerrr )rr r!rrLr6rrs@r%r:r:s.*]*#*  *$r$r:ceZdZdZ d ddZeddZddZddZddZ ddZ dd Z dd Z dd Z dd Zdd ZddZddZy)rz3 An immutable, case-insensitive multidict. NcPg|_|i|Jd|Jd|jDcgc]5\}}|jjd|jdf7c}}|_y||Jd||_y|t |dx|_|d<yycc}}w)Nz$Cannot set both "headers" and "raw".z&Cannot set both "headers" and "scope".r2z"Cannot set both "raw" and "scope".r1)rrwlowerencoder)rEr1rawrGrIrJs r%rLzHeaders.__init__s 13  ; F F F;= J"J J=elereretuWaWZ\a399;--i8%,,y:QRuDJ _= F"F F=DJ  -1y1A,B BDJy) vs:B"c,t|jSrRrrPs r%rAz Headers.raw sDJJr$cj|jDcgc]\}}|jdc}}Scc}}wNr2rr>rs r%rz Headers.keyss'8< C*#u 9%CCC/cj|jDcgc]\}}|jdc}}Scc}}wrDrErs r%rzHeaders.valuess':>**EJC Y'EEErFc|jDcgc]'\}}|jd|jdf)c}}Scc}}wrDrErs r%rwz Headers.itemss7SWS]S]^ZS%I& Y(?@^^^s,Ac|jjd}|jDcgc]\}}||k(s |jdc}}Scc}}wrD)r?r@rr>)rErIget_header_keyrrs r%rzHeaders.getlistsI++I6IMr1E:W_cqWq !!),rrrs AAc4t|jddS)N)rA)MutableHeadersrrPs r% mutablecopyzHeaders.mutablecopys$**Q-00r$c|jjd}|jD]\}}||k(s |jdcSt |rD)r?r@rr>KeyErrorrErIrJ header_key header_values r%rzHeaders.__getitem__ sU++I6(,  6 $J ^+#**955 6smr$cx|jjd}|jD] \}}||k(s yy)Nr2TF)r?r@rrPs r%rzHeaders.__contains__'s@++I6(,   $J ^+ r$c4t|jSrRrrPs r%rzHeaders.__iter__.rr$c,t|jSrR)rrrPs r%rzHeaders.__len__1rr$czt|tsyt|jt|jk(Sr)r~rrrrs r%rzHeaders.__eq__4s,%)djj!VEKK%888r$c|jj}t|j}t |t |k(r|d|dS|d|j dS)Nrrz(raw=)rlrdictrwrrA)rEras_dicts r%rzHeaders.__repr__9s[^^,, tzz|$ w<3t9 $ \7+Q/ /U488,a00r$)NNN)r1zMapping[str, str] | NonerAz list[tuple[bytes, bytes]] | NonerGzMutableMapping[str, Any] | Nonerrrzlist[tuple[bytes, bytes]])r list[str])rzlist[tuple[str, str]])rIrrr[)rrL)rIrrrr)rz Iterator[Any]rrr)rr r!rrLrrArrrwrrMrrrrrrr#r$r%rrs -10415 C)C.C/ C  C&  DF_s1!9 1r$rc^eZdZd dZd dZd dZd dZeddZddZ ddZ d dZ dd Z y )rLc|jjd}|jd}g}t|jD]\}\}}||k(s|j |!t |ddD]}|j|=|r|d}||f|j|<y|jj ||fy)zs Set the header `key` to `value`, removing any duplicate entries. Retains insertion order. r2rgNrr?r@ enumeraterrreversed) rErIrJset_key set_value found_indexesidxrrs r%rzMutableHeaders.__setitem__Bs ))+$$Y/LL+ #% +4TZZ+@ * 'C'(J7"$$S) *M!"-. C 3  "C& 2DJJsO JJ  w 2 3r$c|jjd}g}t|jD]\}\}}||k(s|j |!t |D]}|j|=y)z* Remove the header `key`. r2Nr^)rErIdel_key pop_indexesrdrrs r%rzMutableHeaders.__delitem__Xsx))+$$Y/!# +4TZZ+@ ( 'C'(J7"""3' (K( C 3 r$ct|ts"td|jj|j ||SNzExpected a mapping but got )r~r TypeErrorrlrrvrs r%__ior__zMutableHeaders.__ior__fs;%)9%//:R:R9STU U E r$ct|ts"td|jj|j }|j ||Sri)r~rrjrlrrMrv)rErnews r%__or__zMutableHeaders.__or__lsI%)9%//:R:R9STU U  5 r$c|jSrRrrPs r%rAzMutableHeaders.rawss zzr$c|jjd}|jd}t|jD] \}\}}||k(s|j dcS|jj ||f|S)zo If the header `key` does not exist, then set it to `value`. Returns the header value. r2)r?r@r_rr>r)rErIrJrarbrdrrs r%rzMutableHeaders.setdefaultws ))+$$Y/LL+ +4TZZ+@ 4 'C'(J7"!((33 4 7I./ r$c>|jD] \}}|||< yrR)rw)rErrIvals r%rvzMutableHeaders.updates$  HCDI r$c|jjd}|jd}|jj||fy)zD Append a header, preserving any duplicate entries. r2N)r?r@rr)rErIrJ append_key append_values r%rzMutableHeaders.appends?YY['' 2 ||I.  :|45r$cZ|jd}|dj||g}||d<y)Nvaryr)r=r)rErwexistings r%add_vary_headerzMutableHeaders.add_vary_headers288F#  99h-.DV r$N)rIrrJrrrrIrrr)rMapping[str, str]rrLrZ)rIrrJrrr)rr{rr)rwrrr) rr r!rrrkrnrrArrvrryr#r$r%rLrLAs>4,    6r$rLcreZdZUdZded<d dfd ZddZddZddZddZ dd Z dd Z dd Z dd Z xZS)Statezm An object that can be used to store arbitrary state. Used for `request.state` and `app.state`. zdict[str, Any]_statec.|i}t|d|y)Nr~)r __setattr__)rEstaterls r%rLzState.__init__s =E He,r$c"||j|<yrRr~rs r%rzState.__setattr__  Cr$c |j|S#t$r2d}t|j|jj |wxYw)Nz!'{}' object has no attribute '{}')r~rOAttributeErrorformatrlr)rErImessages r% __getattr__zState.__getattr__sM O;;s# # O9G 0G0G!MN N Os ;A c|j|=yrRrrs r% __delattr__zState.__delattr__ KK r$c |j|SrRrrs r%rzState.__getitem__s{{3r$c"||j|<yrRrrs r%rzState.__setitem__rr$c|j|=yrRrrs r%rzState.__delitem__rr$c,t|jSrR)rr~rPs r%rzState.__iter__rr$c,t|jSrR)rr~rPs r%rz State.__len__rr$rR)rzdict[str, Any] | Noner )rIr rr r )rIrrr )rIrrJr rrrzrr)rr r!rr"rLrrrrrrrrrrs@r%r}r}s> - !O !! r$r})0 __future__rrecollections.abcrrrrrr r r r typingr rrrrr urllib.parserrrrstarlette.concurrencyrstarlette.typesrrr&r'compile IGNORECASEr?r*rrrrrrurrr:rrLr}r#r$r%rsD" rrrDDDD3!j : 3tD 2::NPRP]P] ^P9P9f!>?B*J5!"38,5!p1$S#X.1@EvEvP$!#zC'7"78$$J1gc3hJ1ZTWTn( ( r$