
    ^h                         S r SSKrSSKrSSKJrJr  SSKJr  SSKJ	r	  SSK
JrJr  SSKJr  SSKJrJr  S	S
KJrJr  Sr " S S\	R,                  \5      r " S S\5      r " S S\5      rS\4S\4S\4/rg)z(Tornado handlers for api specifications.    N)Anycast)ensure_async)web)	isoformatutcfromtimestamp)
authorized)IdentityProviderUpdatableField   )
APIHandlerJupyterHandlerapic                       \ rS rSrSr\rS r\R                  \
S 5       5       r\R                  \
S 5       5       rS rSrg)	APISpecHandler   z A spec handler for the REST API.c                     [         R                  R                  U [        R                  R                  [        5      S9  g)z Initialize the API spec handler.)pathN)r   StaticFileHandler
initializeosr   dirname__file__selfs    ^/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_server/services/api/handlers.pyr   APISpecHandler.initialize   s(    ((BGGOOH4M(N    c                 "    U R                  SSS9$ )Napi.yamlF)include_body)getr   s    r   headAPISpecHandler.head   s     xx
x77r   c                 x    U R                   R                  S5        [        R                  R	                  U S5      $ )zGet the API spec.z+Serving api spec (experimental, incomplete)r    )logwarningr   r   r"   r   s    r   r"   APISpecHandler.get#   s0     	FG$$((z::r   c                     g)zGet the content type.ztext/x-yaml r   s    r   get_content_typeAPISpecHandler.get_content_type*   s    r   r*   N)__name__
__module____qualname____firstlineno____doc__AUTH_RESOURCEauth_resourcer   r   authenticatedr	   r#   r"   r+   __static_attributes__r*   r   r   r   r      sY    *!MO 	8  8 	;  ;
r   r   c                   N    \ rS rSrSr\rSr\R                  \
S 5       5       rSrg)APIStatusHandler/   zAn API status handler.Fc                   #    U R                   R                  S[        S5      5      n[        U5      n[	        U R
                  R                  5       5      I Sh  vN n[        S U 5       5      n[        U R                  R                  5       5      nUU[        U5      US.nU R                  [        R                  " USS95        g Nn7f)zGet the API status.startedr   Nc              3   *   #    U  H	  oS    v   M     g7f)connectionsNr*   ).0ks     r   	<genexpr>'APIStatusHandler.get.<locals>.<genexpr>>   s     B'Q- 0's   )r:   last_activitykernelsr<   T)	sort_keys)settingsr"   r   r   r   kernel_managerlist_kernelssumapplicationrA   lenfinishjsondumps)r   r:   rB   total_connectionsrA   models         r   r"   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A/C
r*   N)r-   r.   r/   r0   r1   r2   r3   _track_activityr   r4   r	   r"   r5   r*   r   r   r7   r7   /   s/     !MO7  7r   r7   c                   `    \ rS rSrSr\R                  S 5       r\R                  S 5       rSr	g)IdentityHandlerI   z.Get or patch the current user's identity modelc           
        #    U R                  SS5      nSU< 3nU(       aD   [        R                  " U5      n[        U[        5      (       d  [        R
                  " SU5      eO0 n0 nU R                  nUR                  5        H  u  px[        U[        5      (       a,  [        U[        5      (       a  [        S U 5       5      (       d  [        R
                  " SU5      e/ =oU'   U HJ  n
[        U R                  R                  XX5      5      I Sh  vN nU(       d  M9  U	R!                  U
5        ML     M     U R"                  R$                  US'   U R"                  R'                  U5      nUUS.nU R)                  [        R*                  " U5      5        g! [         a  n[        R
                  " SU5      UeSnAff = f N7f)	zGet the identity model.permissions zDpermissions should be a JSON dict of {"resource": ["action",]}, got   Nc              3   B   #    U  H  n[        U[        5      v   M     g 7f)N)
isinstancestr)r=   actions     r   r?   &IdentityHandler.get.<locals>.<genexpr>b   s     Iv:fc22s   updatable_fields)identityrU   )get_argumentrK   loads
ValueErrorr   	HTTPErrorrY   dictcurrent_useritemsrZ   listallr   
authorizeris_authorizedappendidentity_providerr]   identity_modelwriterL   )r   permissions_jsonbad_permissions_msgpermissions_to_checkerU   userresourceactionsallowedr[   r	   r^   rN   s                 r   r"   IdentityHandler.getL   s     !% 1 1- D fgwfz{E'+zz2B'C$ 2D99mmC)<== : $& ,.  !5!;!;!=Hx--!'400IIIImmC)<==.00G(+!#/OO11$fO$ 
 :NN6* " ">" +/*@*@*Q*Q&'#'#9#9#H#H#N &
 	

4::e$%E  EmmC)<=1DE(s;    GF CGG	G$A8G
G&F>>GGc                 @  #    [        [        [        [        4   U R	                  5       5      nU(       d  [
        R                  " SS5      eU R                  S   n[        U[        5      (       d  [
        R                  " SS5      e UR                  X5      nU R                  SUR                  U5      S.5        g! [         a&  n[
        R                  " S[        U5      5      UeSnAf[         a&  n[
        R                  " S	[        U5      5      UeSnAff = f7f)
zUpdate user information.rW   zInvalid or missing JSON bodyrk   i  z)Identity provider not configured properlysuccess)statusr^   Ni  )r   rc   r   rZ   get_json_bodyr   rb   rD   rY   r
   update_userrm   rl   ra   NotImplementedError)r   	user_datark   updated_userrq   s        r   patchIdentityHandler.patchx   s      nc12D4F4F4HI	--%CDD !MM*=>+-=>>--%PQQ	4,88ILJJ$2C2R2RS_2`a  	4--SV,!3" 	4--SV,!3	4s6   BD4B= <D=
D!C((D5!DDDr*   N)
r-   r.   r/   r0   r1   r   r4   r"   r   r5   r*   r   r   rR   rR   I   s8    8)& )&V 	4 4r   rR   z/api/spec.yamlz/api/statusz/api/me)r1   rK   r   typingr   r   jupyter_core.utilsr   tornador   jupyter_server._tzr   r   jupyter_server.auth.decoratorr	   jupyter_server.auth.identityr
   r   base.handlersr   r   r2   r   r   r7   rR   default_handlersr*   r   r   <module>r      s|    .  	  +  : 4 I 7S**N 47z 74C4j C4N '%&! r   