HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/lib/python3.10/site-packages/starlette/__pycache__/responses.cpython-310.pyc
o

�hO�@s�ddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddlm
Z
mZddlmZddlmZddlmZddlmZddlZddlZdd	lmZdd
lmZddlmZddlm Z m!Z!m"Z"dd
l#m$Z$ddl%m&Z&m'Z'm(Z(Gdd�d�Z)Gdd�de)�Z*Gdd�de)�Z+Gdd�de)�Z,Gdd�de)�Z-e	j.e/e0e1fZ2e	j3e2Z4e	j5e2Z6e	j.e6e4fZ7Gdd�de)�Z8Gdd�de9�Z:Gdd�de9�Z;e�<d�Z=Gd d!�d!e)�Z>dS)"�)�annotationsN)�datetime)�format_datetime�
formatdate)�partial)�
guess_type)�	token_hex)�quote)�collapse_excgroups)�BackgroundTask)�iterate_in_threadpool)�URL�Headers�MutableHeaders)�ClientDisconnect)�Receive�Scope�Sendc@s�eZdZdZdZ					d8d9dd�Zd:dd�Zd;d<dd�Zed=dd��Z									d>d?d,d-�Z
					d@dAd.d/�ZdBd6d7�ZdS)C�ResponseN�utf-8���content�
typing.Any�status_code�int�headers�typing.Mapping[str, str] | None�
media_type�
str | None�
background�BackgroundTask | None�return�NonecCs4||_|dur
||_||_|�|�|_|�|�dS�N)rrr�render�body�init_headers��selfrrrrr�r)�F/usr/local/CyberCP/lib/python3.10/site-packages/starlette/responses.py�__init__!szResponse.__init__�bytes | memoryviewcCs*|durdSt|ttf�r|S|�|j�S)N�)�
isinstance�bytes�
memoryview�encode�charset�r(rr)r)r*r$0s
zResponse.renderc	Cs�|durg}d}d}ndd�|��D�}dd�|D�}d|v}d|v}t|dd�}|durI|rI|jdksI|jd	vsItt|��}|�d|�d
�f�|j}|durn|rn|�d�rdd|�	�vrd|d
|j
7}|�d|�d
�f�||_dS)NTcSs(g|]\}}|���d�|�d�f�qS)�latin-1)�lowerr1)�.0�k�vr)r)r*�
<listcomp>=s(z)Response.init_headers.<locals>.<listcomp>cSsg|]}|d�qS)rr))r6�hr)r)r*r9>sscontent-lengthscontent-typer%r)��i0r4ztext/zcharset=z
; charset=)�items�getattrr�str�len�appendr1r�
startswithr5r2�raw_headers)	r(rrB�populate_content_length�populate_content_type�keysr%�content_length�content_typer)r)r*r&7s*�
zResponse.init_headersrcCst|d�st|jd�|_|jS)N�_headers)�raw)�hasattrrrBrH)r(r)r)r*rSs
zResponse.headers��/F�lax�keyr>�value�max_age�
int | None�expires�datetime | str | int | None�path�domain�secure�bool�httponly�samesite�.typing.Literal['lax', 'strict', 'none'] | Nonec
Cs�tj��}
||
|<|dur||
|d<|dur-t|t�r't|dd�|
|d<n||
|d<|dur7||
|d<|durA||
|d<|rId|
|d<|rQd|
|d<|	dure|	��d	vs_Jd
��|	|
|d<|
jdd
���}|j	�
d|�d�f�dS)Nzmax-ageT��usegmtrRrTrUrVrX)�strictrM�nonez1samesite must be either 'strict', 'lax' or 'none'rYrK)�headers
set-cookier4)�http�cookies�SimpleCookier.rrr5�output�striprBr@r1)r(rNrOrPrRrTrUrVrXrY�cookie�
cookie_valr)r)r*�
set_cookieYs.

�zResponse.set_cookiec
Cs|j|dd|||||d�dS)Nr)rPrRrTrUrVrXrY)rg)r(rNrTrUrVrXrYr)r)r*�
delete_cookie�s	
�zResponse.delete_cookie�scoper�receiver�sendrc�sn�|ddkr	dnd}||d|j|jd��IdH||d|jd��IdH|jdur5|��IdHdSdS)	N�type�	websocketz
websocket.rK�http.response.start�rl�statusr�http.response.body)rlr%)rrBr%r)r(rirjrk�prefixr)r)r*�__call__�s��
�
�zResponse.__call__)NrNNN�rrrrrrrrrr r!r")rrr!r,r#)rrr!r")r!r)rKNNrLNFFrM)rNr>rOr>rPrQrRrSrTrrUrrVrWrXrWrYrZr!r")rLNFFrM)rNr>rTr>rUrrVrWrXrWrYrZr!r"�rirrjrrkrr!r")
�__name__�
__module__�__qualname__rr2r+r$r&�propertyrrgrhrsr)r)r)r*rs:�
�*�rc@�eZdZdZdS)�HTMLResponsez	text/htmlN�rvrwrxrr)r)r)r*r{��r{c@rz)�PlainTextResponse�
text/plainNr|r)r)r)r*r~�r}r~cs6eZdZdZ				dd�fdd�
Zddd�Z�ZS)�JSONResponsezapplication/jsonrNrrrrrrrrrr r!r"cst��|||||�dSr#)�superr+r'��	__class__r)r*r+�szJSONResponse.__init__r/cCstj|ddddd��d�S)NF)�,�:)�ensure_ascii�	allow_nan�indent�
separatorsr)�json�dumpsr1r3r)r)r*r$�s��zJSONResponse.render�rNNNrt)rrr!r/)rvrwrxrr+r$�
__classcell__r)r)r�r*r��s�
r�cs&eZdZ			dd�fd
d�
Z�ZS)�RedirectResponse�3N�url�	str | URLrrrrrr r!r"cs.t�jd|||d�tt|�dd�|jd<dS)Nr-)rrrrz:/%#?=@[]!$&'()*+,;)�safe�location)r�r+r	r>r)r(r�rrrr�r)r*r+�szRedirectResponse.__init__)r�NN)
r�r�rrrrrr r!r")rvrwrxr+r�r)r)r�r*r��s
�r�c@sHeZdZUded<				dd dd�Zd!dd�Zd"dd�Zd#dd�ZdS)$�StreamingResponse�AsyncContentStream�
body_iteratorrNr�
ContentStreamrrrrrrrr r!r"cCsLt|tj�r
||_nt|�|_||_|dur|jn||_||_|�|�dSr#)	r.�typing�
AsyncIterabler�rrrrr&r'r)r)r*r+�s
zStreamingResponse.__init__rjrc�s"�	|�IdH}|ddkrdSq)NTrlzhttp.disconnectr))r(rj�messager)r)r*�listen_for_disconnect�s��z'StreamingResponse.listen_for_disconnectrkrc�s|�|d|j|jd��IdH|j2z3dHW}t|ttf�s$|�|j�}|d|dd��IdHq6|dddd��IdHdS)NrnrorqT�rlr%�	more_bodyr-F)rrBr�r.r/r0r1r2)r(rk�chunkr)r)r*�stream_response�s��
��z!StreamingResponse.stream_responserirc
�s�ttt|�di��dd��d���}|dkr,z
|�|�IdHWnWty+t��wt��Bt	�
�4IdH�'�d�fd
d�}��|t|j|��|t|j
|��IdHWd�IdHn1IdHsewYWd�n1stwY|jdur�|��IdHdSdS)
N�asgi�spec_versionz2.0�.)���func�+typing.Callable[[], typing.Awaitable[None]]r!r"c�s�|�IdH�j��dSr#)�cancel_scope�cancel)r���
task_groupr)r*�wrap	s�z(StreamingResponse.__call__.<locals>.wrap)r�r�r!r")�tuple�mapr�get�splitr��OSErrorrr
�anyio�create_task_group�
start_soonrr�r)r(rirjrkr�r�r)r�r*rs�s&�$�(���

�zStreamingResponse.__call__r�)rr�rrrrrrrr r!r")rjrr!r")rkrr!r"ru)rvrwrx�__annotations__r+r�r�rsr)r)r)r*r��s
�

r�c@seZdZd	d
dd�ZdS)�MalformedRangeHeader�Malformed range header.rr>r!r"cC�
||_dSr#)rr3r)r)r*r+�
zMalformedRangeHeader.__init__N)r�)rr>r!r"�rvrwrxr+r)r)r)r*r�sr�c@seZdZddd�ZdS)	�RangeNotSatisfiable�max_sizerr!r"cCr�r#)r�)r(r�r)r)r*r+r�zRangeNotSatisfiable.__init__N)r�rr!r"r�r)r)r)r*r�sr�z(\d*)-(\d*)c@s�eZdZdZ								d>d?dd�Zd@dd�ZdAd"d#�ZdBd&d'�ZdCd+d,�ZdDd/d0�Z	dEd2d3�Z
edFd5d6��ZdGd<d=�Z
dS)H�FileResponseirN�
attachmentrT�str | os.PathLike[str]rrrrrrrr �filename�stat_result�os.stat_result | None�method�content_disposition_typer>r!r"c
Cs�||_||_||_|durt�dt�|dur!t|p|�dp d}||_||_|�	|�|j
�dd�|jdurZt|j�}
|
|jkrJ|	�d|
��}n	|	�d|j�d�}|j
�d	|�||_
|durh|�|�dSdS)
Nz;The 'method' parameter is not used, and it will be removed.rrz
accept-rangesr/z; filename*=utf-8''z; filename="�"zcontent-disposition)rTrr��warnings�warn�DeprecationWarningrrrr&r�
setdefaultr	r��set_stat_headers)r(rTrrrrr�r�r�r��content_disposition_filename�content_dispositionr)r)r*r+$s0�



�zFileResponse.__init__�os.stat_resultcCs|t|j�}t|jdd�}t|j�dt|j�}dtj|��dd����d�}|j�	d|�|j�	d|�|j�	d	|�dS)
NTr[�-r�F)�usedforsecurity�content-length�
last-modified�etag)
r>�st_sizer�st_mtime�hashlib�md5r1�	hexdigestrr�)r(r�rF�
last_modified�	etag_baser�r)r)r*r�Is
zFileResponse.set_stat_headersrirrjrrkrc
�s��|d��dk}|jdurDztj�tj|j�IdH}|�|�Wnt	y1t
d|j�d���w|j}t�|�sCt
d|j�d���n|j}t
|d�}|�d�}|�d�}	|dusc|	durm|�|	�sm|�||�IdHnvz	|�||j�}
WnFty�}zt|jd	d
�|||�IdHWYd}~Sd}~wty�}ztddd
|j��id�}||||�IdHWYd}~Sd}~wwt|
�dkr�|
d\}
}|�||
||j|�IdHn|�||
|j|�IdH|jdur�|��IdHdSdS)Nr��HEADz
File at path z does not exist.z is not a file.)ri�rangezif-rangei�)ri�z
Content-Rangez*/)rr�r)�upperr�r��	to_thread�run_sync�os�statrTr��FileNotFoundError�RuntimeError�st_mode�S_ISREGrr��_should_use_range�_handle_simple�_parse_range_headerr�r�r~rr�r�r?�_handle_single_range�_handle_multiple_rangesr)r(rirjrk�send_header_onlyr��moder�
http_range�
http_if_range�ranges�exc�response�start�endr)r)r*rsSsH�
�
�


(���
�zFileResponse.__call__r�rWc	�s��|d|j|jd��IdH|r|dddd��IdHdStj|jdd�IdH4IdH�-}d	}|rN|�|j�IdH}t|�|jk}|d||d��IdH|s1Wd�IdHdS1IdHs_wYdS)
Nrnrorqr-Fr��rb�r�T)rrBr��	open_filerT�read�
chunk_sizer?)r(rkr��filer�r�r)r)r*r�zs� �.�zFileResponse._handle_simpler�r��	file_sizec		�s*�d|�d|d�d|��|jd<t||�|jd<|dd|jd	��IdH|r5|d
ddd
��IdHdStj|jdd�IdH4IdH�D}|�|�IdHd}|r}|�t|j	||��IdH}|t
|�7}t
|�|j	koo||k}|d
||d
��IdH|sQWd�IdHdS1IdHs�wYdS)Nzbytes r�r�rL�
content-ranger�rn��rorqr-Fr�r�r�T)rr>rBr�r�rT�seekr��minr�r?)	r(rkr�r�r�r�r�r�r�r)r)r*r��s �  �.�z!FileResponse._handle_single_ranger��list[tuple[int, int]]c	�s��td�}|�||||jd�\}}d|��|jd<t|�|jd<|dd|jd��IdH|r<|d	d
dd��IdHdStj|jd
d�IdH4IdH�m}|D]L\}	}
|d	||	|
�dd��IdH|�|	�IdH|	|
kr�|�	t
|j|
|	��IdH}|	t|�7}	|d	|dd��IdH|	|
ksl|d	ddd��IdHqN|d	d|�d��
d�dd��IdHWd�IdHdS1IdHs�wYdS)N�
zcontent-typezmultipart/byteranges; boundary=r�r�rnr�rorqr-Fr�r�r�T�
z
--z--
r4)r�generate_multipartrr>rBr�r�rTr�r�r�r�r?r1)r(rkr�r�r��boundaryrF�header_generatorr�r�r�r�r)r)r*r��s6�� ���.�z$FileResponse._handle_multiple_rangesr�cCs||jdkp
||jdkS)Nr�r�)r)r(r�r)r)r*r��szFileResponse._should_use_ranger�cs@g}z
|�dd�\}}Wn
tyt��w|����}|dkr%td���fdd�t�|�D�}t|�dkr;td��t�fd	d
�|D��rJt	���tdd
�|D��rWtd��t|�dkr_|Sg}|D]:\}}t
t|��D](}||\}	}
||
krzqm||	kr�|�|||f�nt||	�t
||
�f||<n|�||f�qc|S)
N�=r�r/zOnly support bytes rangecslg|]2}|dkr|drt|d�n�t|d�|dr1|dr1t|d��kr1t|d�dn�f�qS))rKrKrr�)r)r6�_�r�r)r*r9�s"�2�z4FileResponse._parse_range_header.<locals>.<listcomp>rz%Range header: range must be requestedc3s.�|]\}}d|ko�knVqdS)rNr))r6r�rrr)r*�	<genexpr>�s�,z3FileResponse._parse_range_header.<locals>.<genexpr>css�|]	\}}||kVqdSr#r)�r6r�r�r)r)r*r�s�z)Range header: start must be less than end)r��
ValueErrorr�rdr5�_RANGE_PATTERN�findallr?�anyr�r��insertr��maxr@)r�r�r��units�range_�resultr�r��p�p_start�p_endr)rr*r��sD�
�	�z FileResponse._parse_range_header� typing.Sequence[tuple[int, int]]rr�rG�.tuple[int, typing.Callable[[int, int], bytes]]csVt��}d|t��tt����t�fdd�|D��d|}|���fdd�fS)a�
        Multipart response headers generator.

        ```
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}--\n
        ```
        �,c3s<�|]\}}tt|��tt|d���||VqdS)r�N)r?r>r)�static_header_part_lenr)r*rs���
�z2FileResponse.generate_multipart.<locals>.<genexpr>�cs.d��d��d|�d|d�d��d��d�S)	Nz--z
Content-Type: z
Content-Range: bytes r�r�rLz

r4)r1)r�r�)rrGr�r)r*�<lambda>s&z1FileResponse.generate_multipart.<locals>.<lambda>)r?r>�sum)r(r�rr�rG�boundary_lenrFr))rrGr�rr*r�s���zFileResponse.generate_multipart)rNNNNNNr�)rTr�rrrrrrrr r�rr�r�r�rr�r>r!r")r�r�r!r"ru)rkrr�rWr!r")rkrr�rr�rr�rr�rWr!r")
rkrr�r�r�rr�rWr!r")r�r>r!rW)r�r>r�rr!r�)
r�rrr>r�rrGr>r!r)rvrwrxr�r+r�rsr�r�r�r��staticmethodr�rr)r)r)r*r�!s(�
%


'


#3r�)?�
__future__rr��http.cookiesr`r�r��rer�r�r�r�email.utilsrr�	functoolsr�	mimetypesr�secretsr�urllib.parser	r��anyio.to_thread�starlette._utilsr
�starlette.backgroundr�starlette.concurrencyr�starlette.datastructuresr
rr�starlette.requestsr�starlette.typesrrrrr{r~r�r��Unionr>r/r0�Content�Iterable�SyncContentStreamr�r�r�r��	Exceptionr�r��compiler
r�r)r)r)r*�<module>sL

@