o
    i                     @   s`   d 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 G dd deZd	ZdS )
z*Tornado handlers for extension management.    N)	urlencode
urlunparse)
APIHandler)web)ExtensionManagerc                       s>   e Zd Zdef fddZejdd Zejdd Z  Z	S )ExtensionHandlermanagerc                    s   t    || _d S )N)super
initializer   )selfr   	__class__ h/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyterlab/handlers/extension_manager_handler.pyr
      s   

zExtensionHandler.initializec              	      s   |  dd}tdt|  dd}tdt|  dd}|  d	d
dkr0| j|||I dH  | j|||I dH \}}| d |durg }||d}|durU||d< t| j	j
| j	j| j	jdt|dddf}|d| d |dkrtd|d |d< t| j	j
| j	j| j	jdt|dddf}	|d|	 d ||k rt|d ||d< t| j	j
| j	j| j	jdt|dddf}
|d|
 d d|d< t| j	j
| j	j| j	jdt|dddf}|d| d | dd| | ttttj| dS )a  GET query returns info on extensions

        Query arguments:
            refresh: [optional] Force refreshing the list of extensions - ["0", "1"]; default 0
            query: [optional] Query to search for extensions - default None (i.e. returns installed extensions)
            page: [optional] Result page - default 1 (min. 1)
            per_page: [optional] Number of results per page - default 30 (max. 100)
        queryN   page1d   per_page30refresh0   )r   r    T)doseq<z>; rel="last"z>; rel="prev"z>; rel="next"z>; rel="first"Linkz, )get_argumentmaxintminr   r   list_extensions
set_statusr   requestprotocolhostpathr   append
set_headerjoinfinishjsondumpslistmapdataclassesasdict)r   r   r   r   
extensions	last_pagelinks
query_argslastprevnext_firstr   r   r   get   sx   










 zExtensionHandler.getc              
      s&  |   }|d }|d }|d}|dvs|s$tdd|d|d}z:|d	kr6| j||I dH }n)|d
krD| j|I dH }n|dkrR| j|I dH }n|dkr_| j|I dH }W n t	yu } z	tdt
||d}~ww |jdkr| d n| d | tt| dS )a^  POST query performs an action on a specific extension

        Body arguments:
            {
                "cmd": Action to perform - ["install", "uninstall", "enable", "disable"]
                "extension_name": Extension name
                "extension_version": [optional] Extension version (used only for install action)
            }
        cmdextension_nameextension_version)install	uninstallenabledisablei  zCould not process instruction z with extension name Nr>   r?   r@   rA   i  error   )get_json_bodyr:   r   	HTTPErrorr   r>   r?   r@   rA   	Exceptionstrstatusr#   r+   r,   r-   r0   r1   )r   datar;   nameversion	ret_valueer   r   r   postb   s:   


zExtensionHandler.post)
__name__
__module____qualname__r   r
   r   authenticatedr:   rN   __classcell__r   r   r   r   r      s    
Lr   z/lab/api/extensions)__doc__r0   r,   urllib.parser   r   jupyter_server.base.handlersr   tornador   jupyterlab.extensions.managerr   r   extensions_handler_pathr   r   r   r   <module>   s    |