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__/testclient.cpython-310.pyc
o

�hSm�@sddlmZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
Z
ddlmZmZddlZddlZddlZddlmZddlmZddlmZmZmZmZmZdd	lmZej d
krrddlm!Z!nddl"m!Z!zddl#Z#Wne$y�e%d��wej&gej'ej(j)fZ*ej&eegej+dfZ,ej&ege,fZ-ej&eeegej+dfZ.ej/e0ej1e0ej2e0e3ffZ4d!dd�Z5Gdd�d�Z6Gdd�dej7�Z8Gdd�de9�Z:Gdd�de#j;e�Z<Gdd�d�Z=Gdd�de#j>�Z?Gdd �d e#j@�ZAdS)"�)�annotationsN)�Future)�
GeneratorType)�unquote�urljoin)�StapledObjectStream)�is_async_callable)�ASGIApp�Message�Receive�Scope�Send)�WebSocketDisconnect)��
)�	TypeGuardzThe starlette.testclient module requires the httpx package to be installed.
You can install this with:
    $ pip install httpx
�app�ASGI2App | ASGI3App�return�TypeGuard[ASGI3App]cCst�|�r
t|d�St|�S)N�	__await__)�inspect�isclass�hasattrr�r�r�G/usr/local/CyberCP/lib/python3.10/site-packages/starlette/testclient.py�	_is_asgi3/s

rc@s$eZdZdZddd�Zddd�ZdS)�
_WrapASGI2z7
    Provide an ASGI3 interface onto an ASGI2 app.
    r�ASGI2Appr�NonecC�
||_dS�Nr)�selfrrrr�__init__:�
z_WrapASGI2.__init__�scoper�receiver�sendr
c�s �|�|�}|||�IdHdSr"r)r#r&r'r(�instancerrr�__call__=s�
z_WrapASGI2.__call__N)rrrr )r&rr'rr(r
rr )�__name__�
__module__�__qualname__�__doc__r$r*rrrrr5s
rc@seZdZUded<ded<dS)�
_AsyncBackend�str�backend�dict[str, typing.Any]�backend_optionsN)r+r,r-�__annotations__rrrrr/Bs
r/c@seZdZddd�ZdS)	�_Upgrade�session�WebSocketTestSessionrr cCr!r")r6)r#r6rrrr$Hr%z_Upgrade.__init__N)r6r7rr )r+r,r-r$rrrrr5Gsr5c@seZdZdZdS)�WebSocketDenialResponsez�
    A special case of `WebSocketDisconnect`, raised in the `TestClient` if the
    `WebSocket` is closed before being accepted with a `send_denial_response()`.
    N)r+r,r-r.rrrrr8Lsr8c@s�eZdZd8d	d
�Zd9dd�Zd:dd�Zd;dd�Zd<dd�Zd<dd�Zd=dd�Z	d>d!d"�Z
d?d@d&d'�ZdAdBd.d/�ZdCd0d1�Z
dDd2d3�ZdEd4d5�Zd?dFd6d7�Zd)S)Gr7r�ASGI3Appr&r�portal_factory�_PortalFactoryTyperr cCs"||_||_d|_||_d|_dSr")rr&�accepted_subprotocolr:�
extra_headers)r#rr&r:rrrr$Ws

zWebSocketTestSession.__init__cCs�t���T}|�|���|_}|�|j�\}}|�|j�|�|j	|j
�|�ddi�|��}|�
|�|�dd�|_|�dd�|_|�|jd�|��|_|Wd�S1s[wYdS)N�typezwebsocket.connect�subprotocol�headers��)�
contextlib�	ExitStack�
enter_contextr:�portal�
start_task�_run�callback�result�call�cancelr(r'�_raise_on_close�getr<r=�close�pop_all�
exit_stack)r#�stackrE�fut�cs�messagerrr�	__enter__cs


$�zWebSocketTestSession.__enter__�args�
typing.Any�bool | NonecGs|jj|�Sr")rP�__exit__�r#rVrrrrYrszWebSocketTestSession.__exit__�task_status�'anyio.abc.TaskStatus[anyio.CancelScope]c	�s6�t�tj�}|\}}t�tj�}|\}}|�z|�_|�M|�;t���'}||_||_|�|�|�|j	|j
|j�IdHt��IdHWd�n1sOwYWd�n1s^wYWd�n1smwYWd�n1s|wYWd�dSWd�dS1s�wYdS)zE
        The sub-thread in which the websocket session runs.
        N)
�anyio�create_memory_object_stream�math�inf�CancelScope�_receive_tx�_send_rx�startedrr&r'r(�
sleep_forever)	r#r[r(�send_tx�send_rxr'�
receive_tx�
receive_rxrSrrrrGus$�"
����PzWebSocketTestSession._runrTr
cCs�|ddkrt|�dd�|�dd�d��|ddkrJ|d	}|d
}g}	|��}|ddks1J�|�|d
�|�dd�s?nq%t||d�|�d��dS)Nr>zwebsocket.close�coderA�reason�)rjrkzwebsocket.http.response.start�statusr@Tzwebsocket.http.response.body�body�	more_bodyF�)�status_coder@�content)rrMr'�appendr8�join)r#rTrqr@rnrrrrL�s��z$WebSocketTestSession._raise_on_closecCs|j�|jj|�dSr")rErJrbr(�r#rTrrrr(��zWebSocketTestSession.send�datar0cC�|�d|d��dS)N�websocket.receive�r>�text�r(�r#rwrrr�	send_text��zWebSocketTestSession.send_text�bytescCrx)Nry�r>r�r|r}rrr�
send_bytes�rzWebSocketTestSession.send_bytesr{�mode� typing.Literal['text', 'binary']cCsFtj|ddd�}|dkr|�d|d��dS|�d|�d�d��dS)	N)�,�:F)�
separators�ensure_asciir{ryrz�utf-8r�)�json�dumpsr(�encode)r#rwr�r{rrr�	send_json�szWebSocketTestSession.send_jsonrANrj�intrk�
str | NonecCs|�d||d��dS)Nzwebsocket.disconnect)r>rjrkr|)r#rjrkrrrrN�rvzWebSocketTestSession.closecCs|j�|jj�Sr")rErJrcr'�r#rrrr'�szWebSocketTestSession.receivecC�"|��}|�|�t�t|d�S)Nr{)r'rL�typing�castr0rurrr�receive_text��
z!WebSocketTestSession.receive_textcCr�)Nr�)r'rLr�r�r�rurrr�
receive_bytes�r�z"WebSocketTestSession.receive_bytescCs<|��}|�|�|dkr|d}n|d�d�}t�|�S)Nr{r�r�)r'rL�decoder��loads)r#r�rTr{rrr�receive_json�s


z!WebSocketTestSession.receive_json)rr9r&rr:r;rr )rr7)rVrWrrX)r[r\rr �rTr
rr )rwr0rr )rwr�rr )r{)rwrWr�r�rr )rAN)rjr�rkr�rr �rr
)rr0)rr�)r�r�rrW)r+r,r-r$rUrYrGrLr(r~r�r�rNr'r�r�r�rrrrr7Vs










r7c@s&eZdZ		dddd�Zddd�ZdS)�_TestClientTransportTrlrr9r:r;�raise_server_exceptions�bool�	root_pathr0�client�tuple[str, int]�	app_stater2rr cCs(||_||_||_||_||_||_dSr")rr�r�r:r�r�)r#rr:r�r�r�r�rrrr$�s

z_TestClientTransport.__init__�request�
httpx.Request�httpx.Responsecs��jj}�jjjdd�}�jj}�jj}�jjjdd�}ddddd�|}d|vr6|�dd�\}}	t|	�}
n|}|}
d�j	vrBg}n|
|krNd	|�
�fg}nd	|�d|
���
�fg}|d
d��j	��D�7}|dvr��j	�d
d�}|durxg}
n
dd�|�d�D�}
dt
|�|�dd�d|j||�
�||j||
g|
|j��diid�}t|j||j�}t|��dd�jt
|�|�dd�d|j||�
�||j||
gdii|j��d�
}d�d�dt��i�d�d�d'���fdd�}d(������fd!d"�}z&|���}|�tj��|�|j|||�Wd�n	1�swYWnt�y6}z|j�r,|�WYd}~nd}~ww|j�rC��sBJd#��n��sNd$gt��d%��t��d� ���d<tj!d)i��d&�i��}�du�rp�|_"�|_#|S)*N�ascii)�encoding�Pi�)�http�ws�https�wssr���hostshostcSs$g|]\}}|����|��f�qSr)�lowerr���.0�key�valuerrr�
<listcomp>�s$z7_TestClientTransport.handle_request.<locals>.<listcomp>>r�r��sec-websocket-protocolcSsg|]}|���qSr)�strip)r�r�rrrr��sr��	websocket�?rzwebsocket.http.response)r>�path�raw_pathr��scheme�query_stringr@r��server�subprotocols�state�
extensionsr�z1.1�http.response.debug)
r>�http_version�methodr�r�r�r�r�r@r�r�r�r�F�streamrr
c�s���r���s���IdHddiS���}t|t�r!|�d�}n5|dur(d}n.t|t�rTz|�d�}t|t�r=|�d�}d|dd�WStySd�ddd�YSw|}d�d|d�S)	Nr>zhttp.disconnectr�rpzhttp.requestT)r>rnro)r>rn)	�is_set�wait�read�
isinstancer0r�rr(�
StopIteration)rn�
body_bytes�chunk)r��request_complete�response_completerrr's.�




�
z4_TestClientTransport.handle_request.<locals>.receiverTr c�s��|ddkr$�r
Jd��|d�d<dd�|�dg�D��d<d	�dS|dd
kra�s0Jd�����r8Jd��|�d
d�}|�dd�}�jdkrP�d�|�|s_�d�d����dSdS|ddkru|dd�|dd�dSdS)Nr>zhttp.response.startz1Received multiple "http.response.start" messages.rmrqcSs g|]\}}|��|��f�qSr)r�r�rrrr�>s zE_TestClientTransport.handle_request.<locals>.send.<locals>.<listcomp>r@Tzhttp.response.bodyz<Received "http.response.body" without "http.response.start".z7Received "http.response.body" after response completed.rnrproF�HEADr�rr��info�template�context)rMr�r��write�seek�set)rTrnro)r��
raw_kwargsr�r��response_startedr�rrr(8s*�
��z1_TestClientTransport.handle_request.<locals>.sendz(TestClient did not receive any response.i�)rqr@r�r�r�r�r)$�urlr��netlocr�r�r��query�splitr�r@r��multi_itemsrMrr�r�r��copyr7rr:r5r��io�BytesIOrJr]�Event�
BaseExceptionr��httpx�
ByteStreamr��Responser�r�)r#r�r�r�r�r�r��default_portr��port_string�portr@r?r�r&r6r'r(rE�exc�responser)r�r�r�r�r�r�r�r�handle_request�s�

��
������
z#_TestClientTransport.handle_requestN)Trl)rr9r:r;r�r�r�r0r�r�r�r2rr )r�r�rr�)r+r,r-r$r�rrrrr��s
�r�cs eZdZUdZded<dZded<					
					d]d^�fd d!�
Zejd_d#d$��Z	ddddddde
jje
jje
jjdd%�d`�fd;d<�Z
ddde
jje
jje
jjdd=�da�fd>d?�Zddde
jje
jje
jjdd=�da�fd@dA�Zddde
jje
jje
jjdd=�da�fdBdC�Zddddddde
jje
jje
jjdd%�db�fdDdE�Zddddddde
jje
jje
jjdd%�db�fdFdG�Zddddddde
jje
jje
jjdd%�db�fdHdI�Zddde
jje
jje
jjdd=�da�fdJdK�Z	dcdd�fdPdQ�
ZdedRdS�ZdfdUdV�ZdgdWdX�ZdgdYdZ�Zdgd[d\�Z�ZS)h�
TestClientFzFuture[None]�taskNzanyio.abc.BlockingPortal | NonerE�http://testserverTrl�asyncio��
testclientiP�rr	�base_urlr0r�r�r�r1�!typing.Literal['asyncio', 'trio']r3�dict[str, typing.Any] | None�cookies�httpx._types.CookieTypes | Noner@�dict[str, str] | None�follow_redirectsr�r�rr c
s�t||pid�|_t|�r|}n
t�t|�}t|�}||_i|_t	|j|j
|||j|
d�}|dur3i}|�dd�t�j
||||	|d�dS)N)r1r3)r:r�r�r�r�z
user-agentr�)r�r@�	transportr�r�)r/�
async_backendrr�r�rrrr�r��_portal_factory�
setdefault�superr$)
r#rr�r�r�r1r3r�r@r�r��asgi_appr���	__class__rrr$ms2
�
�zTestClient.__init__�6typing.Generator[anyio.abc.BlockingPortal, None, None]ccsX�|jdur|jVdStjjdi|j���}|VWd�dS1s%wYdS)Nr)rEr]�from_thread�start_blocking_portalr�)r#rErrrr��s�
"�zTestClient._portal_factory�rrrw�filesr��paramsr@r��authr��timeoutr�r�r��httpx._types.URLTypesrr�"httpx._types.RequestContent | Nonerw�_RequestData | Noner� httpx._types.RequestFiles | Noner�rWr�#httpx._types.QueryParamTypes | None�httpx._types.HeaderTypes | Noner�7httpx._types.AuthTypes | httpx._client.UseClientDefault�%bool | httpx._client.UseClientDefaultr�:httpx._types.TimeoutTypes | httpx._client.UseClientDefaultr�r�csF|tjurt�dt�|�|�}t�j|||||||||	|
|||
d�
S)Nz�You should not use the 'timeout' argument with the TestClient. See https://github.com/encode/starlette/issues/1108 for more information.r)r��USE_CLIENT_DEFAULT�warnings�warn�DeprecationWarning�
_merge_urlr�r�)r#r�r�rrrwrr�rr@r�rr�rr�r�rrr��s*
�
�zTestClient.request�rr@r�rr�rr�c	
�t�j||||||||d�S�Nr)r�rM�	r#r�rr@r�rr�rr�r�rrrM���zTestClient.getc	
rr)r��optionsrr�rrr�rzTestClient.optionsc	
rr)r��headrr�rrr�rzTestClient.headc
�$t�j|||||||||	|
||d�S�Nr)r��post�
r#r�rrrwrr�rr@r�rr�rr�r�rrr
��zTestClient.postc
rr)r��putrr�rrr!)r zTestClient.putc
rr)r��patchrr�rrr"Hr zTestClient.patchc	
rr)r��deleterr�rrr#grzTestClient.deleter��typing.Sequence[str] | None�kwargsr7c
s�td|�}|�di�}|�dd�|�dd�|�dd�|dur*|�d	d
�|��||d<zt�jd|fi|��Wtd��tyT}z
|j}WYd}~|Sd}~ww)
Nzws://testserverr@�
connection�upgradezsec-websocket-keyztestserver==zsec-websocket-version�13r�z, �GETzExpected WebSocket upgrade)	rrMr�rtr�r�r5r6�RuntimeError)r#r�r�r%r@r�r6r�rr�websocket_connect~s 
���zTestClient.websocket_connectcs�t���f}|�tjjdi�j����_�|jd�fdd��}t�	t
j�}t�	t
j�}g|�|�RD]}|�|j�q2t
|��_t
|��_���j��_���j�|jd��fdd��}|���_Wd��S1smwY�S)	Nrr cs
d�_dSr")rErr�rr�reset_portal�s
z*TestClient.__enter__.<locals>.reset_portalcs���j�dSr")rJ�
wait_shutdownr�rEr#rrr-�sz+TestClient.__enter__.<locals>.wait_shutdownr�rr )rBrCrDr]rrr�rErHr^r_r`rNr�stream_send�stream_receive�start_task_soon�lifespanr�rJ�wait_startuprOrP)r#rQr,r(r'�channelr-rr.rrU�s*
 
�
�


��zTestClient.__enter__rVcGs|j��dSr")rPrNrZrrrrY�szTestClient.__exit__c	�sX�d|jd�}z|�||jj|jj�IdHW|j�d�IdHdS|j�d�IdHw)Nr3)r>r�)r�rr1r'r0r()r#r&rrrr3�s
�*zTestClient.lifespanc�sb��j�ddi�IdHd	�fdd�}|�IdH}|ddvs!J�|ddkr/|�IdHdSdS)
Nr>zlifespan.startuprrWc��(��j��IdH}|dur�j��|Sr"�r0r'r�rI�rTr�rrr'��
�
z(TestClient.wait_startup.<locals>.receive)zlifespan.startup.complete�lifespan.startup.failedr:�rrW�r1r(�r#r'rTrr�rr4�s��zTestClient.wait_startupc�sb�d	�fdd�}�j�ddi�IdH|�IdH}|ddvs!J�|ddkr/|�IdHdSdS)
NrrWc�r6r"r7r8r�rrr'�r9z)TestClient.wait_shutdown.<locals>.receiver>zlifespan.shutdown)zlifespan.shutdown.complete�lifespan.shutdown.failedr>r;r<r=rr�rr-�s��zTestClient.wait_shutdown)	r�Trlr�NNNTr�)rr	r�r0r�r�r�r0r1r�r3r�r�r�r@r�r�r�r�r�rr )rr�)r�r0r�rrrrrwr	rr
r�rWrrr@rr�r�rr
r�rrrr�r�rr�)r�rrrr@rr�r�rr
r�rrrr�r�rr�)r�rrrrrwr	rr
r�rWrrr@rr�r�rr
r�rrrr�r�rr�r")r�r0r�r$r%rWrr7)rr�)rVrWrr r/)r+r,r-�__test__r4rEr$rB�contextmanagerr�r��_clientrr�rMrrrr!r"r#r+rUrYr3r4r-�
__classcell__rrr�rr�hs�
�(�,����#�#�#��



r�)rrrr)B�
__future__rrBrr�r�r_�sysr�r�concurrent.futuresr�typesr�urllib.parserrr]�	anyio.abc�anyio.from_thread�anyio.streams.stapledr�starlette._utilsr�starlette.typesr	r
rrr
�starlette.websocketsr�version_infor�typing_extensionsr��ModuleNotFoundErrorr*�Callable�ContextManager�abc�BlockingPortalr;�	Awaitable�ASGIInstancerr9�Mappingr0�Union�Iterabler��_RequestDatarr�	TypedDictr/�	Exceptionr5r�r8r7�
BaseTransportr��Clientr�rrrr�<module>s\
�� 


�
i*