§
     @g¾-  ã                   ó  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZ  ej        e¦  «        Z G d	„ d
¦  «        Z	 d dlm Z  e j!        Z"ej!        e _!        d„ Z#n # e$$ r e %                    d¦  «         Y nw xY w G d„ d¦  «        Z&dee'e(e&ef         de)de'fd„Z*ee)e'e(e&f         Z+ee+         Z,ee+         Z-ee-e,f         Z. G d„ de¦  «        Z/dS )é    N)Údatetime)Úpartial)	ÚAnyÚAsyncIterableÚ	AwaitableÚCallableÚ	CoroutineÚIteratorÚMappingÚOptionalÚUnion)ÚBackgroundTask)Úiterate_in_threadpool)ÚResponse)ÚReceiveÚScopeÚSendc                   óV   — e Zd ZU dZdZdZeej        df         e	d<   e
d„ ¦   «         ZdS )Ú	AppStatusz8helper for monkey-patching the signal-handler of uvicornFNÚshould_exit_eventc                  óŠ   — dt           _        t           j        �t           j                             ¦   «          t	          | i |¤Ž d S )NT)r   Úshould_exitr   ÚsetÚoriginal_handler)ÚargsÚkwargss     úE/var/www/piapp/venv/lib/python3.11/site-packages/sse_starlette/sse.pyÚhandle_exitzAppStatus.handle_exit"   sC   € ð !%�	ÔåÔ&Ð2ÝÔ'×+Ò+Ñ-Ô-Ð-Ý˜$Ð) &Ð)Ð)Ð)Ð)Ð)ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   ÚanyioÚEventÚ__annotations__Ústaticmethodr   © r   r   r   r      sW   € € € € € € ØBÐBà€KØ26Ð�u˜Uœ[¨$Ð.Ô/Ð6Ð6Ñ6àð*ð *ñ „\ð*ð *ð *r   r   )ÚServerc                  ó(   — t           t          _        dS )zxrestores original signal-handler and rolls back monkey-patching.
        Normally this should not be necessary.
        N)r   r)   r   r(   r   r   Úunpatch_uvicorn_signal_handlerr+   2   s   € õ .�ÔÐÐr   zUvicorn not used.c                   ó˜   — e Zd Z	 dddddddœdee         dee         dee         dee         dee         dee         d	dfd
„Zd	efd„Z	dS )ÚServerSentEventN)ÚeventÚidÚretryÚcommentÚsepÚdatar.   r/   r0   r1   r2   Úreturnc                ó¬   — || _         || _        || _        || _        || _        d| _        t          j        d¦  «        | _        |�|n| j        | _	        dS )aø  Send data using EventSource protocol

        :param str data: The data field for the message.
        :param str id: The event ID to set the EventSource object's last
            event ID value to.
        :param str event: The event's type. If this is specified, an event will
            be dispatched on the browser to the listener for the specified
            event name; the web site would use addEventListener() to listen
            for named events. The default event type is "message".
        :param int retry: Instruct the client to try reconnecting after *at least* the
            given number of milliseconds has passed in case of connection loss. Setting
            to 0 does not prevent reconnect attempts, a clean disconnect must be
            implemented on top of the SSE protocol if required (eg. as a special event
            type). The spec requires client to not attempt reconnecting if it receives a
            HTTP 204 No Content response. If a non-integer value is specified, the field
            is ignored.
        :param str comment: A colon as the first character of a line is essence
            a comment, and is ignored. Usually used as a ping message to keep connecting.
            If set, this will be a comment message.
        ú
z
\r\n|\r|\nN)
r3   r.   r/   r0   r1   ÚDEFAULT_SEPARATORÚreÚcompileÚLINE_SEP_EXPRÚ_sep)Úselfr3   r.   r/   r0   r1   r2   s          r   Ú__init__zServerSentEvent.__init__=   sW   € ð< ˆŒ	ØˆŒ
ØˆŒØˆŒ
ØˆŒØ!'ˆÔÝœZ¨Ñ6Ô6ˆÔØ˜?�C�C°Ô0FˆŒ	ˆ	ˆ	r   c                 ót  — t          j        ¦   «         }| j        �a| j                             t          | j        ¦  «        ¦  «        D ]4}|                     d|› �¦  «         |                     | j        ¦  «         Œ5| j        �P|                     | j         	                    dd| j        › �¦  «        ¦  «         |                     | j        ¦  «         | j
        �P|                     | j         	                    dd| j
        › �¦  «        ¦  «         |                     | j        ¦  «         | j        �a| j                             t          | j        ¦  «        ¦  «        D ]4}|                     d|› �¦  «         |                     | j        ¦  «         Œ5| j        �`t          | j        t          ¦  «        st          d¦  «        ‚|                     d| j        › �¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                     ¦   «                              d¦  «        S )	Nz: Ú zid: zevent: zdata: zretry argument must be intzretry: zutf-8)ÚioÚStringIOr1   r:   ÚsplitÚstrÚwriter;   r/   Úsubr.   r3   r0   Ú
isinstanceÚintÚ	TypeErrorÚgetvalueÚencode)r<   ÚbufferÚchunks      r   rJ   zServerSentEvent.encoded   sö  € Ý”‘”ˆØŒ<Ð#ØÔ+×1Ò1µ#°d´lÑ2CÔ2CÑDÔDð (ð (�Ø—’˜\ %˜\˜\Ñ*Ô*Ð*Ø—’˜TœYÑ'Ô'Ð'Ð'àŒ7ÐØ�LŠL˜Ô+×/Ò/°Ð4D¸4¼7Ð4DÐ4DÑEÔEÑFÔFÐFØ�LŠL˜œÑ#Ô#Ð#àŒ:Ð!Ø�LŠL˜Ô+×/Ò/°Ð4J¸d¼jÐ4JÐ4JÑKÔKÑLÔLÐLØ�LŠL˜œÑ#Ô#Ð#àŒ9Ð ØÔ+×1Ò1µ#°d´i±.´.ÑAÔAð (ð (�Ø—’Ð- eÐ-Ð-Ñ.Ô.Ð.Ø—’˜TœYÑ'Ô'Ð'Ð'àŒ:Ð!Ý˜dœj­#Ñ.Ô.ð >ÝÐ <Ñ=Ô=Ð=Ø�LŠLÐ/ 4¤:Ð/Ð/Ñ0Ô0Ð0Ø�LŠL˜œÑ#Ô#Ð#à�Š�T”YÑÔÐØ�ŠÑ Ô ×'Ò'¨Ñ0Ô0Ð0r   ©N)
r    r!   r"   r   r   rC   rG   r=   ÚbytesrJ   r(   r   r   r-   r-   <   sÓ   € € € € € ð #ð%Gð  $Ø Ø#Ø!%Ø!ð%Gð %Gð %Gà�sŒmð%Gð ˜Œ}ð	%Gð
 �SŒMð%Gð ˜Œ}ð%Gð ˜#”ð%Gð �cŒ]ð%Gð 
ð%Gð %Gð %Gð %GðN1˜ð 1ð 1ð 1ð 1ð 1ð 1r   r-   r3   r2   r4   c                 óR  — t          | t          ¦  «        r| S t          | t          ¦  «        r|                      ¦   «         S t          | t          ¦  «        r#|| d<   t          di | ¤Ž                     ¦   «         S t          t          | ¦  «        |¬¦  «                             ¦   «         S )Nr2   )r2   r(   )rF   rN   r-   rJ   ÚdictrC   )r3   r2   s     r   Úensure_bytesrQ   ‚   s™   € Ý�$�ÑÔð <ØˆÝ	�D�/Ñ	*Ô	*ð <Ø�{Š{‰}Œ}ÐÝ	�D�$Ñ	Ô	ð <ØˆˆU‰ÝÐ&Ð& Ð&Ð&×-Ò-Ñ/Ô/Ð/å�s 4™yœy¨cÐ2Ñ2Ô2×9Ò9Ñ;Ô;Ð;r   c                   óÐ  — e Zd ZU dZeed<   dZ	 	 	 	 	 	 	 	 d!deded	e	e
eef                  d
ede	e         de	e         de	e         de	eg ef                  de	eg ed         f                  ddfd„Zededdfd„¦   «         Zed"d„¦   «         Zdeddfd„Zdedededdfd„Zd#deddfd„Zedeeef         fd„¦   «         Zej        deeef         ddfd„¦   «         Zdeddfd „Z dS )$ÚEventSourceResponsezãImplements the ServerSentEvent Protocol:
    https://www.w3.org/TR/2009/WD-eventsource-20090421/

    Responses must not be compressed by middleware in order to work.
    implementation based on Starlette StreamingResponse
    Úbody_iteratoré   éÈ   Nútext/event-streamÚcontentÚstatus_codeÚheadersÚ
media_typeÚ
backgroundÚpingr2   Úping_message_factoryÚdata_sender_callable)NNNr4   c
                 ó&  — |�|dvrt          d|› �¦  «        ‚d| _        |�|n| j        | _        || _        t	          |t
          ¦  «        r|| _        nt          |¦  «        | _        || _        |€| j	        n|| _	        || _
        |	| _        i }
|�|
                     |¦  «         |
                     dd¦  «         d|
d<   d|
d	<   |                      |
¦  «         |€| j        n|| _        d
| _        d | _        t'          j        ¦   «         | _        d S )N)r6   úú
z'sep must be one of: \r\n, \r, \n, got: r6   zCache-Controlzno-cachez
keep-aliveÚ
ConnectionÚnozX-Accel-BufferingT)Ú
ValueErrorr7   r2   r^   rF   r   rT   r   rY   r[   r\   r_   ÚupdateÚ
setdefaultÚinit_headersÚDEFAULT_PING_INTERVALÚping_intervalÚactiveÚ
_ping_taskr$   ÚLockÚ
_send_lock)r<   rX   rY   rZ   r[   r\   r]   r2   r^   r_   Ú_headerss              r   r=   zEventSourceResponse.__init__¡   s7  € ð ˆ?˜sÐ*>Ð>Ð>ÝÐPÈ3ÐPÐPÑQÔQÐQØ!'ˆÔØ˜/�3�3¨tÔ/EˆŒà$8ˆÔ!å�g�}Ñ-Ô-ð 	@Ø!(ˆDÔÐå!6°wÑ!?Ô!?ˆDÔØ&ˆÔØ-7Ð-?˜$œ/˜/ÀZˆŒØ$ˆŒØ$8ˆÔ!à#%ˆØÐØ�OŠO˜GÑ$Ô$Ð$ð
 	×Ò˜O¨ZÑ8Ô8Ð8Ø!-ˆ�ÑØ(,ˆÐ$Ñ%à×Ò˜(Ñ#Ô#Ð#à;?¸<˜TÔ7Ð7ÈTˆÔØˆŒàˆŒõ  œ*™,œ,ˆŒˆˆr   Úreceivec              ƒ   óz   K  — 	  | ¦   «         ƒ d {V —†}|d         dk    rt                                d¦  «         d S Œ9)NTÚtypezhttp.disconnectz+Got event: http.disconnect. Stop streaming.)Ú_logÚdebug)rp   Úmessages     r   Úlisten_for_disconnectz)EventSourceResponse.listen_for_disconnectÔ   sO   è è € ð	Ø#˜G™IœI�o�o�o�o�o�oˆGØ�vŒÐ"3Ò3Ð3Ý—
’
ÐHÑIÔIÐIØ�ð		r   c               ƒ   óÜ   K  — t           j        rd S t           j        €t          j        ¦   «         t           _        t           j        rd S t           j                             ¦   «         ƒ d {V —† d S rM   )r   r   r   r$   r%   Úwaitr(   r   r   Úlisten_for_exit_signalz*EventSourceResponse.listen_for_exit_signalÜ   sr   è è € õ Ô ð 	ØˆFõ Ô&Ð.Ý*/¬+©-¬-�IÔ'õ Ô ð 	ØˆFõ Ô)×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0r   Úsendc              ƒ   ó¶  K  —  |d| j         | j        dœ¦  «        ƒ d {V —† | j        2 3 d {V —†}t          || j        ¦  «        }t
                               d|                     ¦   «         › �¦  «          |d|ddœ¦  «        ƒ d {V —† Œa6 | j        4 ƒd {V —† d| _	         |ddddœ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )	Nzhttp.response.start)rr   ÚstatusrZ   zchunk: úhttp.response.bodyT©rr   ÚbodyÚ	more_bodyFr   )
rY   Úraw_headersrT   rQ   r2   rs   rt   Údecodern   rk   )r<   rz   r3   rL   s       r   Ústream_responsez#EventSourceResponse.stream_responseí   s  è è € Øˆdà-ØÔ*ØÔ+ðð ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Ô,ð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Y�$Ý   t¤xÑ0Ô0ˆEÝ�JŠJÐ1 §¢¡¤Ð1Ð1Ñ2Ô2Ð2Ø�$Ð 4¸eÐRVÐWÐWÑXÔXÐXÐXÐXÐXÐXÐXÐXÐXð -ð
 ”?ð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	XØˆDŒKØ�$Ð 4¸cÐPUÐVÐVÑWÔWÐWÐWÐWÐWÐWÐWÐWð	Xð 	Xð 	Xñ 	Xô 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xøøøð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xs   ©B
ÂCÃ
CÃCÚscopec              ƒ   ót  ‡K  — t          j        ¦   «         4 ƒd {V —†Šdt          g t          d          f         dd fˆfd„}‰                     |t          | j        |¦  «        ¦  «         ‰                     |t          | j        |¦  «        ¦  «         ‰                     || j        ¦  «         | j	        r‰                     | j	        ¦  «          |t          | j
        |¦  «        ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   | j        �|                      ¦   «         ƒ d {V —† d S d S )NÚfuncr4   c              “   ó^   •K  —  | ¦   «         ƒ d {V —† ‰j                              ¦   «          d S rM   )Úcancel_scopeÚcancel)r†   Ú
task_groups    €r   Úwrapz*EventSourceResponse.__call__.<locals>.wrap  s9   øè è € Ø�d‘f”f�������àÔ'×.Ò.Ñ0Ô0Ð0Ð0Ð0r   )r$   Úcreate_task_groupr   r   Ú
start_soonr   rƒ   Ú_pingry   r_   rv   r\   )r<   r„   rp   rz   r‹   rŠ   s        @r   Ú__call__zEventSourceResponse.__call__þ   s
  øè è € ÝÔ*Ñ,Ô,ð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	E°
ð1¥¨"­i¸¬oÐ*=Ô!>ð 1À4ð 1ð 1ð 1ð 1ð 1ð 1ð
 ×!Ò! $­°Ô0DÀdÑ(KÔ(KÑLÔLÐLØ×!Ò! $­°´
¸DÑ(AÔ(AÑBÔBÐBØ×!Ò! $¨Ô(CÑDÔDÐDàÔ(ð AØ×%Ò% dÔ&?Ñ@Ô@Ð@à�$•w˜tÔ9¸7ÑCÔCÑDÔDÐDÐDÐDÐDÐDÐDÐDð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð  Œ?Ð&Ø—/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð 'Ð&s   �CDÄ
DÄDFÚforcec                 ó   — t           ‚rM   )ÚNotImplementedError)r<   r�   s     r   Úenable_compressionz&EventSourceResponse.enable_compression  s   € Ý!Ð!r   c                 ó   — | j         S )z'Time interval between two ping massages)Ú_ping_interval)r<   s    r   rj   z!EventSourceResponse.ping_interval  s   € ð Ô"Ð"r   Úvaluec                 ó”   — t          |t          t          f¦  «        st          d¦  «        ‚|dk     rt	          d¦  «        ‚|| _        dS )zoSetter for ping_interval property.

        :param int value: interval in sec between two ping values.
        zping interval must be intr   z$ping interval must be greater then 0N)rF   rG   ÚfloatrH   re   r•   )r<   r–   s     r   rj   z!EventSourceResponse.ping_interval  sO   € õ ˜%¥#¥u Ñ.Ô.ð 	9ÝÐ7Ñ8Ô8Ð8Ø�1Š9ˆ9ÝÐCÑDÔDÐDà#ˆÔÐÐr   c              ƒ   ór  K  — | j         �r,t          j        | j        ¦  «        ƒ d {V —† | j        rt          | j        t          ¦  «        sJ ‚| j        €6t          dt          j	        ¦   «         › �¬¦  «         
                    ¦   «         n&t          |                      ¦   «         | j        ¦  «        }t                               d|                     ¦   «         › �¦  «         | j        4 ƒd {V —† | j         r |d|ddœ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   | j         �°*d S d S )Nzping - )r1   zping: r}   Tr~   )rk   r$   Úsleepr•   r^   rF   r   r-   r   ÚutcnowrJ   rQ   r2   rs   rt   r‚   rn   )r<   rz   r]   s      r   rŽ   zEventSourceResponse._ping(  sý  è è € ð Œkñ 	Ý”+˜dÔ1Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ØÔ(ð GÝ! $Ô";½XÑFÔFÐFÐFÐFð Ô,Ð4õ  Ð(Eµ(´/Ñ2CÔ2CÐ(EÐ(EÐFÑFÔF×MÒMÑOÔOÐOå! $×";Ò";Ñ"=Ô"=¸t¼xÑHÔHð õ
 �JŠJÐ/ §¢¡¤Ð/Ð/Ñ0Ô0Ð0Ø”ð ð ð ð ð ð ð ð Ø”;ð Ø˜$Ø!5¸tÐRVÐWÐWñô ð ð ð ð ð ð ð ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð Œkñ 	ð 	ð 	ð 	ð 	s   Ã-DÄ
D&Ä)D&)rV   NrW   NNNNN)r4   N)F)!r    r!   r"   r#   ÚAsyncContentStreamr&   ri   ÚContentStreamrG   r   r   rC   r   r   r-   r	   r=   r'   r   rv   ry   r   rƒ   r   r�   Úboolr“   Úpropertyr   r˜   rj   ÚsetterrŽ   r(   r   r   rS   rS   ”   sh  € € € € € € ðð ð &Ð%Ð%Ñ%àÐð Ø/3Ø-Ø/3Ø"Ø!ØHLð ð1'ð 1'àð1'ð ð1'ð ˜' # s (Ô+Ô,ð	1'ð
 ð1'ð ˜^Ô,ð1'ð �sŒmð1'ð �cŒ]ð1'ð ' x°°OÐ0CÔ'DÔEð1'ð 'Ø�R˜Ð#3Ô4Ð4Ô5ô
ð1'ð 
ð1'ð 1'ð 1'ð 1'ðf ð¨Wð ¸ð ð ð ñ „\ðð ð1ð 1ð 1ñ „\ð1ð X¨$ð X°4ð Xð Xð Xð Xð"$ Eð $°Gð $À4ð $ÈDð $ð $ð $ð $ð("ð "¨ð "¸ð "ð "ð "ð "ð ð#˜u S¨% ZÔ0ð #ð #ð #ñ „Xð#ð Ôð$ 5¨¨e¨Ô#4ð $¸ð $ð $ð $ñ Ôð$ð ð ¨ð ð ð ð ð ð r   rS   )0r@   Úloggingr8   r   Ú	functoolsr   Útypingr   r   r   r   r	   r
   r   r   r   r$   Ústarlette.backgroundr   Ústarlette.concurrencyr   Ústarlette.responsesr   Ústarlette.typesr   r   r   Ú	getLoggerr    rs   r   Úuvicorn.mainr)   r   r   r+   ÚModuleNotFoundErrorrt   r-   rN   rP   rC   rQ   ÚContentÚSyncContentStreamrœ   r�   rS   r(   r   r   ú<module>r­      s¢  ðØ 	€	€	€	Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð €€€Ø /Ð /Ð /Ð /Ð /Ð /Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø (Ð (Ð (Ð (Ð (Ð (Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à€wÔ˜Ñ"Ô"€ð*ð *ð *ð *ð *ñ *ô *ð *ð $Ø#Ð#Ð#Ð#Ð#Ð#àÔ)ÐØ"Ô.€FÔð.ð .ð .ð .øð ð $ð $ð $Ø‡J‚JÐ"Ñ#Ô#Ð#Ð#Ð#ð$øøøðC1ð C1ð C1ð C1ð C1ñ C1ô C1ð C1ðL	<�u˜U D¨/¸3Ð>Ô?ð 	<Àcð 	<Èeð 	<ð 	<ð 	<ð 	<ð ��U˜D /Ð1Ô
2€Ø˜WÔ%Ð Ø" 7Ô+Ð ØÐ(Ð*;Ð;Ô<€ðhð hð hð hð h˜(ñ hô hð hð hð hs   Á-B
 Â
B'Â&B'