XjTddlmZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z m Z mZmZddlmZddlmZmZddlmZddlmZddlmZdd lmZmZdd lmZddlZddl Zdd l!m"Z"dd l#m$Z$dd l%m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1GddZ2Gdde2Z3Gdde2Z4Gdde2Z5Gdde2Z6e7e8ze9zZ:e e:Z;e e:ZGdde?Z@Gdd e?ZAGd!d"e2ZBy)#) annotationsN) AsyncIterable AwaitableCallableIterableMappingSequence)datetime)format_datetime formatdate)partial) guess_type) token_hex)AnyLiteral)quote)create_collapsing_task_group)BackgroundTask)iterate_in_threadpool)URLHeadersMutableHeaders)ClientDisconnect)MessageReceiveScopeSendceZdZdZdZ d d dZd dZdddZeddZ d ddZ d ddZ dd Z dd Z y)ResponseNutf-8c||_|||_||_|j||_|j |yN) status_code media_type backgroundrenderbody init_headersselfcontentr#headersr$r%s g/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/starlette/responses.py__init__zResponse.__init__!s>'  !(DO$KK(  '"cp|yt|ttzr|S|j|jS)Nr/) isinstancebytes memoryviewencodecharsetr*r+s r-r&zResponse.render0s1 ? guz1 2N~~dll++r/c|g}d}d}nj|jDcgc]5\}}|jjd|jdf7}}}|Dcgc]}|d }}d|v}d|v}t|dd} | U|rS|jdksD|jdvs6t t | } |jd| jdf|j} | Y|rW| jd r$d | jvr| d |jzz } |jd| jdf||_ ycc}}wcc}w) NTlatin-1rscontent-lengths content-typer')i0ztext/zcharset=z ; charset=) itemslowerr4getattrr#strlenappendr$ startswithr5 raw_headers) r*r,rBpopulate_content_lengthpopulate_content_typekvhkeysr'content_length content_types r-r(zResponse.init_headers7sW ?57K&* #$( !ZaZgZgZijRVRSUVAGGI,,Y7)9LMjKj"-.QAaD.D.&7t&C #$34$? !tVT*  '%%+t/?/?:/M T^N    1>3H3H3ST U  #(=&&w/JlFXFXFZ4Z t|| ;;   1D1DY1OP Q&)k.s :E E cht|dst|j|_|jS)N_headersraw)hasattrrrBrL)r*s r-r,zResponse.headersSs(tZ(*t/?/?@DM}}r/c 8tjj} || |<||| |d<|,t|trt |d| |d<n|| |d<||| |d<||| |d<|rd| |d<|rd| |d<| !| j d vsJd | | |d <| r&tjd kr td d| |d<| jdj} |jjd| jdfy)Nzmax-ageTusegmtexpirespathdomainsecurehttponly)strictlaxnonez1samesite must be either 'strict', 'lax' or 'none'samesite)z@Partitioned cookies are only supported in Python 3.14 and above. partitioned)headers set-cookier8)httpcookies SimpleCookier1r r r<sys version_info ValueErroroutputstriprBr@r4) r*keyvaluemax_agerSrTrUrVrWr[r^cookie cookie_vals r- set_cookiezResponse.set_cookieYsY04||/H/H/Js  %,F3K "  '8,)8)Ns I&)0s I&  "&F3K   $*F3K ! $(F3K ! &*F3K #  >>#( CC  C '/F3K # ') !cdd)-F3K &]]"]-335   0A0A)0L MNr/c 6|j|dd|||||y)Nr)rkrSrTrUrVrWr[)rn)r*rirTrUrVrWr[s r- delete_cookiezResponse.delete_cookies-    r/cdfd }|S)NcZK|d}|dvr i|dd|zi}|d{y7w)Ntype>http.response.bodyhttp.response.startz websocket.)message message_typesends r-wrappedz5Response._wrap_websocket_denial_send..wrappeds<"6?LLLJWJfl\.IJw-  s +)+)rwrreturnNonerv)r*ryrzs ` r-_wrap_websocket_denial_sendz$Response._wrap_websocket_denial_sends r/cK|ddk(r|j|}|d|j|jdd{|d|jdd{|j|j d{yy7G7,7 w)Nrs websocketrursstatusr,rt)rsr')r}r#rBr'r%)r*scopereceiverys r-__call__zResponse.__call__s =K '33D9D1T=M=MZ^ZjZjklll0$))DEEE ?? &//# # # ' mE $s4=B BB B #B B B  B  B )Nr9NNN r+rr#intr,Mapping[str, str] | Noner$ str | Noner%BackgroundTask | Noner{r|)r+rr{zbytes | memoryviewr")r,rr{r|)r{r) r_NN/NFFrYF)rir>rjr>rkz int | NonerSzdatetime | str | int | NonerTrrUrrVboolrWrr['Literal['lax', 'strict', 'none'] | Noner^rr{r|)rNFFrY)rir>rTr>rUrrVrrWrr[rr{r|)ryrr{rrrrrryrr{r|)__name__ __module__ __qualname__r$r5r.r&r(propertyr,rnrpr}rrvr/r-rrsyJG,0!%,0 # # #* #  # * #  #,'8"/3!r,)r*urlr#r,r%rs r-r.zRedirectResponse.__init__s6 +w[ef#(S8M#N Z r/)i3NN) rz str | URLr#rr,rr%rr{r|)rrrr.rrs@r-rrsO,0,0 O OO* O * O  OOr/rcXeZdZUded< d d dZd dZd dZd dZy) StreamingResponseAsyncContentStream body_iteratorNct|tr||_nt||_||_| |j n||_||_|j|yr")r1rrrr#r$r%r(r)s r-r.zStreamingResponse.__init__sR g} -!(D !6w!?D &-7-?$//Z$ '"r/cBK |d{}|ddk(ry7w)Nrszhttp.disconnectrv)r*rrws r-listen_for_disconnectz'StreamingResponse.listen_for_disconnects*#IoGv"33%s cLK|d|j|jdd{|j23d{}t|tt zs|j |j}|d|ddd{P7`7M7 6|ddddd{7yw)NrurrtTrsr' more_bodyr/F)r#rBrr1r2r3r4r5)r*rychunks r-stream_responsez!StreamingResponse.stream_responses1T=M=MZ^ZjZjklll-- Y Y%eUZ%78 T\\2 4eRVWX X X m Y Y. 0#ERSSSsN$B$BB$B B B AB$B B$ B  B$ B$B B$c 4K|ddk(rO|j|}|j|d{|j|jd{ytt t |j dij ddjd}|dk\r |j|d{nst4d{d fd }j|t|j||t|j|d{dddd{|j|jd{yy7+7 7#t$r twxYw77[7M#1d{7swY]xYw7@w) Nrsrasgi spec_versionz2.0.)cdK|d{jjy7wr") cancel_scopecancel)func task_groups r-wrapz(StreamingResponse.__call__..wraps'&LL++224!s 0. 0)rzCallable[[], Awaitable[None]]r{r|)r}rr%tuplemaprgetsplitOSErrorrr start_soonr r)r*rrryrrrs @r-rzStreamingResponse.__call__s =K '33D9D&&t, , ,*oo''' Seii&;&?&?PU&V&\&\]`&abc 6 ! )**400045 I I5%%dGD4H4H$,OP74#=#=wGHHH I I ?? &//# # # '- -'1 )&(( ) II I I I I $s.FE#FEAF)E$=E">E$FE;FA F!E="F& F1E?2#FFFF"E$$E88F=F?FFF FFr) r+ ContentStreamr#rr,rr$rr%rr{r|)rrr{r|)ryrr{r|r)rrr__annotations__r.rrrrvr/r-rrse%% ,0!%,0 ###* #  # * # #" T$r/rceZdZdddZy)MalformedRangeHeaderc||_yr")r+r6s r-r.zMalformedRangeHeader.__init__s  r/N)zMalformed range header.)r+r>r{r|rrrr.rvr/r-rrsr/rceZdZddZy)RangeNotSatisfiablec||_yr")max_size)r*rs r-r.zRangeNotSatisfiable.__init__$s   r/N)rrr{r|rrvr/r-rr#s!r/rceZdZdZ d ddZddZddZddZ ddZ ddZ dd Z e dd Z e dd Z dd Zy) FileResponseiNc ||_||_||_|t|xs|dxsd}||_||_|j ||jjdd|jZt|j} | |jk7r|d| } n|d|jd} |jjd| ||_ ||j|yy) Nrzapplication/octet-streamz accept-rangesr2z; filename*=utf-8''z ; filename=""zcontent-disposition) rTr#filenamerr$r%r(r, setdefaultr stat_resultset_stat_headers) r*rTr#r,r$r%rrcontent_disposition_typecontent_disposition_filenamecontent_dispositions r-r.zFileResponse.__init__+s &   #H$45a8Vst_sizer st_mtimehashlibmd5r4 hexdigestr,r)r*rrI last_modified etag_basers r-rzFileResponse.set_stat_headersJs[001";#7#7E  ,,-3c+:M:M6NN 7;;y//15ISSUVVWX  0.A ? -r/cbK|d}|dk(xr|djdk(}|dk(xrd|jdiv}|dk(r|j|}|j tj j tj|jd{}|j||j}tj|s%td|jd |j}t| } | jd } | jd } | | -|j!| s|j#|||d{n |j%| |j&} t3| dk(r0| d\}}|j5||||j&|d{n&|j7|| |j&|d{|j8|j9d{yy7b#t$rtd|jd wxYw7#t($r2} t+| j,d|||d{7cYd} ~ Sd} ~ wt.$r9} t+ddd| j0i}||||d{7cYd} ~ Sd} ~ wwxYw777w)NrsramethodHEADhttp.response.pathsend extensionsrz File at path z is not a file.z does not exist.)rrangezif-rangei)r#iz Content-Rangezbytes */)r#r,r)upperrr}ranyio to_threadrun_syncosstatrTrst_modeS_ISREG RuntimeErrorFileNotFoundErrorr_should_use_range_handle_simple_parse_range_headerrrrr+rrr?_handle_single_range_handle_multiple_rangesr%)r*rrry scope_typesend_header_only send_pathsendrmoder, http_range http_if_rangerangesexcresponsestartends r-rzFileResponse.__call__Ts6] %/UE(O4I4I4Kv4U"f,h1IUYYWcegMh1h  $33D9D    # S$)OO$<$Q>QR6{a#AY s//eS+BUBUWghhh224ATATVfggg ?? &//# # # 'AQ$ P"]499+=M#NOO P M( cL.s{{LUT[]abbbb& <,ZbcfcocobpXqFrs%eWd;;;; < ig $sA J/#;HHH4BJ/H)J/H+68J/.J)/&J/J+#J/9J-:J/H#H&&J/+ J&4"I!II!J&J/! J&-)J!JJ!J&J/!J&&J/+J/-J/cVK|d|j|jdd{|r|ddddd{y|r'|dt|jdd{yt j |jd d{4d{}d }|rR|j |jd{}t||jk(}|d||dd{|rRdddd{y7777z7s7N7$7#1d{7swYyxYww) Nrurrtr/Frr)rsrTrbrT) r#rBr>rTr open_fileread chunk_sizer?)r*ryrrfilerrs r-rzFileResponse._handle_simples1T=M=MZ^ZjZjklll  4cPUVW W W  8#dii.QR R R"__TYYTBB f fd "&))DOO"<D?D)D)D) D) D)DDD)D&D D&"D)cKtt|j}d|d|dz d||d<t||z |d<|dd |jd d{|r|d d d dd{yt j |jdd{4d{}|j|d{d}|rt|jt|j||z d{} |t| z }t| |jk(xr||k}|d | |dd{|rtdddd{y777777c7$7#1d{7swYyxYww)NrMzbytes rrrz content-rangerrurrtr/FrrrT) rlistrBr>rNrrrTseekrminrr?) r*ryr r file_sizerr,rrrs r-rz!FileResponse._handle_single_ranges{!T$*:*:%;<%+E7!C!G9Ai[#I $'e $4 !1SW[[YZZZ  4cPUVW W W"__TYYTBB f fdii&&& "&))Cu,M"NNESZ'E #E doo = M%#+I(rNrrrTrrrrr?r4) r*ryr rrboundaryrIheader_generatorr,rr rrs r-rz$FileResponse._handle_multiple_rangessR=+/+B+B Hin)E, ((!T$*:*:%;<$CH:"N$'$7 !1SW[[YZZZ  4cPUVW W W"__TYYTBB  d"(cJE3(G"F5G"F8)G"F;G" F= G" G ,F?-G G4G :G;!G G G 'G 6G7(G G  G $ G"/G 0G"8G";G"=G"?G G G G G  G  G" GG GG"cN||jdk(xs||jdk(S)Nrr)r,)r*r s r-rzFileResponse._should_use_ranges- _ ==fRVR^R^_eRfAffr/cZg} |jdd\}}|jj }|dk7r td|j |}t |dk(r tdtfd|Dr ttd|Dr td t |dk(r|S|j|dg}|ddD]7\}}|d \} } || kr| t| |f|d <%|j||f9|S#t$r twxYw) N=rr2zOnly support bytes rangerz%Range header: range must be requestedc3FK|]\}}d|cxkxrknc yw)rNrv).0r _rs r- z3FileResponse._parse_range_header..s"CqA**+Cs!c3,K|] \}}||kDywr"rv)r&r rs r-r(z3FileResponse._parse_range_header..s4zucus{4sz)Range header: start must be less than end) rrfrrhr< _parse_rangesr?anyrsortmaxr@) clsrrr unitsrange_resultr r last_startlast_ends ` r-rz FileResponse._parse_range_headersG(* )&,,S!4ME6 ##% G &'AB B""695 v;! &'NO O CFC C%i0 0 4V4 4&'RS S v;! M  )/  * ,JE3#)": J (#h*<=r  ucl+  , A )&( ( )s DD*cg}|jdD]}|j}|r|dk(rd|vr |jdd\}}|j}|j} |r t|nt|t|z d}|r|rt||krt|dzn|}|j ||f|S#t $rYwxYw)Nrrrr)rrhrr.r@rf) r/r1rr part start_strend_strr rs r-r+zFileResponse._parse_rangess(*LL% D::yw)rN)r?r>)r&r rstatic_header_part_lens r-r(z2FileResponse.generate_multipart..&sK sU_s3sQw<0 03I IU{  sAArc Lddd|d|dz dd jdS) Nrz Content-Type: z Content-Range: bytes rrrz r8)r4)r rr rJrs r-z1FileResponse.generate_multipart../sL * nWAcAgYaz2 fYr/)r?r>sum)r*r r rrJ boundary_lenrIr<s ``` @r-rzFileResponse.generate_multipart sn08} !#l!2S5F!FSQY]I[![ %         r/)r9NNNNN attachment)rTzstr | os.PathLike[str]r#rr,rr$rr%rrrrzos.stat_result | Nonerr>r{r|)rzos.stat_resultr{r|r)ryrrrrrr{r|) ryrr rrrrrrrr{r|) ryrr list[tuple[int, int]]rrrrr{r|)r r>r{r)rr>rrr{rB)r1r>rrr{rB) r zSequence[tuple[int, int]]r r>rrrJr>r{z'tuple[int, Callable[[int, int], bytes]])rrrrr.rrrrrr classmethodrr+rrvr/r-rr(sbJ ,0!%,0#-1(4/$//* /  / * //+/#&/ />.*$X fff!$f+.f;>fRVf f&""&" "  "  "Hg$$L8+ )+ +  +  + 1 + r/r)C __future__rr http.cookiesrarrrrdcollections.abcrrrrrr r email.utilsr r functoolsr mimetypesrsecretsrtypingrr urllib.parserranyio.to_threadstarlette._utilsrstarlette.backgroundrstarlette.concurrencyrstarlette.datastructuresrrrstarlette.requestsrstarlette.typesrrrrrrrrrr>r2r3ContentSyncContentStreamrrr Exceptionrrrrvr/r-rWs" [[3  9/7AA/99M$M$`88. Ox O + "W%"7+"%66 =$=$@9 !)! O 8O r/