
    Xh                         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	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y)z(Tornado handlers for api specifications.    N)Anycast)ensure_async)web)	isoformatutcfromtimestamp)
authorized)IdentityProviderUpdatableField   )
APIHandlerJupyterHandlerapic                   |    e Zd ZdZeZd Zej                  e	d               Z
ej                  e	d               Zd Zy)APISpecHandlerz A spec handler for the REST API.c                     t         j                  j                  | t        j                  j                  t                     y)z Initialize the API spec handler.)pathN)r   StaticFileHandler
initializeosr   dirname__file__selfs    X/var/www/html/myenv/lib/python3.12/site-packages/jupyter_server/services/api/handlers.pyr   zAPISpecHandler.initialize   s(    ((BGGOOH4M(N    c                 (    | j                  dd      S )Napi.yamlF)include_body)getr   s    r   headzAPISpecHandler.head   s     xx
x77r   c                 x    | j                   j                  d       t        j                  j	                  | d      S )zGet the API spec.z+Serving api spec (experimental, incomplete)r   )logwarningr   r   r    r   s    r   r    zAPISpecHandler.get#   s0     	FG$$((z::r   c                      y)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   r      sY    *!MO 	8  8 	;  ;
r   r   c                   F    e Zd ZdZeZdZej                  e	d               Z
y)APIStatusHandlerzAn API status handler.Fc                   K   | j                   j                  dt        d            }t        |      }t	        | j
                  j                                d{   }t        d |D              }t        | j                  j                               }||t        |      |d}| j                  t        j                  |d             y7 pw)zGet the API status.startedr   Nc              3   &   K   | ]	  }|d      yw)connectionsNr&   ).0ks     r   	<genexpr>z'APIStatusHandler.get.<locals>.<genexpr>>   s     BQ- 0Bs   )r2   last_activitykernelsr4   T)	sort_keys)settingsr    r   r   r   kernel_managerlist_kernelssumapplicationr8   lenfinishjsondumps)r   r2   r9   total_connectionsr8   models         r   r    zAPIStatusHandler.get5   s     
 --##I/?/BCG$$T%8%8%E%E%GHHB'BB!$"2"2"@"@"BC*7|,	
 	DJJu56 Is   ACC
A1CN)r(   r)   r*   r+   r,   r-   _track_activityr   r.   r	   r    r&   r   r   r0   r0   /   s/     !MO7  7r   r0   c                   X    e Zd ZdZej
                  d        Zej
                  d        Zy)IdentityHandlerz.Get or patch the current user's identity modelc           
      F  K   | j                  dd      }d|}|r<	 t        j                  |      }t        |t              st	        j
                  d|      i }i }| j                  }|j                         D ]  \  }}t        |t              r"t        |t              rt        d |D              st	        j
                  d|      g x}	||<   |D ]E  }
t        | j                  j                  | ||
|             d{   }|s5|	j!                  |
       G  | j"                  j$                  |d<   | j"                  j'                  |      }||d}| j)                  t        j*                  |             y# t        $ r}t	        j
                  d|      |d}~ww xY w7 w)	zGet the identity model.permissions zDpermissions should be a JSON dict of {"resource": ["action",]}, got   Nc              3   <   K   | ]  }t        |t                y w)N)
isinstancestr)r5   actions     r   r7   z&IdentityHandler.get.<locals>.<genexpr>b   s     Iv:fc2Is   updatable_fields)identityrJ   )get_argumentrB   loads
ValueErrorr   	HTTPErrorrN   dictcurrent_useritemsrO   listallr   
authorizeris_authorizedappendidentity_providerrQ   identity_modelwriterC   )r   permissions_jsonbad_permissions_msgpermissions_to_checkerJ   userresourceactionsallowedrP   r	   rR   rE   s                 r   r    zIdentityHandler.getL   s     !% 1 1- D fgwfz{E'+zz2B'C$ 2D9mmC)<==#% ,.  !5!;!;!= 	+Hgx-!'40IIImmC)<==.00Gk(+! +#/OO11$fhO$ 
 NN6*+	+" +/*@*@*Q*Q&'#'#9#9#H#H#N &
 	

4::e$%E  EmmC)<=1DE(s;   F!E7 C
F!<F=F!A3F!7	F FFF!c                 "  K   t        t        t        t        f   | j	                               }|st        j                  dd      | j                  d   }t        |t              st        j                  dd      	 |j                  | |      }| j                  d|j                  |      d       y# t        $ r%}t        j                  dt        |            |d}~wt        $ r%}t        j                  d	t        |            |d}~ww xY ww)
zUpdate user information.rL   zInvalid or missing JSON bodyr_   i  z)Identity provider not configured properlysuccess)statusrR   Ni  )r   rW   r   rO   get_json_bodyr   rV   r;   rN   r
   update_userra   r`   rU   NotImplementedError)r   	user_datar_   updated_userre   s        r   patchzIdentityHandler.patchx   s      nc12D4F4F4HI	--%CDD !MM*=>+-=>--%PQQ	4,88yILJJ$2C2R2RS_2`a  	4--SV,!3" 	4--SV,!3	4s6   A9D<5B2 1D2	D; CD' DDDN)r(   r)   r*   r+   r   r.   r    rr   r&   r   r   rH   rH   I   s8    8)& )&V 	4 4r   rH   z/api/spec.yamlz/api/statusz/api/me)r+   rB   r   typingr   r   jupyter_core.utilsr   tornador   jupyter_server._tzr   r   jupyter_server.auth.decoratorr	   jupyter_server.auth.identityr
   r   base.handlersr   r   r,   r   r   r0   rH   default_handlersr&   r   r   <module>r{      s|    .  	  +  : 4 I 7S**N 47z 74C4j C4N '%&! r   