
    Keb                         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e	j        e          Z G d de          Z G 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                   R    e Zd ZdZeZd Zej        e	d                         Z
d ZdS )APISpecHandlerz A spec handler for the REST API.c                     t           j                            | t          j                            t                               dS )z Initialize the API spec handler.)pathN)r   StaticFileHandler
initializeosr   dirname__file__selfs    Dlib/python3.11/site-packages/jupyter_server/services/api/handlers.pyr   zAPISpecHandler.initialize   s2    ((BGOOH4M4M(NNNNN    c                 v    | j                             d           t          j                            | d          S )zGet the API spec.z+Serving api spec (experimental, incomplete)zapi.yaml)logwarningr   r   getr   s    r   r   zAPISpecHandler.get   s4     	FGGG$((z:::r   c                     dS )zGet the content type.ztext/x-yaml r   s    r   get_content_typezAPISpecHandler.get_content_type#   s    }r   N)__name__
__module____qualname____doc__AUTH_RESOURCEauth_resourcer   r   authenticatedr	   r   r!   r    r   r   r   r      si        **!MO O O 	; ; Z ;
    r   r   c                   J    e Zd ZdZeZdZej        e	d                         Z
dS )APIStatusHandlerzAn API status handler.Fc                   K   | j                             dt          d                    }t          |          }t	          | j                                                   d{V }t          d |D                       }t          | j        	                                          }||t          |          |d}|                     t          j        |d                     dS )zGet the API status.startedr   Nc              3   &   K   | ]}|d          V  dS )connectionsNr    ).0ks     r   	<genexpr>z'APIStatusHandler.get.<locals>.<genexpr>7   s'      BBQ- 0BBBBBBr   )r,   last_activitykernelsr.   T)	sort_keys)settingsr   r   r   r   kernel_managerlist_kernelssumapplicationr2   lenfinishjsondumps)r   r,   r3   total_connectionsr2   models         r   r   zAPIStatusHandler.get.   s      
 -##I/?/B/BCCG$$$T%8%E%E%G%GHHHHHHHHBB'BBBBB!$"2"@"@"B"BCC*7||,	
 
 	DJu55566666r   N)r"   r#   r$   r%   r&   r'   _track_activityr   r(   r	   r   r    r   r   r*   r*   (   sK          !MO7 7 Z 7 7 7r   r*   c                   2    e Zd ZdZej        d             ZdS )IdentityHandlerz%Get the current user's identity modelc                    |                      dd          }d|}|ri	 t          j        |          }n(# t          $ r}t	          j        d|          |d}~ww xY wt          |t                    st	          j        d|          ni }i }| j        }|	                                D ]\  }}t          |t                    r.t          |t                    rt          d |D                       st	          j        d|          g x}	||<   |D ]5}
| j                            | |||
          r|	                    |
           6| j                            |          }||d}|                     t          j        |                     dS )	zGet the identity model.permissions zDpermissions should be a JSON dict of {"resource": ["action",]}, got i  Nc              3   @   K   | ]}t          |t                    V  d S )N)
isinstancestr)r/   actions     r   r1   z&IdentityHandler.get.<locals>.<genexpr>[   s,      IIv:fc22IIIIIIr   )userresourcerI   )identityrD   )get_argumentr<   loads
ValueErrorr   	HTTPErrorrG   dictcurrent_useritemsrH   listall
authorizeris_authorizedappendidentity_provideridentity_modelwriter=   )r   permissions_jsonbad_permissions_msgpermissions_to_checkerD   rJ   rK   actionsallowedrI   rL   r?   s                r   r   zIdentityHandler.getE   s    !% 1 1- D D{gw{{ 	&E'+z2B'C'C$$ E E EmC)<==1DE2D99 >mC)<===> $& ,. !5!;!;!=!= 	+ 	+Hgx-->!'400> IIIIIII>
 mC)<===.00Gk(+! + +?00D8\b0cc +NN6***+ />>tDD &
 
 	

4:e$$%%%%%s   4 
AAAN)r"   r#   r$   r%   r   r(   r   r    r   r   rB   rB   B   s7        //#& #& #& #& #&r   rB   z/api/spec.yamlz/api/statusz/api/me)r%   r<   r   typingr   r   jupyter_core.utilsr   tornador   jupyter_server._tzr   r   jupyter_server.auth.decoratorr	   base.handlersr   r   r&   r   r   r*   rB   default_handlersr    r   r   <module>ri      sO   . .  				         + + + + + +       : : : : : : : : 4 4 4 4 4 4 7 7 7 7 7 7 7 7    S*N   *7 7 7 7 7z 7 7 74'& '& '& '& '&j '& '& '&V '%&!   r   