
    Mh                        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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j                  ZddZddZ G d de          ZdefdefgZdS )zOA Websocket Handler for emitting Jupyter server events.

.. versionadded:: 2.0
    )annotationsN)datetime)TYPE_CHECKINGAnyOptionalcast)ensure_async)web	websocket)
authorizedws_authenticated)JupyterHandler   )
APIHandlereventsc                  P     e Zd ZdZeZd Ze fd            ZddZ	d Z
d Z xZS )SubscribeWebsocketz+Websocket handler for subscribing to eventsc                   K   | j         }t          | j                            | |dd                     d{V }|st	          j        d          dS )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      g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyter_server/services/events/handlers.pypre_getzSubscribeWebsocket.pre_get#   sz      
  'O))$iJJ
 
 
 
 
 
 
 

  	%-$$$	% 	%    c                   K   t          |                                            d{V   t                      j        |i |}|
| d{V  dS dS )zGet an event socket.N)r	   r   superget)r   argskwargsres	__class__s       r   r!   zSubscribeWebsocket.get0   sl       4<<>>*********eggk4*6**?IIIIIIIII ?r   logger!jupyter_events.logger.EventLogger	schema_idstrdatadict[str, Any]returnNonec                t   K   t          dd|i|}|                     t          j        |                     dS )zWrite an event message.r(   N )dictwrite_messagejsondumps)r   r&   r(   r*   capsules        r   event_listenerz!SubscribeWebsocket.event_listener8   sD       333d334:g../////r   c                F    | j                             | j                   dS )zrRoutes events that are emitted by Jupyter Server's
        EventBus to a WebSocket client in the browser.
        listenerN)event_loggeradd_listenerr5   r   s    r   openzSubscribeWebsocket.open?   s'     	&&0C&DDDDDr   c                F    | j                             | j                   dS )zHandle a socket close.r7   N)r9   remove_listenerr5   r;   s    r   on_closezSubscribeWebsocket.on_closeE   s%    ))43F)GGGGGr   )r&   r'   r(   r)   r*   r+   r,   r-   )__name__
__module____qualname____doc__AUTH_RESOURCEauth_resourcer   r   r!   r5   r<   r?   __classcell__)r%   s   @r   r   r      s         65!M% % %     0 0 0 0E E EH H H H H H Hr   r   r*   r+   registry-jupyter_events.schema_registry.SchemaRegistryr,   r-   c                   h d}|D ]}|| vrd| d}t          |          t          t          |                     d                    }|                    |          }t          t          t          |                     d                              }|j        |k    r d|d|j        d| d	}t          |          d
S )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(   rJ   zUnregistered version: u   ≠z for ``N)	Exceptionr   r)   r!   rJ   )r*   rG   required_keyskeymessager(   schemarJ   s           r   validate_modelrQ   J   s    
 544M % %d??B#BBBGG$$$  S$((;//00I \\)$$F$sDHHY//0011G~  ]7]]]]QZ]]]    ! r   Optional[datetime]c                    	 d| v rt          j        | d         d          }nd}n(# t          $ r}t          j        dd          |d}~ww xY w|S )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   strptimerL   r
   r   )r*   rT   es      r   get_timestamprX   _   sz    $ )${*;=STTIII   m7
 

 	 s   "% 
A
AA
c                  F    e Zd ZdZeZej        ed                         Z	dS )EventHandlerzREST api handler for eventsc           	     4  K   |                                  }|t          j        dd          	 t          || j        j                   | j                            t          t          |	                    d                    t          d|	                    d                    t          |                     |                     d           |                                  dS # t          $ r(}t          j        dt          |                    |d}~ww xY w)	zEmit an event.NrU   zNo JSON data providedr(   r+   r*   )r(   r*   timestamp_override   )get_json_bodyr
   r   rQ   r9   schemasemitr   r)   r!   rX   
set_statusfinishrL   )r   payloadrW   s      r   postzEventHandler.postv   s
      $$&&?-%<===	47D$5$=>>>""sGKK$<$<==*GKK,?,?@@#0#9#9 #   
 OOC   KKMMMMM 	4 	4 	4 -SVV,,!3	4s   B4C% %
D/#DDN)
r@   rA   rB   rC   rD   rE   r
   authenticatedr   rd   r/   r   r   rZ   rZ   q   sF        %%!M4 4 Z 4 4 4r   rZ   z/api/eventsz/api/events/subscribe)r*   r+   rG   rH   r,   r-   )r*   r+   r,   rR   )rC   
__future__r   r2   r   typingr   r   r   r   jupyter_core.utilsr	   tornador
   r   jupyter_server.auth.decoratorr   r   jupyter_server.base.handlersr   base.handlersr   rD   jupyter_events.loggerjupyter_eventsWebSocketHandlerr   rQ   rX   rZ   default_handlersr/   r   r   <module>rq      s   
 # " " " " "        5 5 5 5 5 5 5 5 5 5 5 5 + + + + + + " " " " " " " " F F F F F F F F 7 7 7 7 7 7 ' ' ' ' ' '  !    ,H ,H ,H ,H ,H,H ,H ,H^! ! ! !*   $4 4 4 4 4: 4 4 4: \"12   r   