
    ^h                       S r SSKJr  SSKrSSKJr  SSKJrJrJrJ	r	  SSK
Jr  SSKJrJr  SSKJrJr  SS	KJr  S
SKJr  Sr\(       a  SSKr " S S\\R2                  5      r      SS jrSS jr " S S\5      rS\4S\4/rg)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                  f   ^  \ rS rSrSr\rS r\U 4S j5       r	        S	S jr
S rS rSrU =r$ )
SubscribeWebsocket   z+Websocket handler for subscribing to eventsc                   #    U R                   n[        U R                  R                  XSS5      5      I Sh  vN nU(       d  [        R
                  " S5      eg N"7f)zcHandles authorization when
attempting to subscribe to events emitted by
Jupyter Server's eventbus.
executer   Ni  )current_userr	   
authorizeris_authorizedr
   	HTTPError)selfuserr   s      a/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_server/services/events/handlers.pypre_getSubscribeWebsocket.pre_get#   sU     
   'OO))$iJ
 

 --$$ 
s   6AA#Ac                   >#    [        U R                  5       5      I Sh  vN   [        TU ]  " U0 UD6nUb  UI Sh  vN   gg N# N7f)zGet an event socket.N)r	   r   superget)r   argskwargsres	__class__s       r   r"   SubscribeWebsocket.get0   sJ      4<<>***gk4*6*?II  	+ s   AAAAAAc                p   #    [        SSU0UD6nU R                  [        R                  " U5      5        g7f)zWrite an event message.	schema_idN )dictwrite_messagejsondumps)r   loggerr)   datacapsules        r   event_listener!SubscribeWebsocket.event_listener8   s0      33d34::g./s   46c                J    U R                   R                  U R                  S9  g)zbRoutes events that are emitted by Jupyter Server's
EventBus to a WebSocket client in the browser.
listenerN)event_loggeradd_listenerr2   r   s    r   openSubscribeWebsocket.open?   s!     	&&0C0C&D    c                J    U R                   R                  U R                  S9  g)zHandle a socket close.r5   N)r7   remove_listenerr2   r9   s    r   on_closeSubscribeWebsocket.on_closeE   s    ))43F3F)Gr<   r*   )r/   z!jupyter_events.logger.EventLoggerr)   strr0   dict[str, Any]returnNone)__name__
__module____qualname____firstlineno____doc__AUTH_RESOURCEauth_resourcer   r   r"   r2   r:   r?   __static_attributes____classcell__)r&   s   @r   r   r      s]     6!M%  070DG0O]0	0EH Hr<   r   c                `   1 SknU H  nX0;  d  M
  SU S3n[        U5      e   [        [        U R                  S5      5      nUR                  U5      n[        [        [        U R                  S5      5      5      nUR                  U:w  a#  SU< SUR                  < SU S	3n[        U5      eg
)zkValidates for required fields in the JSON request body and verifies that
a registered schema/version exists>   r0   versionr)   z	Missing `z` in the JSON request body.r)   rO   zUnregistered version: u   ≠z for ``N)	Exceptionr   rA   r"   rO   )r0   registryrequired_keyskeymessager)   schemarO   s           r   validate_modelrW   J   s    
 5M?!#&ABGG$$  S$((;/0I \\)$F$sDHHY/01G~~ *7+S8J&QZP[[\]   !r<   c                     SU ;   a  [         R                  " U S   S5      nU$ Sn U$ ! [         a  n[        R                  " SS5      UeSnAff = f)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   strptimerQ   r
   r   )r0   rY   es      r   get_timestampr]   _   sn    $ ))${*;=STI  I   mm7

 	s    ) ) 
AAAc                  J    \ rS rSrSr\r\R                  \	S 5       5       r
Srg)EventHandlerq   zREST api handler for eventsc           	       #    U R                  5       nUc  [        R                  " SS5      e [        XR                  R
                  5        U R                  R                  [        [        UR                  S5      5      [        SUR                  S5      5      [        U5      S9  U R                  S5        U R                  5         g! [         a&  n[        R                  " S[        U5      5      UeSnAff = f7f)	zEmit an event.NrZ   zNo JSON data providedr)   rB   r0   )r)   r0   timestamp_override   )get_json_bodyr
   r   rW   r7   schemasemitr   rA   r"   r]   
set_statusfinishrQ   )r   payloadr\   s      r   postEventHandler.postv   s      $$&?--%<==	47$5$5$=$=>""sGKK$<=*GKK,?@#0#9 # 
 OOC KKM 	4 --SV,!3	4s)   +C<BC	 C<	
C9!C44C99C<r*   N)rE   rF   rG   rH   rI   rJ   rK   r
   authenticatedr   rj   rL   r*   r<   r   r_   r_   q   s*    %!M4  4r<   r_   z/api/eventsz/api/events/subscribe)r0   rB   rR   z-jupyter_events.schema_registry.SchemaRegistryrC   rD   )r0   rB   rC   zOptional[datetime])rI   
__future__r   r-   r   typingr   r   r   r   jupyter_core.utilsr	   tornador
   r   jupyter_server.auth.decoratorr   r   jupyter_server.base.handlersr   base.handlersr   rJ   jupyter_events.loggerjupyter_eventsWebSocketHandlerr   rW   r]   r_   default_handlersr*   r<   r   <module>rx      s   
 #   5 5 + " F 7 '  ,H,H^!
!$Q!	!*$4: 4: \"12 r<   