
    Fh>                       S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSK	r	SSK
J
r
Jr  SSKJr  SSKJr  SSKJr  SSKJrJrJrJr  SS	KJrJr  S
SKJr  S
SKJr  S
SKJr  S
SK J!r!  \" S5      r"\" \"5      \" S5      :  a  SSK#J$r$  OSSK%J$r$  S
r& " S S\'5      r( " S S\)5      r* " S S\)5      r+\	RX                  " S\(5         " S S\)5      r- " S S\5      r.g)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                      \ rS rSrSrSrg)SchemaNotRegistered%   zrA 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____firstlineno____doc____static_attributes__r       hC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\jupyter_events/logger.pyr   r   %       r!   r   c                      \ rS rSrSrSrg)ModifierError+   zJAn exception to raise when a modifier does not
show the proper signature.
r   Nr   r   r!   r"   r%   r%   +   r#   r!   r%   c                      \ rS rSrSrSrg)CoreMetadataError1   z:An exception raised when event core metadata is not valid.r   Nr   r   r!   r"   r(   r(   1   s    Dr!   r(   oncec                      \ rS rSrSrSrg)ListenerError:   zJAn exception to raise when a listener does not
show the proper signature.
r   Nr   r   r!   r"   r,   r,   :   r#   r!   r,   c                    ^  \ rS rSr% Sr\" SSSS9R                  SS9r\" \	SS	9r
\" 0 S
S	9r\" 0 SS	9r\" 0 SS	9r\" 5       rS\S'   S S jr\" S5      S!S j5       rS"U 4S jjr  S#       S$U 4S jjjrS%S jrS&S jrS&S jrSS.     S'S jjrSS.     S'S jjrSSS.       S(S jjrSS.     S)S jjrSS.       S*S jjrSrU =r $ )+EventLogger@   z
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.
NTzA 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.
        )r3   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                ^   #    [         R                  " U R                  SS06I Sh  vN $  N7f)z#Gather all of the active listeners.return_exceptionsTN)asynciogatherr5   selfs    r"   gather_listenersEventLogger.gather_listenersd   s%     ^^T%;%;TtTTTTs   $-+-schemasc                    [        5       $ Nr   r:   s    r"   _default_schemasEventLogger._default_schemash   s    r!   c                x  > [         TU ]  " U0 UD6  [        S-   [        [	        U 5      5      -   n[
        R                  " U5      U l        SU R                  l        U R                  R                  [
        R                  5        U R                  (       a%  U R                   H  nU R                  U5        M     gg)zInitialize the logger..FN)super__init__r   stridlogging	getLogger_logger	propagatesetLevelINFOhandlersregister_handler)r;   argskwargslog_namehandler	__class__s        r"   rF   EventLogger.__init__l   s     	$)&) c>C4M1((2!&gll+====%%g. ) r!   c                   >^ U R                  U5      nUR                  S/ 5      mSU4S jjnXTS'   [        SU05      n[        TU ]  USSS9  g)zyLoad EventLogger traits from a Config object, patching the
handlers trait in the Config object to avoid deepcopy errors.
rO   c                    > T $ r@   r   )rO   s   r"   get_handlers.EventLogger._load_config.<locals>.get_handlers   s    Or!   r/   N)section_namestraits)returnzlist[logging.Handler])_find_my_configpopr   rE   _load_config)	r;   cfgr[   r\   my_cfgrY   eventlogger_cfgrO   rU   s	          @r"   r`   EventLogger._load_config~   sY     %%c**0**Z*D	 *z !-!89_DNr!   c                8   U R                   R                  U5      nUR                  nX0R                  ;  a  [	        5       U R                  U'   X0R
                  ;  a  [	        5       U R
                  U'   X0R                  ;  a  [	        5       U R                  U'   gg)zvRegister this schema with the schema registry.

Get this registered schema using the EventLogger.schema.get() method.
N)r>   registerrH   
_modifiersset_modified_listeners_unmodified_listeners)r;   schemaevent_schemakeys       r"   register_event_schema!EventLogger.register_event_schema   s~    
 ||,,V4oo oo%#&5DOOC ...,/ED$$S)000.1eD&&s+ 1r!   c                   ^  SU 4S jjn[        US9nUR                  U5        T R                  R                  U5        UT R                  ;  a  T R                  R                  U5        gg)zoRegister a new logging handler to the Event Logger.

All outgoing messages will be formatted as a JSON string.
c                   > TR                   R                  U S   5      nSUR                  ;  a  U S	 [        R                  " U 40 UD6$ )a	  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)r>   get
propertiesjsondumps)recordrR   rk   r;   s      r"   _handle_message_field;EventLogger.register_handler.<locals>._handle_message_field   sH     \\%%f\&:;F 1 119%::f///r!   )json_serializerN)rx   t.AnyrR   r|   r]   rG   )r   setFormatterrK   
addHandlerrO   append)r;   rT   ry   	formatters   `   r"   rP   EventLogger.register_handler   s\    
	0 "1
	 	Y'($--'MM  ) (r!   c                    U R                   R                  U5        XR                  ;   a  U R                  R                  U5        gg)z>Remove a logging handler from the logger and list of handlers.N)rK   removeHandlerrO   remove)r;   rT   s     r"   remove_handlerEventLogger.remove_handler   s5    ""7+mm#MM  ) $r!   )	schema_idc               J   [        U5      (       d  Sn[        U5      eU(       aD  U R                  R                  U[	        5       5      nUR                  U5        X@R                  U'   gU R                   H+  nUb  XQ:X  d  M  U R                  U   R                  U5        M-     g)a  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	TypeErrorrg   rt   rh   add)r;   r   modifiermsg	modifiersid_s         r"   add_modifierEventLogger.add_modifier   s    " !!1CC.   ++Isu=IMM(#)2OOI&??C C$4$((2 #r!   c                  U(       a  U R                   U   R                  U5        gU R                  R                   H?  nU R                   U   R                  U5        U R                   U   R                  U5        MA     g)zRemove 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)rg   discardr>   
schema_ids)r;   r   r   s      r"   remove_modifierEventLogger.remove_modifier   sb    " OOI&..x8 "\\44		*228<	*228< 5r!   )modifiedr   c               B   [        U5      (       d  Sn[        U5      eU(       a  U(       aD  U R                  R                  U[	        5       5      nUR                  U5        XPR                  U'   gU R                  R                  U[	        5       5      nUR                  U5        XPR                  U'   gU R                  R                   HR  nUb  Xb:X  d  M  U(       a   U R                  U   R                  U5        M4  U R                  U   R                  U5        MT     g)aE  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)	r   r   ri   rt   rh   r   rj   r>   r   )r;   r   r   listenerr   	listenersr   s          r"   add_listenerEventLogger.add_listener   s    & !!1CC.   !4488CEJ	h'6?((32266y#%HIMM(#4=&&y1<<**C C$4,,S155h?..s377A +r!   c               >   U(       a=  U R                   U   R                  U5        U R                  U   R                  U5        gU R                  R                   H?  nU R                   U   R                  U5        U R                  U   R                  U5        MA     g)zRemove 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)ri   r   rj   r>   r   )r;   r   r   s      r"   remove_listener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          	     F  ^  T R                   (       dA  T R                  R                  U5      (       d!  T R                  R                  U5      (       d  gUT R                  ;  a  [
        R                  " U S3[        SS9  gT R                  R                  U5      n[        R                  " U5      nT R                  UR                      H	  nU" XS9nM     T R                  UR                     (       a  T R                  R                  X5        T R                  R                  X5        Uc"  [        R                  " [        R                   S9OUnUR#                  5       S-   UUR$                  [&        S.n [(        R*                  " U5        UR1                  U5        T R2                  R5                  U5        SU 4S	 jjn
T R                  U    HK  n[6        R8                  " U" T UUS
95      nT R:                  R=                  U5        UR?                  U
5        MM     T R                  U    HR  n[6        R8                  " U" T XS
95      nT R:                  R=                  U5        SU 4S jjn
UR?                  U
5        MT     U$ ! [,         a  n	[.        U	eSn	A	ff = f)aB  
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)r   data)tzZ)__timestamp__rr   __schema_version____metadata_version__c                   > U R                  5       nU(       a  TR                  R                  U5        TR                  R	                  U 5        g r@   	exceptionlogerrorr5   r   taskerrr;   s     r"   _listener_task_done-EventLogger.emit.<locals>._listener_task_done  s8     .."Cs#""**40r!   )loggerr   r   c                   > U R                  5       nU(       a  TR                  R                  U5        TR                  R	                  U 5        g r@   r   r   s     r"   r   r     s8     nn&HHNN3'&&..t4r!   )r   zasyncio.Task[t.Any]r]   None) rO   ri   rt   rj   r>   warningswarnr   copydeepcopyrg   rH   validate_eventr   nowr   utc	isoformatr   EVENTS_METADATA_VERSIONr   validater   r(   updaterK   infor8   create_taskr5   r   add_done_callback)r;   r   r   r   rk   modified_datar   	timestampcapsuler   r   r   r   s   `            r"   emitEventLogger.emitG  sL   , ,,00;;..229== DLL(MM+ 2 2 $ !!), d+		2H$yMM 3 %%fii0LL''	8 	##I= .@-GHLLHLL)M_ 	 '002S8#"(..$;	
	-)227; 	}%'"	1 00;H &&'&D ""&&t, ""#67 < 229=H&&xty'\]D""&&t,5 ""#67 >  c  	-#,	-s   ;J
 

J JJ )rK   )r]   zlist[t.Any])r]   r   )rQ   r|   rR   r|   r]   r   )NN)ra   r   r[   list[str] | Noner\   r   r]   r   )rk   r   r]   r   )rT   zlogging.Handlerr]   r   )r   
str | Noner   z5t.Callable[[str, dict[str, t.Any]], dict[str, t.Any]]r]   r   )r   boolr   r   r   Qt.Callable[[EventLogger, str, dict[str, t.Any]], t.Coroutine[t.Any, t.Any, None]]r]   r   )r   r   r   r   r]   r   )r   rG   r   zdict[str, t.Any]r   zdatetime | Noner]   zdict[str, t.Any] | None)!r   r   r   r   r   r   tagrO   r
   r   r>   r	   rg   ri   rj   r   r5   __annotations__r<   r   rA   rF   r`   rn   rP   r   r   r   r   r   r   r    __classcell__)rU   s   @r"   r/   r/   @   s     
cc  G bQRJr(cd 
R 36%/7U Y   /* +/#'	OO (O !	O
 
O O,4 *4* !% 3  3 H	 3
 
 3J !%= = H	=
 
=:  $	*B *B 	*B
 d*B 
*B^ !%H H d	H
 
H8 `dss'7sM\s	 s sr!   r/   )/r   
__future__r   r8   r   rv   rI   typingtr   r   r   importlib.metadatar   
jsonschemar   packaging.versionr   	traitletsr	   r
   r   r   traitlets.configr   r   rk   r   schema_registryr   r\   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 z% zr!   