Ë
    :vžj!)  ã                  ó*  — d Z ddlmZ ddlZddlZddlZddlZddlZddl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 dd	lmZmZ dd
lmZ ddlmZ dZdZ ej:                  d«      € ej<                  dd«        G d„ de«      Z G d„ de«      Z y)z3Manager and Tornado handlers for license reporting.é    )ÚannotationsN)ÚThreadPoolExecutor)ÚPath)ÚTYPE_CHECKINGÚAny)Ú
APIHandler)Úweb)ÚListÚUnicode)ÚLoggingConfigurableé   )Úget_federated_extensionszthird-party-licenses.jsonÚUNKNOWNútext/markdownz.mdc                  ó´   — e Zd ZdZ ed¬«      Z e e«       ede› �gd¬«      Z	e
dd„«       Z	 d	 	 	 	 	 	 	 dd„Zdd	„Zdd
„Zdd„Zddd„Zdd„Zdd„Zddd„Zy)ÚLicensesManagerz€A manager for listing the licenses for all frontend end code distributed
    by an application and any federated extensions
    r   )Úmax_workerszstatic/z=the license report data in built app and federated extensions)Údefault_valueÚhelpc                óô   — t         rddlm} t        | j                  |«      sJ ‚| j                  j
                  | j                  j                  g}|D ��cg c]  }|D ]  }|‘Œ Œ }}}t        |«      S c c}}w )zÚLazily load the currrently-available federated extensions.

        This is expensive, but probably the only way to be sure to get
        up-to-date license information for extensions installed interactively.
        r   ©ÚLabServerApp)r   Úappr   Ú
isinstanceÚparentÚlabextensions_pathÚextra_labextensions_pathr   )Úselfr   Ú	per_pathsÚ
extensionsÚ	extensionr   s         ús/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyterlab_server/licenses_handler.pyÚfederated_extensionsz$LicensesManager.federated_extensions1   su   € õ Ý)ä˜dŸk™k¨<Ô8Ð8Ð8ð �K‰K×*Ñ*Ø�K‰K×0Ñ0ð
ˆ	ñ ;DÔ`¹)¨JÓU_È	šiÐU_˜i¸)ÐÑ`Ü'Ð(:Ó;Ð;ùó as   ÁA4c              ƒ  ó–   K  — t        j                  | j                  j                  | j                  |||¬«      «      ƒ d{  –—† S 7 Œ­w)zrAsynchronous wrapper around the potentially slow job of locating
        and encoding all of the licenses
        ©Úreport_formatÚbundles_patternÚ	full_textN)ÚasyncioÚwrap_futureÚexecutorÚsubmitÚreport)r   r&   r'   r(   s       r"   Úreport_asynczLicensesManager.report_asyncD   sL   è ø€ ô ×(Ñ(Ø�M‰M× Ñ Ø—‘Ø+Ø /Ø#ð	 !ó ó
÷ 
ð 	
ð 
ús   ‚A A	ÁAÁA	c                óÜ   — | j                  |¬«      }|dk(  r| j                  |«      dfS |dk(  r| j                  |«      dfS |dk(  r| j                  ||¬«      dfS d	|› d
�}t	        |«      ‚)z*create a human- or machine-readable report)r'   Újsonzapplication/jsonÚcsvztext/csvÚmarkdown)r(   r   zUnsupported report format Ú.)ÚbundlesÚreport_jsonÚ
report_csvÚreport_markdownÚ
ValueError)r   r&   r'   r(   r4   Úmsgs         r"   r-   zLicensesManager.reportS   s�   € à—,‘,¨�,Ó?ˆØ˜FÒ"Ø×#Ñ# GÓ,Ð.@Ð@Ð@Ø˜EÒ!Ø—?‘? 7Ó+¨ZÐ7Ð7Ø˜JÒ&à×$Ñ$ W¸	Ð$ÓBØðð ð
 +¨=¨/¸Ð;ˆÜ˜‹oÐó    c                ó6   — t        j                  d|idd¬«      S )z0create a JSON report
        TODO: SPDX
        r4   é   T)ÚindentÚ	sort_keys)r0   Údumps)r   r4   s     r"   r5   zLicensesManager.report_jsonc   s   € ô �z‰z˜9 gÐ.°qÀDÔIÐIr:   c                ó\  — t        j                  «       }g d¢}t        j                  |dg|¢¬«      }|j	                  «        |j                  «       D ]C  \  }}|d   D ]6  }|j                  d|i|D �ci c]  }||j                  |d«      “Œ c}¥«       Œ8 ŒE |j                  «       S c c}w )zcreate a CSV report)ÚnameÚversionInfoÚ	licenseIdÚextractedTextÚbundle)Ú
fieldnamesÚpackagesÚ )	ÚioÚStringIOr1   Ú
DictWriterÚwriteheaderÚitemsÚwriterowÚgetÚgetvalue)	r   r4   ÚoutfilerF   ÚwriterÚbundle_namerE   ÚpackageÚfields	            r"   r6   zLicensesManager.report_csvi   s®   € ä—+‘+“-ˆÚJˆ
Ü—‘ °XÐ4KÀ
Ð4KÔLˆØ×ÑÔØ#*§=¡=¦?ÑˆK˜Ø! *Ô-�Ø—‘à  +ðáFPÓQÁj¸U˜5 '§+¡+¨e°RÓ"8Ñ8ÀjÑQðõñ .ð $3ð ×ÑÓ!Ð!ùò Rs   Á3B)c                ó@  — g }|j                  «       D ���cg c];  \  }}|j                  dg «      D ]!  }t        |j                  dt        «      «      ‘Œ# Œ= }}}}|rt	        |«      nd}|j                  «       D �]
  \  }}|d|› �dgz  }|j                  dg «      }	|	s|ddgz  }Œ-|	D ]Ù  }|j                  dt        «      j                  «       }
|j                  dt        «      j                  «       }|j                  dt        «      j                  «       }|j                  d	d«      }|d
dj                  d|
› d�j                  |«      d|› d�j                  d«      |g«      z   gz  }|sŒÅ|s|g d¢z  }ŒÏ|ddd|ddgz  }ŒÛ �Œ dj                  |«      S c c}}}w )zcreate a markdown reportrG   rA   r   z# rH   z> No licenses foundrB   rC   rD   z## Ú	z**Ú`é   )rH   z> No license text availablerH   z<pre/>z</pre>Ú
)rM   rO   ÚlenÚUNKNOWN_PACKAGE_NAMEÚmaxÚstripÚjoinÚljust)r   r4   r(   ÚlinesrS   rE   rT   Úlibrary_namesÚlongest_namerG   rA   Úversion_infoÚ
license_idÚextracted_texts                 r"   r7   zLicensesManager.report_markdowny   sÁ  € àˆð (/§}¡}¤õ
á'6Ñ#�˜VØ!Ÿ:™: j°"Ö5�ô �—‘˜FÔ$8Ó9Õ:à5ð ;Ø'6ð 	ò 
ñ
 .;”s˜=Ô)Àˆà#*§=¡=§?ÑˆK˜à˜˜;˜-Ð(¨"Ð-Ñ-ˆEà—z‘z *¨bÓ1ˆHÙØÐ/°Ð4Ñ4�Øã#�Ø—{‘{ 6Ô+?Ó@×FÑFÓH�Ø&Ÿ{™{¨=Ô:NÓO×UÑUÓW�Ø$Ÿ[™[¨Ô6JÓK×QÑQÓS�
Ø!(§¡¨_¸bÓ!A�àØàŸ	™	à$& t f¨BÐ 1× 7Ñ 7¸Ó EØ$% l ^°1Ð 7× =Ñ =¸bÓ AØ *ðóñ	ðñ �ò Ù)ØÒ!HÑH™à " b¨(°NÀHÈbÐ!QÑQ™ò/ $ð $3ðB �y‰y˜ÓÐùôQ
s   —A Fc                ó4  — dg i}g }| j                   D ]x  }||z  }| j                  j                  d|«       |j                  «       s||gz  }Œ;	 t	        j
                  |j                  d¬«      «      }	 |d   j                  |d   «       Œz |d   s| j                  j                  d||«       |S # t        $ r(}| j                  j                  d|||«       Y d}~ŒËd}~ww xY w# t        $ r(}| j                  j                  d|||«       Y d}~Œÿd}~ww xY w)	z2Return the content of a packages's license bundlesrG   zLoading licenses from %súutf-8©Úencodingz1Failed to open third-party licenses for %s: %s
%sNz%Failed to find packages for %s: %s
%sz)Third-party licenses not found for %s: %s)
Úthird_party_licenses_filesÚlogÚdebugÚexistsr0   ÚloadsÚ	read_textÚ	ExceptionÚwarningÚextend)	r   ÚpathrE   Úbundle_jsonÚchecked_pathsÚlicense_fileÚlicenses_pathÚ	file_jsonÚerrs	            r"   Úlicense_bundlezLicensesManager.license_bundle¦   s(  € à'¨Ð,ˆØˆà ×;Ô;ˆLØ  <Ñ/ˆMØ�H‰H�N‰NÐ5°}ÔEØ ×'Ñ'Ô)Ø - Ñ0�Øð	Ü ŸJ™J }×'>Ñ'>ÈÐ'>Ó'PÓQ�	ð	Ø˜JÑ'×.Ñ.¨y¸Ñ/DÕEð' <ð: ˜:Ò&Ø�H‰H×ÑÐHÈ&ÐR_Ô`àÐøô/ ò Ø—‘× Ñ ØHØØ!Øô	ô ûðûô ò Ø—‘× Ñ Ø<ØØ!Øô	ô ûðús0   Á%B2Á5C&Â2	C#Â;CÃC#Ã&	DÃ/DÄDc                óP  — t         rddlm} t        | j                  |«      sJ ‚t        | j                  j                  «      }|dz  }|j                  «       s#|j                  dz  }|j                  «       r|}nyt        j                  |j                  d¬«      «      d   }||fS )z˜get the static directory for this app

        This will usually be in `static_dir`, but may also appear in the
        parent of `static_dir`.
        r   r   zpackage.json)NNrh   ri   rA   )r   r   r   r   r   r   Ú
static_dirrn   r0   ro   rp   )r   r   rt   Úpackage_jsonÚparent_package_jsonrA   s         r"   Úapp_static_infozLicensesManager.app_static_infoÍ   s–   € õ Ý)ä˜dŸk™k¨<Ô8Ð8Ð8Ü�D—K‘K×*Ñ*Ó+ˆØ˜nÑ,ˆØ×"Ñ"Ô$Ø"&§+¡+°Ñ">ÐØ"×)Ñ)Ô+Ø2‘à!Ü�z‰z˜,×0Ñ0¸'Ð0ÓBÓCÀFÑKˆØ�TˆzÐr:   c                ó’  — | j                   j                  «       D ��ci c]:  \  }}t        j                  ||«      r|| j	                  t        |d   «      |«      “Œ< }}}| j                  «       \  }}|�/|€J ‚t        j                  ||«      r| j	                  ||«      ||<   |s| j                  j                  d«       |S c c}}w )z6Read all of the licenses
        TODO: schema
        Úext_pathzNo license bundles found at all)	r#   rM   ÚreÚmatchr{   r   r€   rl   rr   )r   r'   rA   Úextr4   Úapp_pathÚapp_names          r"   r4   zLicensesManager.bundlesâ   sÌ   € ð "×6Ñ6×<Ñ<Ô>ô
á>‘	��cÜ�x‰x˜¨Ô.ð �$×%Ñ%¤d¨3¨z©?Ó&;¸TÓBÑBØ>ð 	ñ 
ð "×1Ñ1Ó3Ñˆ�(ØÐØÐ'Ð'Ð'Ü�x‰x˜¨Ô2Ø$(×$7Ñ$7¸À(Ó$K�˜Ñ!áØ�H‰H×ÑÐ>Ô?àˆùó
s   ž?CN)Úreturnúdict[str, Any])r2   ú.*F)r&   Ústrr'   r‹   r(   Úboolrˆ   ztuple[str, str])r4   r‰   rˆ   r‹   )T)r4   r‰   r(   rŒ   rˆ   r‹   )rt   r   rE   z
str | Nonerˆ   r‰   )rˆ   ztuple[Path | None, str | None])rŠ   )r'   r‹   rˆ   r‰   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r
   r   Ú DEFAULT_THIRD_PARTY_LICENSE_FILErk   Úpropertyr#   r.   r-   r5   r6   r7   r{   r€   r4   © r:   r"   r   r   !   s£   „ ññ "¨aÔ0€Há!%Ù‹	à,ØÐ6Ð7Ð8ð
ð Mô"Ðð ò<ó ð<ð& _dð
Ø ð
Ø@Cð
ØW[ð
à	ó
óó Jó"ô + óZ%óNõ*r:   r   c                  óf   ‡ — e Zd ZdZdˆ fd„Zej                  dd„«       Z	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZ	S )ÚLicensesHandlerz6A handler for serving licenses used by the applicationc                ó0   •— t         ‰| �  «        || _        y)zInitialize the handler.N)ÚsuperÚ
initializeÚmanager)r   r™   Ú	__class__s     €r"   r˜   zLicensesHandler.initializeû   s   ø€ ä‰ÑÔØˆ�r:   c              ƒ  óà  K  — t        t        j                  | j                  dd«      «      «      }| j                  dd«      }| j                  dd«      }t        t        j                  | j                  dd«      «      «      }| j                  j                  |||¬	«      ƒ d
{  –—† \  }}t        r(ddlm} t        | j                  j                  |«      sJ ‚|rbdj                  | j                  j                  j                  j                  «       t        j                  |«      «      }	| j!                  |	«       | j#                  |«       | j%                  |¬«      ƒ d
{  –—†  y
7 ŒÅ7 Œ­w)z Return all the frontend licensesr(   ÚtrueÚformatr0   r4   rŠ   ÚdownloadÚ0r%   Nr   r   z{}-licenses{})Ú
_mime_type)rŒ   r0   ro   Úget_argumentr™   r.   r   r   r   r   r   r�   r‡   ÚlowerÚ	mimetypesÚguess_extensionÚset_attachment_headerÚwriteÚfinish)
r   Ú_argsr(   r&   r'   rž   r-   Úmimer   Úfilenames
             r"   rO   zLicensesHandler.get   s1  è ø€ ô œŸ™ D×$5Ñ$5°kÀ6Ó$JÓKÓLˆ	Ø×)Ñ)¨(°FÓ;ˆØ×+Ñ+¨I°tÓ<ˆÜœŸ
™
 4×#4Ñ#4°ZÀÓ#EÓFÓGˆà!Ÿ\™\×6Ñ6Ø'Ø+Øð 7ó 
÷ 
‰ˆ�õ Ý)ä˜dŸl™l×1Ñ1°<Ô@Ð@Ð@áØ&×-Ñ-Ø—‘×#Ñ#×,Ñ,×2Ñ2Ó4´i×6OÑ6OÐPTÓ6UóˆHð ×&Ñ& xÔ0Ø�
‰
�6ÔØ�k‰k TˆkÓ*×*Ñ*ð#
øð" 	+ús%   ‚B"E.Â$E*Â%B?E.Å$E,Å%E.Å,E.c              �  óŠ   •K  — | j                  «        | j                  d|«       t        t        | �  |i |¤Žƒ d{  –—† S 7 Œ­w)z>Overload the regular finish, which (sensibly) always sets JSONzContent-TypeN)Úupdate_api_activityÚ
set_headerr—   r   r§   )r   r    ÚargsÚkwargsrš   s       €r"   r§   zLicensesHandler.finish  s@   øè ø€ ð 	× Ñ Ô"Ø�‰˜¨
Ô3Üœ: tÑ3°TÐD¸VÑD×DÐDÐDús   ƒ9A¼A½A)r™   r   rˆ   ÚNone)r¨   r   rˆ   r°   )r    r‹   r®   r   r¯   r   rˆ   r   )
r�   rŽ   r�   r�   r˜   r	   ÚauthenticatedrO   r§   Ú__classcell__)rš   s   @r"   r•   r•   ø   sU   ø„ Ù@õð
 	×Ñò+ó ð+ð4EØðEØ&)ðEØ58ðEà	÷Eñ Er:   r•   )!r�   Ú
__future__r   r)   r1   rI   r0   r£   rƒ   Úconcurrent.futuresr   Úpathlibr   Útypingr   r   Újupyter_server.base.handlersr   Útornador	   Ú	traitletsr
   r   Útraitlets.configr   Úconfigr   r‘   r\   r¤   Úadd_typer   r•   r“   r:   r"   Ú<module>r½      sˆ   ðÙ 9õ #ã Û 
Û 	Û Û Û 	Ý 1Ý ß %å 3Ý ß #Ý 0å ,ð $?Ð  Ø Ð à€9×Ñ˜_Ó-Ð5à€I×Ñ�¨Ô.ôTÐ)ô Tôn)E�jõ )Er:   