Ë
    :vžj(  ã                   ó
  — 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/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyter_server/services/api/handlers.pyr   zAPISpecHandler.initialize   s(   € ä×Ñ×(Ñ(¨´B·G±G·O±OÄHÓ4MÐ(ÕNó    c                 ó(   — | j                  dd¬«      S )Núapi.yamlF)Úinclude_body)Úgetr   s    r   ÚheadzAPISpecHandler.head   s   € ð �x‰x˜
°ˆ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“|Ø,ñ	
ˆð 	�‰”D—J‘J˜u°Ô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œ: f¬c×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ÐØ fÐgwÐfzÐ{ÐÙðEÜ'+§z¡zÐ2BÓ'CÐ$ô Ð2´DÔ9Ü—m‘m CÐ)<Ó=Ð=à#%Ð à,.ˆØ× Ñ ˆà!5×!;Ñ!;Ö!=ÑˆH�gä˜x¬Ô-Ü! '¬4Ô0ÜÑIÁÓIÔIä—m‘m CÐ)<Ó=Ð=à.0Ð0ˆG�k (Ñ+Û!�Ü#/Ø—O‘O×1Ñ1°$¸¸fÀhÓOó$÷ �
ò Ø—N‘N 6Õ*ñ "ð ">ð" +/×*@Ñ*@×*QÑ*QˆÐ&Ñ'à#'×#9Ñ#9×#HÑ#HÈÓ#Nˆà Ø&ñ
ˆð 	�
‰
”4—:‘:˜eÓ$Õ%øôE ò EÜ—m‘m CÐ)<Ó=À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ã   è ø€ ô Ð4°d×6HÑ6HÓ6JÓKˆ	ÙÜ—-‘- Ð%CÓDÐDð !ŸM™MÐ*=Ñ>ÐÜÐ+Ô-=Ô>Ü—-‘- Ð%PÓQÐQð	4Ø,×8Ñ8¸¸yÓIˆLØ�J‰JØ$Ð2C×2RÑ2RÐS_Ó2`Ñaõøô ò 	4Ü—-‘- ¤S¨£VÓ,°!Ð3ûÜ"ò 	4Ü—-‘- ¤S¨£VÓ,°!Ð3ûð	4üs6   ‚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Ü�u˜nÔ-ð ¬,°u×7IÑ7IÈ$Ó7OÓ*P×$PÓQØ-ð 	ñ 
ð
 ±HÓ Z±H¨5ÀÀfÁÑ@Y¢°HÑ ZÐ[ˆÙØ%/ˆH�\Ñ"Ø�‰”D—J‘J˜xÓ(Õ)øô —=‘=ò Ø—=‘= 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7�zô 7ô4C4�jô C4ôL *˜*ô  *ðH ˜Ð'ØÐ%Ð&Ø�Ð!ØÐ-Ð.ð	Ñ r   