
    lKj(                     
   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 G d de      Zdef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    u/Users/ahmed/devFolder/Ultron/claude-voice/.venv/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                   H    e Zd ZdZeZdZej                  e	dd              Z
y)APIStatusHandlerzAn API status handler.FNc                   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     B'Q- 0's   )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)returnN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     Iv:fc2s   updatable_fields)identityrL   )get_argumentrB   loads
ValueErrorr   	HTTPErrorrP   dictcurrent_useritemsrQ   listallr   
authorizeris_authorizedappendidentity_providerrS   identity_modelwriterC   )r   permissions_jsonbad_permissions_msgpermissions_to_checkerL   userresourceactionsallowedrR   r	   rT   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        d| 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.zdict[UpdatableField, str]rN   zInvalid or missing JSON bodyra   i  z)Identity provider not configured properlysuccess)statusrT   Ni  )r   get_json_bodyr   rX   r;   rP   r
   update_userrc   rb   rW   rQ   NotImplementedError)r   	user_datara   updated_userrg   s        r   patchzIdentityHandler.patchx   s      4d6H6H6JK	--%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   A(C>+5B!  C>!	C;* C

C; C66C;;C>N)r(   r)   r*   r+   r   r.   r    rt   r&   r   r   rJ   rJ   I   s8    8)& )&V 	4 4r   rJ   c                   F    e Zd ZdZeZdZej                  e	d               Z
y)PathResolverHandlerzPath resolver handler.Fc           
        K   | j                  d      }| j                  dd      }d| j                  i}g }|r	 | j                  j                  |      |d<   |j                         D cg c]6  \  }}t        |d
      r%|t        |j                  |             d{   d8 }}}d|D 	cg c]
  }	|	d   	|	 c}	i}
|r||
d<   | j                  t        j                  |
             y# t        j
                  $ r3}|j                  dk(  r|j                  dd| dd	       n Y d}~d}~ww xY w7 c c}}w c c}	w w)zResolve the path.r   kernelN)defaultserveri  zKernel z could not be found)scopereasonresolve_path)r{   r   resolved
unresolved)get_query_argumentcontents_managerr<   
get_kernelr   rX   status_coder`   r[   hasattrr   r}   rA   rB   rC   )r   r   kernel_uuidscopesr   rg   namer{   r~   entryresponses              r   r    zPathResolverHandler.get   sV     &&v.--h-E"*D,A,A!B+-
#'#6#6#A#A+#Nx   &||~
-eun- ,u7I7I$7O*P$PQ- 	 

 H ZH5f@YH Z[%/H\"DJJx() == ==C'%%"*}L_6`a 	 %Q

 ![sd   7EC- E+2D8D6D8&E.
D>9D>=0E-D3 )D.)E.D33E6D88ENrG   r&   r   r   rv   rv      s/     !MO*  *r   rv   z/api/spec.yamlz/api/statusz/api/mez/api/resolvePath)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   rJ   rv   default_handlersr&   r   r   <module>r      s    .  	  +  : 4 I 7S**N 47z 74C4j C4L **  *H '%&!-.	 r   