
    h)                       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\R                  (       a  SSK
Jr  \R                  " S5      r\R                  \\R                   4   r\R$                  \R                  \\R                   4      r\R$                  \R(                  \      r\R.                  \/S4   r\R.                  S\/S4   r " S S5      r " S S	5      rSS	/rg)
z?Default classes for Comm and CommManager, for usage in IPython.    )annotationsN)	ZMQStreamCommBaseCommc                  6  ^  \ rS rSrSr          S                       SU 4S jjjr   S           SS jjrSS jr S       SS jjr    S         SS jjr	 S       SS jjr
SS	 jrSS
 jrSS jrSS jrSrU =r$ )r      zClass for communicating between a Frontend and a Kernel

Must be subclassed with a publish_msg method implementation which
sends comm messages through the iopub channel.
c                  > [         TU ]  " S0 UD6  U(       a  UO[        R                  " 5       R                  U l        X`l        Xl        Xpl        U(       a  UOSU R
                   3R                  S5      U l
        U	(       a  U	O0 U l        U
(       a  U
O0 U l        S U l        S U l        SU l        U R                  (       a  U R!                  X#US9  g SU l        g )Nzcomm-asciiTdatametadatabuffersF )super__init__uuiduuid4hexcomm_idprimarytarget_nametarget_moduleencodetopic
_open_data_close_data_msg_callback_close_callback_closedopen)selfr   r   r   r   r   r   r   r   r   r   kwargs	__class__s               aC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\comm/base_comm.pyr   BaseComm.__init__!   s     	"6"")wtzz|/?/?&*#UE$,,*@)H)H)Q
(2**5;22648<<II4GID DL    c                    Sn[        U5      e)Nz*publish_msg Comm method is not implemented)NotImplementedError)r!   msg_typer   r   r   keysmsgs          r$   publish_msgBaseComm.publish_msgE   s     ;!#&&r&   c                    [         R                  " [        5         U R                  SS9  SSS5        g! , (       d  f       g= f)ztrigger close on gcT)deletingN)
contextlibsuppress	Exceptioncloser!   s    r$   __del__BaseComm.__del__P   s,      + JJJ% ,++s	   4
Ac           	     .   Uc  U R                   n[        R                  " 5       nUc  Sn[        U5      eUR	                  U 5         U R                  SUUUU R                  U R                  S9  SU l        g! [         a    UR                  U 5        e f = f)z+Open the frontend-side version of this commNz.Comms cannot be opened without a comm_manager.	comm_open)r   r   r   r   r   F)r   commget_comm_managerRuntimeErrorregister_commr,   r   r   r   r2   unregister_comm)r!   r   r   r   comm_managerr+   s         r$   r    BaseComm.openY   s    
 <??D,,.BCs##""4(	! ,,"00   !DL 	((.	s   /A7 7Bc                    U R                   (       a  gSU l         Uc  U R                  nU R                  SUUUS9  U(       d%  [        R                  " 5       R                  U 5        gg)z,Close the frontend-side version of this commNT
comm_closer   )r   r   r,   r9   r:   r=   )r!   r   r   r   r/   s        r$   r3   BaseComm.closet   se     <<<##D	 	 	
 !!#33D9 r&   c                (    U R                  SUUUS9  g)z8Send a message to the frontend-side version of this commcomm_msgr   N)r,   )r!   r   r   r   s       r$   sendBaseComm.send   s#     		 	 	
r&   c                    Xl         g)zRegister a callback for comm_close

Will be called with the `data` of the close message.

Call `on_close(None)` to disable an existing callback.
N)r   r!   callbacks     r$   on_closeBaseComm.on_close   s
      (r&   c                    Xl         g)zRegister a callback for comm_msg

Will be called with the `data` of any comm_msg messages.

Call `on_msg(None)` to disable an existing callback.
N)r   rH   s     r$   on_msgBaseComm.on_msg   s
     &r&   c                    [         R                  SU R                  U5        U R                  (       a  U R                  U5        gg)zHandle a comm_close messagezhandle_close[%s](%s)N)loggerdebugr   r   )r!   r+   s     r$   handle_closeBaseComm.handle_close   s3    +T\\3?  %  r&   c                0   [         R                  SU R                  U5        U R                  (       ad  SSKJn  U" 5       nU(       a  UR                  R                  S5        U R                  U5        U(       a  UR                  R                  S5        ggg)zHandle a comm_msg messagezhandle_msg[%s](%s)r   )get_ipythonpre_executepost_executeN)rP   rQ   r   r   IPythonrU   eventstrigger)r!   r+   rU   shells       r$   
handle_msgBaseComm.handle_msg   sl    )4<<=+ME$$]3s#$$^4  r&   )
r   r   r   r   r   r   r   r   r   r   )
r9   NNNNTNNNN)r   strr   	MaybeDictr   r_   r   BuffersTyper   
str | Noner   boolr   ra   r   zbytes | Noner   r_   r   r_   r"   t.AnyreturnNone)NNN)r)   r^   r   r_   r   r_   r   r`   r*   rc   rd   re   rd   re   )r   r_   r   r_   r   r`   rd   re   )NNNF)
r   r_   r   r_   r   r`   r/   rb   rd   re   )rI   zCommCallback | Nonerd   re   )r+   MessageTyperd   re   )__name__
__module____qualname____firstlineno____doc__r   r,   r5   r    r3   rE   rJ   rM   rR   r\   __static_attributes____classcell__)r#   s   @r$   r   r      s    ""#"$(" $!%"!"! "! 	"!
 "! "! "! ""! "! "! "! "! 
"! "!N "#	'	' 	' 		'
 	' 	' 
	'& Z^09KV	: "#:: : 	:
 : 
:2 Z^	
	
09	
KV	
		
(&&5 5r&   c                  r    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrg)CommManager   zDDefault CommManager singleton implementation for Comms in the Kernelc                     0 U l         0 U l        g )Ncommstargetsr4   s    r$   r   CommManager.__init__   s    *,
68r&   c                X   [        U[        5      (       aJ  UR                  SS5      n[        U5      S:X  a  Uu  pE[	        XE/S9n [        Xe5      nO[	        US   5      n[        R                  " [        U5      U R                  U'   g! [         a  nSU 3n[        U5      UeSnAff = f)zRegister a callable f for a given target name

f will be called with two arguments when a comm_open message is received with `target`:

- the Comm instance
- the `comm_open` message itself.

f can be a Python callable or an import string for one.
.      )fromlistzNo module named Nr   )
isinstancer^   rsplitlen
__import__getattrAttributeErrorImportErrortcastCommTargetCallbackru   )	r!   r   fpartspackageobjmodulee	error_msgs	            r$   register_targetCommManager.register_target   s     aHHS!$E5zQ$#Ge<8,A uQx($%FF+=q$A[! & 8"23% 8I%i0a78s   B	 	
B)B$$B)c                8    U R                   R                  U5      $ )z5Unregister a callable registered with register_target)ru   pop)r!   r   r   s      r$   unregister_targetCommManager.unregister_target   s    ||,,r&   c                :    UR                   nXR                  U'   U$ )zRegister a new comm)r   rt   )r!   r9   r   s      r$   r<   CommManager.register_comm   s    ,,"

7r&   c                N    U R                   R                  UR                  5      ng)z,Unregister a comm, and close its counterpartN)rt   r   r   )r!   r9   s     r$   r=   CommManager.unregister_comm   s     zz~~dll+r&   c                ,    U R                   U   $ ! [         ax    [        R                  SU5        [        R	                  [
        R                  5      (       a7  [        R                  S[        U R                   R                  5       5      5         gf = f)zGet a comm with a particular id

Returns the comm if found, otherwise None.

This will not raise an error,
it will log messages if the comm cannot be found.
zNo such comm: %szCurrent comms: %sN)
rt   KeyErrorrP   warningisEnabledForloggingDEBUGrQ   listr*   )r!   r   s     r$   get_commCommManager.get_comm   sk    	::g&& 	NN-w7""7==110$tzz7H2IJ	s    A?BBc                   SSK Jn  US   nUS   nUS   nU R                  R                  US5      nU" USUS9n	U R	                  U	5        Uc  [
        R                  S	U5        O
 U" X5        g U	R                  " 5         g! [         a    [
        R                  S
USS9   N4f = f! [         a    [
        R                  SSS9   gf = f)zHandler for comm_open messagesr   )create_commcontentr   r   NF)r   r   r   z"No such comm target registered: %sz&Exception opening comm with target: %sTexc_infozqCould not close comm during `comm_open` failure
                clean-up.  The comm may not have been opened yet.)	r9   r   ru   getr<   rP   errorr2   r3   )
r!   streamidentr+   r   r   r   r   r   r9   s
             r$   r8   CommManager.comm_open  s    $i.)$m,LL[$/#

 	4 9LL={Kc$
	JJL  cE{]abc  	LLE  	s$   &B 0B' B$#B$'CCc                    US   nUS   nU R                  U5      nUc  g UR                  " U5        g! [         a    [        R	                  SUSS9   gf = f)zHandler for comm_msg messagesr   r   NzException in comm_msg for %sTr   )r   r\   r2   rP   r   r!   r   r   r+   r   r   r9   s          r$   rD   CommManager.comm_msg(  sa    i.)$}}W%<	QOOC  	QLL74LP	Qs   4 AAc                    US   nUS   nU R                  U5      nUc  gSU R                  U   l        U R                  U	  UR                  " U5        g! [         a    [
        R                  SUSS9   gf = f)zHandler for comm_close messagesr   r   NTzException in comm_close for %sr   )r   rt   r   rR   r2   rP   r   r   s          r$   rA   CommManager.comm_close5  s    i.)$}}W%<&*

7#JJw	Sc" 	SLL97TLR	Ss   A A76A7rs   Nrf   )r   r^   r   zCommTargetCallback | strrd   re   )r   r^   r   r   rd   r   )r9   r   rd   r^   )r9   r   rd   re   )r   r^   rd   zBaseComm | None)r   r   r   r^   r+   rg   rd   re   )rh   ri   rj   rk   rl   r   r   r   r<   r=   r   r8   rD   rA   rm   r   r&   r$   rp   rp      s6    N9B6-,
&BQSr&   rp   )rl   
__future__r   r0   r   typingr   r   r9   TYPE_CHECKINGzmq.eventloop.zmqstreamr   	getLoggerrP   Dictr^   Anyrg   Optionalr_   Listbytesr`   CallableCommCallbackr   r   rp   __all__r   r&   r$   <module>r      s    E #     ??1			6	"ffS!%%Z JJqvvc155j)*	jj'zz;--.ZZ[ 94 ?@ d5 d5NBS BSJ }
%r&   