
    XhE                         d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ  G d	 d
e      ZddZd Zd Zd Zd Zd Zy)ae  
This module contains a Jupyter Server extension that attempts to
make classic server and notebook extensions work in the new server.

Unfortunately, you'll notice that requires some major monkey-patching.
The goal is that this extension will only be used as a temporary
patch to transition extension authors from classic notebook server to jupyter_server.
    N)wraps)jupyter_config_path)is_trait)ConfigManager   )NotebookAppTraitsc                       e Zd Zy)ClassProxyErrorN)__name__
__module____qualname__     J/var/www/html/myenv/lib/python3.12/site-packages/notebook_shim/nbserver.pyr
   r
      s    r   r
   c                    t        |       r5|du r1t        dj                  | j                  j                              t	              t	        j                        }t        |      st              t        k(  rt        fd      }n0t        t        j                        rt              fd       }n}t        | j                  |       y)zARedirects a method, property, or trait from object 1 to object 2.FzZCannot proxy the attribute '{name}' from {cls2} because {cls1} already has this attribute.)namecls1cls2c                     t              S N)getattr)selfr   obj2s    r   <lambda>zproxy.<locals>.<lambda>)   s    gdD&9 r   c                      |i |S r   r   )r   argskwargsattrs      r   thingzproxy.<locals>.thing,   s    (((r   N)hasattrr
   format	__class__r   r   typeproperty
isinstancetypes
MethodTyper   setattr)obj1r   r   	overwritecls_attrr   r   s    ``   @r   proxyr,      s    tTyE1117^^^^ 28 2
 	
 4D t~~t,HT$Z839:	D%**	+	t	) 
	)
 DNND%(r   c                     t        j                  |       }|D cg c]  \  }}|j                  d      r| c}}S c c}}w )N_)inspect
getmembers
startswith)objmembersmr.   s       r   public_membersr5   7   s5      %G!;$!Qc):A;;;s   ==c                 b    t        |       }t        |      }t        |      j                  |      S )z5Return all attribute names found in obj2 but not obj1)r5   set
difference)r)   r   m1m2s       r   diff_membersr;   <   s+    		B		Br7b!!r   c                     t        |       }|j                  d      }|j                  di       j                  di       }|S )N)read_config_pathjupyter_notebook_configNotebookAppnbserver_extensions)r   get)config_dirscmsection
extensionss       r   get_nbserver_extensionsrF   C   s?    		4Bff./G]B/334I2NJr   c                    | j                   }| j                  }d }t        |      |j                  _        	 |j
                  d   }|j                  d|        |j                  d   }|j                  }t        | |      }|D ]  }t        | ||        t               }	|	| j                  gz   }
t        |
      }|j!                         D ]\  \  }}||j
                  vs|j#                  ||      }|s+|j%                  dj'                  |             |j)                  |       ^ y # t        $ r t               }Y w xY w)Nc                     t        | j                  j                               }|j                  d       dg|z   }|D ci c]  }|| j                  |    c}S c c}w )zkDictionary with extension package names as keys
        and an ExtensionPackage objects as values.
        notebook_shim)sortedrE   keysremove)r   rK   keys      r   sorted_extensionsz9_link_jupyter_server_extension.<locals>.sorted_extensionsT   sV    
 doo**,-O$ 4'59:cT__S)):::s   ArI   )enabledz}{name} | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.)r   )extension_managerlogr$   r"   rN   rE   
link_pointextension_pointsapp	Exceptionr   r;   r,   r   
config_dirrF   itemsadd_extensioninfor!   link_extension)	serverappmanagerloggerrN   pkgpointnbappr3   r4   jupyter_pathsrB   r@   r   rO   
successfuls                  r   _link_jupyter_server_extensionrc   J   sJ   ))G]]F; +33D*EG'$  1	2$$_5		
 9e,G #i"# ()M9#7#7"88K1+> -224 -g w))) ..tW.EJ''-v4v'8
 &&t,-  $!#$s   <D( (D>=D>c                     | j                   }|j                  }|t               D cg c]"  }t        j                  j                  |d      $ c}z  }||_        y c c}w )Nnbconfig)config_managerr=   r   ospathjoin)r[   rf   r=   ps       r   _load_jupyter_server_extensionrk      s[     --N%66"5"79 a4 9 9&6N#9s   'A)F)__doc__rg   r&   r/   	functoolsr   jupyter_core.pathsr   traitlets.traitletsr   &jupyter_server.services.config.managerr   traitsr   rU   r
   r,   r5   r;   rF   rc   rk   r   r   r   <module>rr      sR    
    2 ( A %	i 	)<<
":-x7r   