o
    ùT·jh  ã                   @  sê  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZm Z  ddl!m"Z" d	dl#m$Z$m%Z% d	dl&m'Z' d	dl(m)Z) d	dl*m+Z+ edd�G dd„ dƒƒZ,G dd„ de-ƒZ.G dd„ de-ƒZ/eƒ Z0de1d< e 2¡ Z3dBd$d%„Z4dBd&d'„Z5dCd,d-„Z6dDd2d3„Z7G d4d5„ d5ƒZ8G d6d7„ d7ƒZ9G d8d9„ d9ƒZ:G d:d;„ d;ƒZ;G d<d=„ d=ƒZ<G d>d?„ d?ƒZ=G d@dA„ dAƒZ>dS )Eé    )ÚannotationsN)ÚTracebackType)ÚAnyÚcast)ÚWeakSet)Údeque)Ú	dataclass)ÚSelfé   )Úomit)Úmaybe_transform)Ú
model_copy)Ú	BaseModel)ÚWebSocketConnectionClosedError)ÚResponseÚResponseStreamEventé   )ÚResponseStreamState)ÚResponsesConnectionÚAsyncResponsesConnection)ÚResponsesClientEvent)ÚResponsesServerEvent)ÚResponsesClientEventParamT)Úfrozenc                   @  sP   e Zd ZU dZded< ded< ded< ded< ded< dZd	ed
< ddd„ZdS )ÚResponsesWebSocketLimitsaØ  Application-selected limits for the opt-in session, not server limits.

    Byte counts use received message bytes, before parsing. They bound
    buffered event data, not transport framing, decoding, or Python object overhead.
    ``max_response_bytes`` optionally bounds the total event data fed into one
    accumulator; its default of ``None`` leaves response accumulation uncapped.
    Choose values appropriate to your output, including images and tool results.
    ÚintÚ	max_lanesÚmax_events_per_laneÚ
max_eventsÚmax_bytes_per_laneÚ	max_bytesNú
int | NoneÚmax_response_bytesÚreturnÚNonec                 C  sP   t | ƒ ¡ D ]\}}|dkr|d u rqt|tƒr!t|tƒs!|dkr%tdƒ‚qd S )Nr"   r   z2WebSocket session limits must be positive integers)ÚvarsÚitemsÚ
isinstancer   ÚboolÚ
ValueError)ÚselfÚnameÚvalue© r-   új/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/openai/lib/responses_websocket/_session.pyÚ__post_init__.   s   ÿýz&ResponsesWebSocketLimits.__post_init__©r#   r$   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r"   r/   r-   r-   r-   r.   r      s   
 	r   c                   @  s   e Zd ZdZdS )ÚResponsesWebSocketBufferErrorzDA session or response exceeded an application-selected buffer limit.N)r1   r2   r3   r4   r-   r-   r-   r.   r6   6   s    r6   c                      s"   e Zd ZdZd‡ fdd„Z‡  ZS )	ÚResponsesWebSocketErrorzNA request-scoped protocol error. The original event is available as ``event``.Úeventr   r#   r$   c                   s   t ƒ  d¡ || _d S )Nz7The Responses WebSocket request returned an error event)ÚsuperÚ__init__r8   )r*   r8   ©Ú	__class__r-   r.   r:   =   s   
z ResponsesWebSocketError.__init__)r8   r   r#   r$   )r1   r2   r3   r4   r:   Ú__classcell__r-   r-   r;   r.   r7   :   s    r7   zWeakSet[object]Ú_claimedÚ
connectionÚobjectr#   r$   c                 C  sD   t � | tv rtdƒ‚t | ¡ W d   ƒ d S 1 sw   Y  d S )Nz/This connection already has a WebSocket session)Ú_claim_lockr>   ÚRuntimeErrorÚadd©r?   r-   r-   r.   Ú_claimF   s
   "ýrE   c                 C  s4   t � t | ¡ W d   ƒ d S 1 sw   Y  d S ©N)rA   r>   ÚdiscardrD   r-   r-   r.   Ú_releaseM   s   "ÿrH   r8   r+   Ústrr   c                 C  s&   t | tƒrtd| ƒ |¡S t| |d ƒS )Nzdict[str, Any])r'   Údictr   ÚgetÚgetattr)r8   r+   r-   r-   r.   Ú_fieldR   s   &rM   ú0ResponsesClientEvent | ResponsesClientEventParamÚ	stream_idú
str | Noneútuple[str, bool]c                 C  st   t | tƒr| jdd�nt| ƒ}t| d¡dkƒ}|r0d|v r(|d |kr(tdƒ‚|d ur0||d< t t	|t
ƒ¡|fS )NT)Úexclude_unsetÚtypezresponse.createrO   z-The command stream_id does not match its lane)r'   r   Úto_dictrJ   r(   rK   r)   ÚjsonÚdumpsr   r   )r8   rO   ÚdataÚ	is_creater-   r-   r.   Ú_commandV   s   rY   c                   @  s    e Zd Zddd„Zddd„ZdS )Ú_AccumulatorÚlimitr!   r#   r$   c                 C  s"   || _ d| _d | _d | _d | _d S )Nr   )r[   ÚsizeÚstateÚfinalÚerror)r*   r[   r-   r-   r.   r:   b   s
   
z_Accumulator.__init__r8   r   r\   r   c                   sˆ  t |dƒ}|dkrdˆ _d ˆ _d ˆ _tttd�ˆ _|dkr-d ˆ _dˆ _d ˆ _t|ƒˆ _d S ˆ jd ur4d S |dv }|dv }|rIt |dƒd u rItd	ƒ‚|sM|riˆ  j|7  _ˆ j	d uriˆ jˆ j	krid ˆ _d ˆ _t
d
ƒ‚ˆ jd ur}|r}ˆ j ttt|dd�ƒ¡ |rÂttt |dƒƒˆ _|dkr—ˆ jd ur—ˆ jjˆ _n#ˆ jd urºtˆ jdd ƒd u rºtˆ jƒˆ _‡ fdd„tˆ jjƒD ƒˆ j_d ˆ _dˆ _d S d S )NrS   úresponse.createdr   )Úinput_toolsÚtext_formatr_   >   úresponse.output_item.doner`   úresponse.completed>   úresponse.failedrd   úresponse.incompleteÚresponsez,Terminal WebSocket event is missing responsez1Response accumulation exceeded max_response_bytesT)Údeeprd   Úoutputc                   s   g | ]}ˆ j j| ‘qS r-   )r]   Ú_completed_output)Ú.0Úindex©r*   r-   r.   Ú
<listcomp>“   s    ÿz$_Accumulator.add.<locals>.<listcomp>)rM   r\   r^   r_   r   r   r]   r7   r)   r[   r6   Úhandle_eventr   r   r   r   Ú_completed_responserL   Úsortedrj   ri   )r*   r8   r\   ÚkindÚ
compatibleÚterminalr-   rm   r.   rC   i   sL   





ÿ
öz_Accumulator.addN)r[   r!   r#   r$   ©r8   r   r\   r   r#   r$   )r1   r2   r3   r:   rC   r-   r-   r-   r.   rZ   a   s    
rZ   c                   @  s   e Zd Zd
dd„Zd	S )Ú
_LaneStaterO   rP   r[   r!   r#   r$   c                 C  sJ   || _ tƒ | _d| _d| _d| _d | _d| _d| _t	 
¡ | _t|ƒ| _d S ©Nr   F)rO   r   Úqueuer\   ÚclosedÚ	in_flightÚclosed_connectionÚreceived_generationÚconsumed_generationÚasyncioÚEventÚwakerZ   Úaccumulator)r*   rO   r[   r-   r-   r.   r:   ›   s   
z_LaneState.__init__N)rO   rP   r[   r!   r#   r$   )r1   r2   r3   r:   r-   r-   r-   r.   rv   š   s    rv   c                   @  s^   e Zd Zd%dd„Zd&dd„Zd'dd„Zd(dd„Zd)dd„Zd*d+dd„Zd,dd „Z	d-d#d$„Z
dS ).Ú_RouterÚlimitsr   r?   ú.ResponsesConnection | AsyncResponsesConnectionr#   r$   c                 C  sD   || _ || _t ¡ | _i | _d| _d| _d| _d | _	|  
d ¡| _d S rw   )r?   rƒ   Ú	threadingÚ	ConditionÚ	conditionÚlanesÚeventsr\   Úendedr_   ÚregisterÚdefault)r*   rƒ   r?   r-   r-   r.   r:   ©   s   
z_Router.__init__rO   r@   rv   c                 C  s¸   |d urt |tƒrt d|¡d u rtdƒ‚| j�: | jr tdƒ‚|| jv r)tdƒ‚t	| jƒ| j
jkr6tdƒ‚t|| j
jƒ}|| j|< |d u rI|| _|W  d   ƒ S 1 sUw   Y  d S )Nz[A-Za-z0-9_.-]{1,256}uX   stream_id must be None or 1â€“256 ASCII letters, digits, underscores, hyphens or periodszThe WebSocket session has endedz0A lane with this stream_id is already registeredzThe session exceeded max_lanes)r'   rI   ÚreÚ	fullmatchr)   r‡   rŠ   rB   rˆ   Úlenrƒ   r   r6   rv   r"   rŒ   ©r*   rO   Úlaner-   r-   r.   r‹   ¶   s$   ÿ

$õz_Router.registerr‘   c                 C  sª   | j �H |jr	 W d   ƒ d S d|_| jj|_|  jt|jƒ8  _|  j|j8  _|j 	¡  d|_t
| jjƒ|_|j ¡  | j  ¡  W d   ƒ d S 1 sNw   Y  d S )NTr   )r‡   ry   r?   Ú_connectionr{   r‰   r�   rx   r\   ÚclearrZ   rƒ   r"   r�   r€   ÚsetÚ
notify_all©r*   r‘   r-   r-   r.   ÚdetachÈ   s   þ


"óz_Router.detachc                 C  s\   | j �! t| j ¡ ƒD ]\}}|jr|j|ur| j|= qW d   ƒ d S 1 s'w   Y  d S rF   )r‡   Úlistrˆ   r&   ry   r{   )r*   r?   rO   r‘   r-   r-   r.   ÚreconnectedØ   s   €ü"ÿz_Router.reconnectedr8   r   r\   r   c                 C  sN  | j �š | jr	 W d   ƒ d S t|dƒ}| j || j¡}|jr#| j}|jr/	 W d   ƒ d S t|jƒ| j	j
ksQ| j| j	jksQ|j| | j	jksQ| j| | j	jkrUtdƒ‚|j ||f¡ t|dƒ|jkrvt|dƒdkrv| jd7  _d|_| j|7  _|  j|7  _|  jd7  _|j ¡  | j  ¡  W d   ƒ d S 1 s w   Y  d S )NrO   z.The session exceeded its buffered event limitsrS   r`   é   T)r‡   rŠ   rM   rˆ   rK   rŒ   ry   r�   rx   rƒ   r   r‰   r   r\   r   r    r6   ÚappendrO   r|   rz   r€   r”   r•   )r*   r8   r\   rO   r‘   r-   r-   r.   Údispatchà   s4   þ
ø

"èz_Router.dispatchNr_   úBaseException | Nonec                 C  sf   | j �& d| _| jd u r|| _| j ¡ D ]}|j ¡  q| j  ¡  W d   ƒ d S 1 s,w   Y  d S )NT)r‡   rŠ   r_   rˆ   Úvaluesr€   r”   r•   )r*   r_   r‘   r-   r-   r.   Úfinishû   s   
"úz_Router.finishúResponsesServerEvent | Nonec              
   C  s  |j rtdƒ‚|jrw|j ¡ \}}| j|8  _|  j|8  _|  jd8  _t|dƒ|jkr0|S z	|j 	||¡ W n t
yS } z||j_d |j_W Y d }~nd }~ww t|dƒdkrg| jd7  _d|_|S t|dƒdv ru|j|jk|_|S | jr†| jd ur‚| j‚tdƒ‚d S )	NzThe WebSocket lane is detachedrš   rO   rS   r`   T>   r_   re   rd   rf   zThe WebSocket connection closed)ry   ÚEOFErrorrx   Úpopleftr\   r‰   rM   rO   r�   rC   Ú	Exceptionr_   r]   r}   rz   r|   rŠ   )r*   r‘   r8   r\   Úexcr-   r-   r.   Úpop  s8   €þþ
z_Router.poprX   r(   c                 C  sv   | j �. | js
|jrtdƒ‚|r)|jrtdƒ‚t| jjƒ|_d|_W d   ƒ d S W d   ƒ d S 1 s4w   Y  d S )Nú+The WebSocket session or lane is not activezGConsume the current response before sending another create on this laneT)	r‡   rŠ   ry   rB   rz   rZ   rƒ   r"   r�   )r*   r‘   rX   r-   r-   r.   Úprepare"  s   ù"ýz_Router.prepare)rƒ   r   r?   r„   r#   r$   )rO   r@   r#   rv   ©r‘   rv   r#   r$   ©r?   r@   r#   r$   ru   rF   )r_   r�   r#   r$   )r‘   rv   r#   r    )r‘   rv   rX   r(   r#   r$   )r1   r2   r3   r:   r‹   r—   r™   rœ   rŸ   r¥   r§   r-   r-   r-   r.   r‚   ¨   s    





	r‚   c                   @  sN   e Zd ZdZddd	„Zddd„Zddœddd„Zddœddd„Zddd„ZdS )ÚResponsesWebSocketLanea  A routed view of one session. ``close`` detaches it without closing the socket.

    Use a single consumer per lane. Cancel a synchronous wait with ``recv(timeout=...)``;
    a timeout never consumes an event. Different lanes may be consumed concurrently.
    ÚsessionÚResponsesWebSocketSessionr]   rv   r#   r$   c                 C  ó   || _ || _d S rF   ©Ú_sessionÚ_state©r*   r«   r]   r-   r-   r.   r:   4  ó   
zResponsesWebSocketLane.__init__r8   rN   c                 C  sœ   | j jj}| j  | j¡ t|| jjƒ\}}| j jj�% | j jjr$t	dƒ‚|| j jjur/t	dƒ‚| j j
 | j|¡ W d   ƒ n1 sBw   Y  | |¡ d S )NúFThe WebSocket connection is reconnecting; restore state before sendingz>The WebSocket connection changed; restore state before sending)r¯   r?   r’   Ú_check_sendr°   rY   rO   Ú_connection_lockÚ_is_reconnectingrB   Ú_routerr§   Úsend©r*   r8   r?   rW   rX   r-   r-   r.   r¸   8  s   

ú	zResponsesWebSocketLane.sendN©Útimeoutr»   úfloat | Noner   c                C  s¶   | j jd u r
tdƒ‚|d u rd nt ¡ | }| j j}|j�4 	 | | j¡}|d ur2|W  d   ƒ S |d u r8d n|t ¡  }|d urJ|dkrJt	dƒ‚|j 
|¡ q1 sTw   Y  d S )Nú3Enter the WebSocket session before receiving eventsTr   z1Timed out waiting for a Responses WebSocket event)r¯   Ú_threadrB   ÚtimeÚ	monotonicr·   r‡   r¥   r°   ÚTimeoutErrorÚwait)r*   r»   ÚdeadlineÚrouterr8   Ú	remainingr-   r-   r.   ÚrecvI  s    üùÿzResponsesWebSocketLane.recvr   c                C  sþ   |du rdnt  ¡ | }| jj}| jjjdurK| jj|krK| jj|krK|du r)dntd|t  ¡  ƒ}| j|d� | jjjdurK| jj|krK| jj|ks#| jjjdu rz| jjj	dur^| jjj	‚|du rddntd|t  ¡  ƒ}| j|d� | jjjdu sR| jjjS )zNConsume this response's remaining events; failed/incomplete are final results.Ng        rº   )
r¿   rÀ   r°   r}   r�   r^   r|   ÚmaxrÆ   r_   )r*   r»   rÃ   Ú
generationrÅ   r-   r-   r.   Úget_final_responseX  s"   û
ü
z)ResponsesWebSocketLane.get_final_responsec                 C  ó   | j j | j¡ d S rF   ©r¯   r·   r—   r°   rm   r-   r-   r.   Úclosej  ó   zResponsesWebSocketLane.close)r«   r¬   r]   rv   r#   r$   ©r8   rN   r#   r$   )r»   r¼   r#   r   )r»   r¼   r#   r   r0   ©	r1   r2   r3   r4   r:   r¸   rÆ   rÉ   rÌ   r-   r-   r-   r.   rª   -  s    

rª   c                   @  sb   e Zd ZdZd%dd	„Zd&dd„Zd'dd„Zd(dd„Zd)d*dd„Zd+dd „Z	d'd!d"„Z
d'd#d$„ZdS ),r¬   a`  Own one existing connection and route its events with one background reader.

    Enter the session before sending. While active, consume events only through
    its lanes, not the connection's recv/iterator/dispatch_events. Closing the
    session closes its connection; closing a lane does not. Register lanes before
    sending requests. Events for unregistered lanes go to the default lane for
    inspection, without changing its response state. Every registered lane, including
    the default and closed lanes, reserves its ID and max_lanes slot until reconnect.
    Keep a lane open for sequential responses. Reconnect releases closed lanes;
    open lanes remain registered on the new socket.

    Recovery remains the existing connection's opt-in policy. Reconnecting a
    transport does not restore server-side response state or replay lane sends.
    r?   r   rƒ   r   r#   r$   c                C  s8   || _ t||ƒ| _d | _d| _d| _t| | jjƒ| _d S ©NF)r?   r‚   r·   r¾   Ú_closedÚ_owns_connectionrª   rŒ   ©r*   r?   rƒ   r-   r-   r.   r:   ~  ó   z"ResponsesWebSocketSession.__init__r	   c                 C  sl   | j d us| jrtdƒ‚t| jƒ d| _tj| jddd�| _ z| j  	¡  W | S  t
y5   |  ¡  d | _ ‚ w )Nú,A WebSocket session can only be entered onceTúresponses-websocket)Útargetr+   Údaemon)r¾   rÑ   rB   rE   r?   rÒ   r…   ÚThreadÚ_readÚstartr£   Ú_release_connectionrm   r-   r-   r.   Ú	__enter__†  s   
üýz#ResponsesWebSocketSession.__enter__c                 C  sR   t � | jrt | j¡ d| _W d   ƒ d S W d   ƒ d S 1 s"w   Y  d S rÐ   )rA   rÒ   r>   rG   r?   rm   r-   r-   r.   rÜ   ”  s   ý"ÿz-ResponsesWebSocketSession._release_connectionÚexc_typeútype[BaseException] | Noner¤   r�   Ú	tracebackúTracebackType | Nonec                 C  s.   z|   ¡  W d S  ty   |d u r‚ Y d S w rF   ©rÌ   r£   ©r*   rÞ   r¤   rà   r-   r-   r.   Ú__exit__›  s   ÿÿz"ResponsesWebSocketSession.__exit__NrO   rP   rª   c                 C  ó$   t | | j |¡ƒ}|d u r|| _|S rF   )rª   r·   r‹   rŒ   r�   r-   r-   r.   r‘   ¤  ó   zResponsesWebSocketSession.laner‘   rv   c                 C  ó:   | j d u s| js| jjs|jrtdƒ‚| jjrtdƒ‚d S ©Nr¦   r³   )r¾   rÑ   r·   rŠ   ry   rB   r?   r¶   r–   r-   r-   r.   r´   ª  ó
   ÿz%ResponsesWebSocketSession._check_sendc                 C  sH  ddl m}m} z�zR	 z| j ¡ }W n8 |y   Y n? |yJ } z$| j |¡r6| j | jj¡ W Y d }~q
| jj	 
¡ }|rEtd|d�|‚‚ d }~ww | j | j |¡t|ƒ¡ ~qW n) ty„ } z| j |¡ z| j ¡  W n	 tyy   Y nw W Y d }~nd }~ww W | j ¡  | jr”|  ¡  d S d S | j ¡  | jr£|  ¡  w w ©Nr   )ÚConnectionClosedOKÚConnectionClosedErrorTz0WebSocket connection closed with unsent messages)Úunsent_messages)Úwebsockets.exceptionsrë   rì   r?   Ú
recv_bytesÚ
_reconnectr·   r™   r’   Ú_send_queueÚdrainr   rœ   Úparse_eventr�   r£   rŸ   rÌ   rÑ   rÜ   ©r*   rë   rì   rW   r¤   Úunsentr-   r-   r.   rÚ   °  sV   ÿþ€÷
ðÿ€ü€
ÿ
ÿ
ÿzResponsesWebSocketSession._readc              	   C  sÂ   | j r| jd u s| j ¡ sd S d| _ | j ¡  | jd u rd S z%| j ¡  W | jt ¡ urB| jj	dd� | j ¡ r<t
dƒ‚|  ¡  d S d S | jt ¡ ur`| jj	dd� | j ¡ r[t
dƒ‚|  ¡  w w )NTé   rº   z7The Responses WebSocket reader did not stop after close)rÑ   r¾   Úis_aliver·   rŸ   r?   rÌ   r…   Úcurrent_threadÚjoinrB   rÜ   rm   r-   r-   r.   rÌ   Ð  s&   


ü

üzResponsesWebSocketSession.close)r?   r   rƒ   r   r#   r$   ©r#   r	   r0   ©rÞ   rß   r¤   r�   rà   rá   r#   r$   rF   )rO   rP   r#   rª   r¨   )r1   r2   r3   r4   r:   rÝ   rÜ   rä   r‘   r´   rÚ   rÌ   r-   r-   r-   r.   r¬   n  s    



	

 r¬   c                   @  sB   e Zd ZdZddd	„Zddd„Zddd„Zddd„Zddd„ZdS )ÚAsyncResponsesWebSocketLanezKAn async routed lane. Canceling a recv/final-response wait never closes it.r«   ÚAsyncResponsesWebSocketSessionr]   rv   r#   r$   c                 C  r­   rF   r®   r±   r-   r-   r.   r:   ä  r²   z$AsyncResponsesWebSocketLane.__init__r8   rN   c                 Ã  sR   �| j jj}| j  | j¡ t|| jjƒ\}}| j j | j|¡ | 	|¡I d H  d S rF   )
r¯   r?   r’   r´   r°   rY   rO   r·   r§   r¸   r¹   r-   r-   r.   r¸   è  s   €
z AsyncResponsesWebSocketLane.sendr   c                 Ã  sŒ   �| j jd u rtdƒ‚| j j}	 |j�! | | j¡}|d ur'|W  d   ƒ S | jj ¡  W d   ƒ n1 s7w   Y  | jj 	¡ I d H  q)Nr½   )
r¯   Ú_taskrB   r·   r‡   r¥   r°   r€   r“   rÂ   )r*   rÄ   r8   r-   r-   r.   rÆ   ñ  s   €ýüúz AsyncResponsesWebSocketLane.recvr   c                 Ã  s°   �| j j}| j jjd ur2| j j|kr2| j j|kr2|  ¡ I d H  | j jjd ur2| j j|kr2| j j|ks| j jjd u rS| j jjd urE| j jj‚|  ¡ I d H  | j jjd u s9| j jjS rF   )r°   r}   r�   r^   r|   rÆ   r_   )r*   rÈ   r-   r-   r.   rÉ   ý  s   €ü
ý
z.AsyncResponsesWebSocketLane.get_final_responsec                 C  rÊ   rF   rË   rm   r-   r-   r.   rÌ     rÍ   z!AsyncResponsesWebSocketLane.closeN)r«   rý   r]   rv   r#   r$   rÎ   )r#   r   )r#   r   r0   rÏ   r-   r-   r-   r.   rü   á  s    


	
rü   c                   @  sb   e Zd ZdZd'dd	„Zd(dd„Zd)dd„Zd*d+dd„Zd,dd„Zd-dd „Z	d-d!d"„Z
d.d%d&„ZdS )/rý   zOAsync counterpart of ResponsesWebSocketSession, owning the connection lifetime.r?   r   rƒ   r   r#   r$   c                C  s8   || _ t||ƒ| _d | _d | _d| _t| | jjƒ| _d S rÐ   )r?   r‚   r·   rþ   Ú_close_taskrÑ   rü   rŒ   rÓ   r-   r-   r.   r:     rÔ   z'AsyncResponsesWebSocketSession.__init__r	   c                 Ã  s<   �| j d us	| jrtdƒ‚t| jƒ tj|  ¡ dd�| _ | S )NrÕ   rÖ   ©r+   )rþ   rÑ   rB   rE   r?   r~   Úcreate_taskrÚ   rm   r-   r-   r.   Ú
__aenter__  s   €
z)AsyncResponsesWebSocketSession.__aenter__rÞ   rß   r¤   r�   rà   rá   c                 Ã  s6   �z
|   ¡ I d H  W d S  ty   |d u r‚ Y d S w rF   râ   rã   r-   r-   r.   Ú	__aexit__!  s   €ÿÿz(AsyncResponsesWebSocketSession.__aexit__NrO   rP   rü   c                 C  rå   rF   )rü   r·   r‹   rŒ   r�   r-   r-   r.   r‘   *  ræ   z#AsyncResponsesWebSocketSession.laner‘   rv   c                 C  rç   rè   )rþ   rÑ   r·   rŠ   ry   rB   r?   r¶   r–   r-   r-   r.   r´   0  ré   z*AsyncResponsesWebSocketSession._check_sendc                 Ã  sZ  �ddl m}m} z�zX	 z
| j ¡ I d H }W n; |y   Y nB |yQ } z'| j |¡I d H r=| j | jj¡ W Y d }~q| jj	 
¡ }|rLtd|d�|‚‚ d }~ww | j | j |¡t|ƒ¡ ~qW n4 tjyk   ‚  ty– } z | j |¡ z
| j ¡ I d H  W n	 ty‹   Y nw W Y d }~nd }~ww W | j ¡  d S W | j ¡  d S | j ¡  w rê   )rî   rë   rì   r?   rï   rð   r·   r™   r’   rñ   rò   r   rœ   ró   r�   r~   ÚCancelledErrorr£   rŸ   rÌ   rô   r-   r-   r.   rÚ   6  sR   €ÿþ€÷
ðþ€üñ€ z$AsyncResponsesWebSocketSession._readc                 Ã  sX   �| j d u r!d| _| j ¡  | jd u rd S tj|  | j¡dd�| _ t | j ¡I d H  d S )NTzresponses-websocket-closer   )	rÿ   rÑ   r·   rŸ   rþ   r~   r  Ú_closeÚshieldrm   r-   r-   r.   rÌ   W  s   €


z$AsyncResponsesWebSocketSession.closeÚreaderúasyncio.Task[None]c                 Ã  s\   �z&|  ¡  z|I d H  W n
 tjy   Y nw | j ¡ I d H  W t| jƒ d S t| jƒ w rF   )Úcancelr~   r  r?   rÌ   rH   )r*   r  r-   r-   r.   r  a  s   €þz%AsyncResponsesWebSocketSession._close)r?   r   rƒ   r   r#   r$   rú   rû   rF   )rO   rP   r#   rü   r¨   r0   )r  r  r#   r$   )r1   r2   r3   r4   r:   r  r  r‘   r´   rÚ   rÌ   r  r-   r-   r-   r.   rý     s    


	


!
rý   r©   )r8   r@   r+   rI   r#   r   )r8   rN   rO   rP   r#   rQ   )?Ú
__future__r   r�   rU   r¿   r~   r…   Útypesr   Útypingr   r   Úweakrefr   Úcollectionsr   Údataclassesr   Útyping_extensionsr	   Ú_typesr   Ú_utilsr   Ú_compatr   Ú_modelsr   Ú_exceptionsr   Útypes.responsesr   r   Ústreaming.responsesr   Úresources.responses.responsesr   r   Ú&types.responses.responses_client_eventr   Ú&types.responses.responses_server_eventr   Ú,types.responses.responses_client_event_paramr   r   rB   r6   r7   r>   r5   ÚLockrA   rE   rH   rM   rY   rZ   rv   r‚   rª   r¬   rü   rý   r-   r-   r-   r.   Ú<module>   sR    



9 As.