o
    iX                     @   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mZ ddlmZ dd	lmZmZ d
ZG dd de	jeZG dd deZG dd deZdefdefdefgZdS )z(Tornado handlers for api specifications.    N)DictList)ensure_async)web)	isoformatutcfromtimestamp)
authorized   )
APIHandlerJupyterHandlerapic                   @   s6   e Zd ZdZeZdd Zeje	dd Z
dd ZdS )	APISpecHandlerz A spec handler for the REST API.c                 C   s   t jj| tjtd dS )z Initialize the API spec handler.)pathN)r   StaticFileHandler
initializeosr   dirname__file__self r   _/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_server/services/api/handlers.pyr      s   zAPISpecHandler.initializec                 C   s   | j d tj| dS )zGet the API spec.z+Serving api spec (experimental, incomplete)zapi.yaml)logwarningr   r   getr   r   r   r   r      s   zAPISpecHandler.getc                 C   s   dS )zGet the content type.ztext/x-yamlr   r   r   r   r   get_content_type#   s   zAPISpecHandler.get_content_typeN)__name__
__module____qualname____doc__AUTH_RESOURCEauth_resourcer   r   authenticatedr   r   r   r   r   r   r   r      s    r   c                   @   s*   e Zd ZdZeZdZeje	dd Z
dS )APIStatusHandlerzAn API status handler.Fc                    sz   | j dtd}t|}t| j I dH }tdd |D }t| j	 }||t
||d}| tj|dd dS )	zGet the API status.startedr   Nc                 s   s    | ]}|d  V  qdS )connectionsNr   ).0kr   r   r   	<genexpr>7   s    z'APIStatusHandler.get.<locals>.<genexpr>)r$   last_activitykernelsr%   T)	sort_keys)settingsr   r   r   r   kernel_managerlist_kernelssumapplicationr)   lenfinishjsondumps)r   r$   r*   total_connectionsr)   modelr   r   r   r   .   s   zAPIStatusHandler.getN)r   r   r   r   r    r!   _track_activityr   r"   r   r   r   r   r   r   r#   (   s    r#   c                   @   s   e Zd ZdZejdd ZdS )IdentityHandlerz%Get the current user's identity modelc              
   C   s  |  dd}d|}|r4zt|}W n ty' } ztd||d}~ww t|ts3td|ni }i }| j}|	 D ]7\}}t|t
rVt|trVtdd |D s\td|g  }	||< |D ]}
| jj| |||
dru|	|
 qdq?| j|}||d	}| t| dS )
zGet the identity model.permissions zDpermissions should be a JSON dict of {"resource": ["action",]}, got i  Nc                 s   s    | ]}t |tV  qd S )N)
isinstancestr)r&   actionr   r   r   r(   [   s    z&IdentityHandler.get.<locals>.<genexpr>)userresourcer=   )identityr9   )get_argumentr3   loads
ValueErrorr   	HTTPErrorr;   dictcurrent_useritemsr<   listall
authorizeris_authorizedappendidentity_provideridentity_modelwriter4   )r   permissions_jsonbad_permissions_msgpermissions_to_checker9   r>   r?   actionsallowedr=   r@   r6   r   r   r   r   E   sD   


zIdentityHandler.getN)r   r   r   r   r   r"   r   r   r   r   r   r8   B   s    r8   z/api/spec.yamlz/api/statusz/api/me)r   r3   r   typingr   r   jupyter_core.utilsr   tornador   jupyter_server._tzr   r   jupyter_server.authr   base.handlersr
   r   r    r   r   r#   r8   default_handlersr   r   r   r   <module>   s"    +