Ë
    :vžjL@  ã                  ó´  — d Z 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	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mZmZ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!  ed«      Z" ee"«       ed«      k\  rddl#m$Z$ nddl%m$Z$ d
Z& G d„ de'«      Z( G d„ de)«      Z* G d„ de)«      Z+ e	jX                  de(«        G d„ de)«      Z- G d„ de«      Z.y)z?
Emit structured, discrete events when various actions happen.
é    )ÚannotationsN)ÚdatetimeÚtimezone)Úversion)ÚValidationError)Úparse)ÚDictÚInstanceÚSetÚdefault)ÚConfigÚLoggingConfigurableé   )Ú
SchemaType©ÚSchemaRegistry)ÚHandlers)ÚJUPYTER_EVENTS_CORE_VALIDATORzpython-json-loggerz3.1.0)ÚJsonFormatterc                  ó   — e Zd ZdZy)ÚSchemaNotRegisteredzzA warning to raise when an event is given to the logger
    but its schema has not be registered with the EventLogger
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úf/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyter_events/logger.pyr   r   %   ó   „ òr   r   c                  ó   — e Zd ZdZy)ÚModifierErrorzRAn exception to raise when a modifier does not
    show the proper signature.
    Nr   r   r   r   r"   r"   +   r    r   r"   c                  ó   — e Zd ZdZy)ÚCoreMetadataErrorz:An exception raised when event core metadata is not valid.Nr   r   r   r   r$   r$   1   s   „ ÚDr   r$   Úoncec                  ó   — e Zd ZdZy)ÚListenerErrorzRAn exception to raise when a listener does not
    show the proper signature.
    Nr   r   r   r   r'   r'   :   r    r   r'   c                  ó¤  ‡ — e Zd ZU dZ eddd¬«      j                  d¬«      Z eed¬«      Z	 e
i d	¬«      Z e
i d
¬«      Z e
i d¬«      Z e«       Zded<   dd„Z ed«      dd„«       Zd ˆ fd„Z	 	 d!	 	 	 	 	 	 	 d"ˆ fd„Zd#d„Zd$d„Zd$d„Zddœ	 	 	 	 	 d%d„Zddœ	 	 	 	 	 d%d„Zdddœ	 	 	 	 	 	 	 d&d„Zddœ	 	 	 	 	 d'd„Zddœ	 	 	 	 	 	 	 d(d„Zˆ xZS ))ÚEventLoggera  
    An Event logger for emitting structured events.

    Event schemas must be registered with the
    EventLogger using the `register_schema` or
    `register_schema_file` methods. Every schema
    will be validated against Jupyter Event's metaschema.
    NTz‚A list of logging.Handler instances to send events to.

        When set to None (the default), all events are discarded.
        )Údefault_valueÚ
allow_noneÚhelp)ÚconfigzbThe SchemaRegistry for caching validated schemas
        and their jsonschema validators.
        )r,   z0A mapping of schemas to their list of modifiers.z9A mapping of schemas to the listeners of modified events.z?A mapping of schemas to the listeners of unmodified/raw events.zset[asyncio.Task[t.Any]]Ú_active_listenersc              ƒ  ó\   K  — t        j                  | j                  ddiŽƒ d{  –—† S 7 Œ­w)z#Gather all of the active listeners.Úreturn_exceptionsTN)ÚasyncioÚgatherr.   ©Úselfs    r   Úgather_listenerszEventLogger.gather_listenersd   s&   è ø€ ä—^‘^ T×%;Ñ%;ÐTÈtÑT×TÐTÐTús   ‚#,¥*¦,Úschemasc                ó   — t        «       S ©Nr   r3   s    r   Ú_default_schemaszEventLogger._default_schemash   s   € äÓÐr   c                óf  •— t        ‰| �  |i |¤Ž t        dz   t        t	        | «      «      z   }t        j                  |«      | _        d| j                  _        | j                  j                  t
        j                  «       | j                  r#| j                  D ]  }| j                  |«       Œ yy)zInitialize the logger.Ú.FN)ÚsuperÚ__init__r   ÚstrÚidÚloggingÚ	getLoggerÚ_loggerÚ	propagateÚsetLevelÚINFOÚhandlersÚregister_handler)r4   ÚargsÚkwargsÚlog_nameÚhandlerÚ	__class__s        €r   r=   zEventLogger.__init__l   s‹   ø€ ô 	‰Ñ˜$Ð) &Ò)ô ˜c‘>¤C¬¨4«£MÑ1ˆÜ×(Ñ(¨Ó2ˆŒà!&ˆ�‰Ôà�‰×ÑœgŸl™lÔ+à�=Š=ØŸ=œ=�Ø×%Ñ% gÕ.ñ )ð r   c                ó¢   •‡— | j                  |«      }|j                  dg «      Šdˆfd„}||d<   t        d|i«      }t        ‰| �  |dd¬«       y)z‰Load EventLogger traits from a Config object, patching the
        handlers trait in the Config object to avoid deepcopy errors.
        rF   c                 ó   •— ‰ S r8   r   )rF   s   €r   Úget_handlersz.EventLogger._load_config.<locals>.get_handlers‹   s   ø€ ØˆOr   r)   N)Úsection_namesÚtraits)Úreturnzlist[logging.Handler])Ú_find_my_configÚpopr   r<   Ú_load_config)	r4   ÚcfgrP   rQ   Úmy_cfgrO   Úeventlogger_cfgrF   rL   s	          @€r   rU   zEventLogger._load_config~   s[   ù€ ð ×%Ñ% cÓ*ˆØ*0¯*©*°ZÀÓ*Dˆõ	ð *ˆˆzÑô ! -°Ð!8Ó9ˆÜ‰Ñ˜_¸DÈÐÕNr   c                ó2  — | j                   j                  |«      }|j                  }|| j                  vrt	        «       | j                  |<   || j
                  vrt	        «       | j
                  |<   || j                  vrt	        «       | j                  |<   yy)z†Register this schema with the schema registry.

        Get this registered schema using the EventLogger.schema.get() method.
        N)r6   Úregisterr?   Ú
_modifiersÚsetÚ_modified_listenersÚ_unmodified_listeners)r4   ÚschemaÚevent_schemaÚkeys       r   Úregister_event_schemaz!EventLogger.register_event_schema”   s„   € ð
 —|‘|×,Ñ,¨VÓ4ˆØ�o‰oˆð �d—o‘oÑ%Ü#&£5ˆD�O‰O˜CÑ Ø�d×.Ñ.Ñ.Ü,/«EˆD×$Ñ$ SÑ)Ø�d×0Ñ0Ñ0Ü.1«eˆD×&Ñ& sÒ+ð 1r   c                óÖ   ‡ — dˆ fd„}t        |¬«      }|j                  |«       ‰ j                  j                  |«       |‰ j                  vr‰ j                  j                  |«       yy)zRegister a new logging handler to the Event Logger.

        All outgoing messages will be formatted as a JSON string.
        c                óŽ   •— ‰j                   j                  | d   «      }d|j                  vr| d= t        j                  | fi |¤ŽS )aE  Python's logger always emits the "message" field with
            the value as "null" unless it's present in the schema/data.
            Message happens to be a common field for event logs,
            so special case it here and only emit it if "message"
            is found the in the schema's property list.
            Ú
__schema__Úmessage)r6   ÚgetÚ
propertiesÚjsonÚdumps)ÚrecordrI   r_   r4   s      €r   Ú_handle_message_fieldz;EventLogger.register_handler.<locals>._handle_message_fieldª   sH   ø€ ð —\‘\×%Ñ% f¨\Ñ&:Ó;ˆFØ × 1Ñ 1Ñ1Ø˜9Ð%Ü—:‘:˜fÑ/¨Ñ/Ð/r   )Újson_serializerN)rk   út.AnyrI   rn   rR   r>   )r   ÚsetFormatterrB   Ú
addHandlerrF   Úappend)r4   rK   rl   Ú	formatters   `   r   rG   zEventLogger.register_handler¤   s\   ø€ õ
	0ô "Ø1ô
ˆ	ð 	×Ñ˜YÔ'Ø�‰×Ñ Ô(Ø˜$Ÿ-™-Ñ'Ø�M‰M× Ñ  Õ)ð (r   c                óŽ   — | j                   j                  |«       || j                  v r| j                  j                  |«       yy)z>Remove a logging handler from the logger and list of handlers.N)rB   ÚremoveHandlerrF   Úremove)r4   rK   s     r   Úremove_handlerzEventLogger.remove_handler¾   s7   € à�‰×"Ñ" 7Ô+Ø�d—m‘mÑ#Ø�M‰M× Ñ  Õ)ð $r   )Ú	schema_idc               ó0  — t        |«      sd}t        |«      ‚|rE| j                  j                  |t	        «       «      }|j                  |«       || j                  |<   y| j                  D ](  }|�||k(  sŒ| j                  |   j                  |«       Œ* y)aG  Add a modifier (callable) to a registered event.

        Parameters
        ----------
        modifier: Callable
            A callable function/method that executes when the named event occurs.
            This method enforces a string signature for modifiers:

                (schema_id: str, data: dict) -> dict:
        z`modifier` must be a callableN)ÚcallableÚ	TypeErrorr[   rg   r\   Úadd)r4   rw   ÚmodifierÚmsgÚ	modifiersÚid_s         r   Úadd_modifierzEventLogger.add_modifierÄ   s‰   € ô" ˜Ô!Ø1ˆCÜ˜C“.Ð ñ ð Ÿ™×+Ñ+¨I´s³uÓ=ˆIØ�M‰M˜(Ô#Ø)2ˆD�O‰O˜IÑ&ØØ—?”?ˆCØÐ  C¨9Ó$4Ø—‘ Ñ$×(Ñ(¨Õ2ñ #r   c               óô   — |r| j                   |   j                  |«       y| j                  j                  D ]>  }| j                   |   j                  |«       | j                   |   j                  |«       Œ@ y)a  Remove a modifier from an event or all events.

        Parameters
        ----------
        schema_id: str
            If given, remove this modifier only for a specific event type.
        modifier: Callable[[str, dict], dict]

            The modifier to remove.
        N)r[   Údiscardr6   Ú
schema_ids)r4   rw   r|   s      r   Úremove_modifierzEventLogger.remove_modifieræ   sb   € ñ" Ø�O‰O˜IÑ&×.Ñ.¨xÕ8ð "Ÿ\™\×4Ô4�	à—‘ 	Ñ*×2Ñ2°8Ô<Ø—‘ 	Ñ*×2Ñ2°8Õ<ñ 5r   )Úmodifiedrw   c               ó  — t        |«      sd}t        |«      ‚|rŒ|rE| j                  j                  |t	        «       «      }|j                  |«       || j                  |<   y| j                  j                  |t	        «       «      }|j                  |«       || j                  |<   y| j                  j                  D ]I  }|�||k(  sŒ|r| j                  |   j                  |«       Œ,| j                  |   j                  |«       ŒK y)a•  Add a listener (callable) to a registered event.

        Parameters
        ----------
        modified: bool
            If True (default), listens to the data after it has been mutated/modified
            by the list of modifiers.
        schema_id: str
            $id of the schema
        listener: Callable
            A callable function/method that executes when the named event occurs.
        z`listener` must be a callableN)	ry   rz   r]   rg   r\   r{   r^   r6   rƒ   )r4   r…   rw   Úlistenerr}   Ú	listenersr   s          r   Úadd_listenerzEventLogger.add_listener   sí   € ô& ˜Ô!Ø1ˆCÜ˜C“.Ð ñ Ùð !×4Ñ4×8Ñ8¸ÄCÃEÓJ�	Ø—‘˜hÔ'Ø6?�×(Ñ(¨Ñ3ØØ×2Ñ2×6Ñ6°yÄ#Ã%ÓHˆIØ�M‰M˜(Ô#Ø4=ˆD×&Ñ& yÑ1ØØ—<‘<×*Ô*ˆCØÐ  C¨9Ó$4ÙØ×,Ñ,¨SÑ1×5Ñ5°hÕ?à×.Ñ.¨sÑ3×7Ñ7¸ÕAñ +r   c               ó0  — |r=| j                   |   j                  |«       | j                  |   j                  |«       y| j                  j                  D ]>  }| j                   |   j                  |«       | j                  |   j                  |«       Œ@ y)a   Remove a listener from an event or all events.

        Parameters
        ----------
        schema_id: str
            If given, remove this modifier only for a specific event type.

        listener: Callable[[EventLogger, str, dict], dict]
            The modifier to remove.
        N)r]   r‚   r^   r6   rƒ   )r4   rw   r‡   s      r   Úremove_listenerzEventLogger.remove_listener,  s�   € ñ" Ø×$Ñ$ YÑ/×7Ñ7¸ÔAØ×&Ñ& yÑ1×9Ñ9¸(ÕCð "Ÿ\™\×4Ô4�	à×(Ñ(¨Ñ3×;Ñ;¸HÔEØ×*Ñ*¨9Ñ5×=Ñ=¸hÕGñ 5r   )Útimestamp_overridec               ó   ‡ ‡— ‰ j                   s7‰ j                  j                  ‰«      s‰ j                  j                  ‰«      sy‰‰ j                  vr t        j                  ‰› d�t        d¬«       y‰ j                  j                  ‰«      }t        j                  |«      }‰ j                  |j                     D ]  } |‰|¬«      }Œ ‰ j                  |j                     r‰ j                  j                  ‰|«       ‰ j                  j                  ‰|«       |€$t        j                  t        j                   ¬«      n|}|j#                  «       dz   ‰|j$                  t&        dœ}	 t)        j*                  |«       |j1                  |«       ‰ j2                  j5                  |«       dˆˆ fd	„}
‰ j                  ‰   D ]L  }t7        j8                   |‰ ‰|¬
«      «      }‰ j:                  j=                  |«       |j?                  |
«       ŒN ‰ j                  ‰   D ]R  }t7        j8                   |‰ ‰|¬
«      «      }‰ j:                  j=                  |«       dˆ fd„}
|j?                  |
«       ŒT |S # t,        $ r}	t.        |	‚d}	~	ww xY w)a²  
        Record given event with schema has occurred.

        Parameters
        ----------
        schema_id: str
            $id of the schema
        data: dict
            The event to record
        timestamp_override: datetime, optional
            Optionally override the event timestamp. By default it is set to the current timestamp.

        Returns
        -------
        dict
            The recorded event data
        Nz has not been registered yet. If this was not intentional, please register the schema using the `register_event_schema` method.é   )Ú
stacklevel)rw   Údata)ÚtzÚZ)Ú__timestamp__re   Ú__schema_version__Ú__metadata_version__c                ó&  •— 	 | j                  «       }|r.‰j
                  j                  d| j                  «       ‰||¬«       ‰j                  j	                  | «       y # t        j                  $ r ‰j                  j	                  | «       Y y w xY w)Nz#Event listener %s failed for %s: %s)Úexc_info)Ú	exceptionr1   ÚCancelledErrorr.   r‚   ÚlogÚerrorÚget_name)ÚtaskÚerrrw   r4   s     €€r   Ú_listener_task_donez-EventLogger.emit.<locals>._listener_task_done’  s‡   ø€ ðØ—n‘nÓ&�ñ Ø—‘—‘Ø9Ø—M‘M“OØØØ ð ô ð ×"Ñ"×*Ñ*¨4Õ0øô ×)Ñ)ò Ø×&Ñ&×.Ñ.¨tÔ4Ùðús   ƒA Á.BÂB)Úloggerrw   r�   c                ó–   •— | j                  «       }|r‰j                  j                  |«       ‰j                  j	                  | «       y r8   )r˜   rš   r›   r.   r‚   )r�   rž   r4   s     €r   rŸ   z-EventLogger.emit.<locals>._listener_task_done¹  s8   ø€ ð —n‘nÓ&�ÙØ—H‘H—N‘N 3Ô'Ø×&Ñ&×.Ñ.¨tÕ4r   )r�   zasyncio.Task[t.Any]rR   ÚNone) rF   r]   rg   r^   r6   ÚwarningsÚwarnr   ÚcopyÚdeepcopyr[   r?   Úvalidate_eventr   Únowr   ÚutcÚ	isoformatr   ÚEVENTS_METADATA_VERSIONr   Úvalidater   r$   ÚupdaterB   Úinfor1   Úcreate_taskr.   r{   Úadd_done_callback)r4   rw   r�   rŒ   r_   Úmodified_datar|   Ú	timestampÚcapsulerž   rŸ   r‡   r�   s   ``           r   ÚemitzEventLogger.emitG  sO  ù€ ð, —’Ø×,Ñ,×0Ñ0°Ô;Ø×.Ñ.×2Ñ2°9Ô=àð ˜DŸL™LÑ(Ü�M‰MØ�+ð 2ð 2ô $Øõð à—‘×!Ñ! )Ó,ˆô Ÿ™ dÓ+ˆØŸ™¨¯	©	Ô2ˆHÙ$¨y¸}ÔM‰Mð 3ð ×%Ñ% f§i¡iÒ0à�L‰L×'Ñ'¨	°4Ô8ð 	�‰×#Ñ# I¨}Ô=ð .@Ð-GŒH�L‰LœHŸL™LÕ)ÐM_ð 	ð '×0Ñ0Ó2°SÑ8Ø#Ø"(§.¡.Ü$;ñ	
ˆð	-Ü)×2Ñ2°7Ô;ð 	�‰�}Ô%à�‰×Ñ˜'Ô"ö	1ð& ×0Ñ0°Ô;ˆHô ×&Ñ&ÙØØ'Ø&ôóˆDð ×"Ñ"×&Ñ& tÔ,ð ×"Ñ"Ð#6Õ7ð <ð ×2Ñ2°9Ô=ˆHÜ×&Ñ&¡x°tÀyÐW[Ô'\Ó]ˆDØ×"Ñ"×&Ñ& tÔ,õ5ð ×"Ñ"Ð#6Õ7ð >ð  ˆøôw ò 	-Ü#¨Ð,ûð	-ús   Å,I8 É8	JÊJÊJ)rR   zlist[t.Any])rR   r   )rH   rn   rI   rn   rR   r¢   )NN)rV   r   rP   úlist[str] | NonerQ   rµ   rR   r¢   )r_   r   rR   r¢   )rK   zlogging.HandlerrR   r¢   )rw   ú
str | Noner|   z5t.Callable[[str, dict[str, t.Any]], dict[str, t.Any]]rR   r¢   )r…   Úboolrw   r¶   r‡   úQt.Callable[[EventLogger, str, dict[str, t.Any]], t.Coroutine[t.Any, t.Any, None]]rR   r¢   )rw   r¶   r‡   r¸   rR   r¢   )rw   r>   r�   zdict[str, t.Any]rŒ   zdatetime | NonerR   zdict[str, t.Any] | None)r   r   r   r   r   ÚtagrF   r
   r   r6   r	   r[   r]   r^   r   r.   Ú__annotations__r5   r   r9   r=   rU   rb   rG   rv   r€   r„   r‰   r‹   r´   Ú__classcell__)rL   s   @r   r)   r)   @   sÚ  ø… ññ ØØðô÷ 
�c�€cÓð ñ Øðô€Gñ �bÐQÔR€Já˜rÐ(cÔdÐá Ø
ÐRôÐñ 36³%ÐÐ/Ó7óUñ ˆYÓò ó ð õ/ð* +/Ø#'ð	OàðOð (ðOð !ð	Oð
 
õOó,4ó *ó4*ð !%ñ 3ð ð 3ð Hð	 3ð
 
ó 3ðJ !%ñ=ð ð=ð Hð	=ð
 
ó=ð: Ø $ñ	*Bð ð*Bð ð	*Bð
 dð*Bð 
ó*Bð^ !%ñHð ðHð dð	Hð
 
óHð8 `dñ}Øð}Ø'7ð}ØM\ð}à	 ÷}r   r)   )/r   Ú
__future__r   r1   r¥   ri   r@   ÚtypingÚtr£   r   r   Úimportlib.metadatar   Ú
jsonschemar   Úpackaging.versionr   Ú	traitletsr	   r
   r   r   Útraitlets.configr   r   r_   r   Úschema_registryr   rQ   r   Ú
validatorsr   Úversion_infoÚpythonjsonlogger.jsonr   Úpythonjsonlogger.jsonloggerr«   ÚWarningr   Ú	Exceptionr"   r$   Úsimplefilterr'   r)   r   r   r   Ú<module>rÌ      sÄ   ðñõ #ã Û Û Û Û Û ß 'Ý &å &Ý #ß 2Ó 2ß 8å Ý +Ý Ý 5ñ Ð+Ó,€ÙˆÓ™% ›.Ò(Þ3å9ð Ð ô˜'ô ô�Iô ôE˜	ô Eð €× Ñ �fÐ1Ô 2ô�Iô ôDÐ%õ Dr   