
    lKj                        d Z ddlmZ ddlZddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZmZ dd	lmZ d
dlmZ dZerddlZ G d deej0                        Z	 	 	 	 	 	 ddZddZ G d de      ZdefdefgZy)zOA Websocket Handler for emitting Jupyter server events.

.. versionadded:: 2.0
    )annotationsN)datetime)TYPE_CHECKINGAnycast)ensure_async)web	websocket)
authorizedws_authenticated)JupyterHandler   )
APIHandlereventsc                  \     e Zd ZdZeZd Ze fd       Z	 	 	 	 	 	 	 	 ddZ	ddZ
d Z xZS )	SubscribeWebsocketz+Websocket handler for subscribing to eventsc                   K   | j                   }t        | j                  j                  | |dd             d{   }|st	        j
                  d      y7 w)z{Handles authorization when
        attempting to subscribe to events emitted by
        Jupyter Server's eventbus.
        executer   Ni  )current_userr   
authorizeris_authorizedr	   	HTTPError)selfuserr   s      x/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/jupyter_server/services/events/handlers.pypre_getzSubscribeWebsocket.pre_get#   sX     
   'OO))$iJ
 

 --$$ 
s   7AAAc                   K   t        | j                                d{    t        |   |i |}|| d{    yy7 !7 w)zGet an event socket.N)r   r   superget)r   argskwargsres	__class__s       r   r   zSubscribeWebsocket.get0   sL      4<<>***gk4*6*?II  	+ s   AAAAAAc                n   K   t        dd|i|}| j                  t        j                  |             yw)zWrite an event message.	schema_idN )dictwrite_messagejsondumps)r   loggerr%   datacapsules        r   event_listenerz!SubscribeWebsocket.event_listener8   s1      33d34::g./s   35c                P    | j                   j                  | j                         y)zrRoutes events that are emitted by Jupyter Server's
        EventBus to a WebSocket client in the browser.
        listenerN)event_loggeradd_listenerr.   r   s    r   openzSubscribeWebsocket.open?   s!     	&&0C0C&D    c                P    | j                   j                  | j                         y)zHandle a socket close.r0   N)r2   remove_listenerr.   r4   s    r   on_closezSubscribeWebsocket.on_closeE   s    ))43F3F)Gr6   )r+   z!jupyter_events.logger.EventLoggerr%   strr,   dict[str, Any]returnNone)r<   r=   )__name__
__module____qualname____doc__AUTH_RESOURCEauth_resourcer   r   r   r.   r5   r9   __classcell__)r#   s   @r   r   r      sW     6!M%  070DG0O]0	0EHr6   r   c                V   h d}|D ]  }|| vsd| d}t        |       t        d| j                  d            }|j                  |      }t        t        d| j                  d                  }t        |j                        |k7  r!d|d|j                  d	| d
}t        |      y)zoValidates for required fields in the JSON request body and verifies that
    a registered schema/version exists>   r,   versionr%   z	Missing `z` in the JSON request body.r:   r%   rF   zUnregistered version: u   ≠z for ``N)	Exceptionr   r   r:   rF   )r,   registryrequired_keyskeymessager%   schemarF   s           r   validate_modelrN   J   s    
 5Md?!#&ABGG$$  UDHH[12I \\)$F$udhhy123G
6>>g%*7+S8J&QZP[[\]   &r6   c                    	 d| v rt        j                  | d   d      }|S d}	 |S # t        $ r}t        j                  dd      |d}~ww xY w)z+Parses timestamp from the JSON request body	timestampz%Y-%m-%dT%H:%M:%S%zZN  zFailed to parse timestamp from JSON request body,
            an ISO format datetime string with UTC offset is expected,
            for example, 2022-05-26T13:50:00+05:00Z)r   strptimerH   r	   r   )r,   rP   es      r   get_timestamprT   _   sn    $ ))${*;=STI  I   mm7

 	s   & & 	AAAc                  B    e Zd ZdZeZej                  ed               Z	y)EventHandlerzREST api handler for eventsc           	       K   | j                         }|t        j                  dd      	 t        || j                  j
                         | j                  j                  t        d|j                  d            t        d|j                  d            t        |             | j                  d	       | j                          y# t        $ r%}t        j                  dt        |            |d}~ww xY ww)
zEmit an event.NrQ   zNo JSON data providedr:   r%   r;   r,   )r%   r,   timestamp_override   )get_json_bodyr	   r   rN   r2   schemasemitr   r   rT   
set_statusfinishrH   r:   )r   payloadrS   s      r   postzEventHandler.postv   s      $$&?--%<==	47D$5$5$=$=>""ugkk+&>?*GKK,?@#0#9 # 
 OOC KKM 	4 --SV,!3	4s)   )C8BC C8	C5 C00C55C8N)
r>   r?   r@   rA   rB   rC   r	   authenticatedr   r`   r&   r6   r   rV   rV   q   s*    %!M4  4r6   rV   z/api/eventsz/api/events/subscribe)r,   r;   rI   z-jupyter_events.schema_registry.SchemaRegistryr<   r=   )r,   r;   r<   zdatetime | None)rA   
__future__r   r)   r   typingr   r   r   jupyter_core.utilsr   tornador	   r
   jupyter_server.auth.decoratorr   r   jupyter_server.base.handlersr   base.handlersr   rB   jupyter_events.loggerjupyter_eventsWebSocketHandlerr   rN   rT   rV   default_handlersr&   r6   r   <module>rm      s   
 #   + + + " F 7 '  ,H,H^!
!$Q!	!*$4: 4: \"12 r6   