
    ,h"T                        S r SSK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JrJr  SSKrSSKJrJrJr  SSKJr  SS	KJr  S
SKJr  \R6                  " \5      r\ V s/ sH   o R<                  S:w  d  M  U R<                  PM"     sn r " S S\5      r  " S S\5      r! " S S\5      r"S\\\\#\$4         S\\#   S\#4S jr% " S S\5      r& " S S\5      r' " S S\5      r( " S S\5      r)S\\#\#4   4S jr*gs  sn f ) a  Contains commands to interact with jobs on the Hugging Face Hub.

Usage:
    # run a job
    hf jobs run <image> <command>

    # List running or completed jobs
    hf jobs ps [-a] [-f key=value] [--format TEMPLATE]

    # Stream logs from a job
    hf jobs logs <job-id>

    # Inspect detailed information about a job
    hf jobs inspect <job-id>

    # Cancel a running job
    hf jobs cancel <job-id>
    N)	Namespace_SubParsersAction)asdict)Path)DictListOptionalUnion)HfApiSpaceHardware	get_token)logging)load_dotenv   )BaseHuggingfaceCLICommandz	zero-a10gc                   ,    \ rS rSr\S\4S j5       rSrg)JobsCommands7   parserc                 f  ^ U R                  SSS9mTR                  SS9nTR                  U4S jS9  [        R	                  U5        [
        R	                  U5        [        R	                  U5        [        R	                  U5        [        R	                  U5        [        R	                  U5        g )NjobszRun and manage Jobs on the Hub.helpz$huggingface.co jobs related commandsc                 $   > TR                  5       $ N)
print_help)argsjobs_parsers    P/var/www/html/shao/venv/lib/python3.13/site-packages/huggingface_hub/cli/jobs.py<lambda>2JobsCommands.register_subcommand.<locals>.<lambda>>   s    ;3I3I3K    func)

add_parseradd_subparsersset_defaultsInspectCommandregister_subcommandLogsCommand	PsCommand
RunCommandCancelCommand	UvCommand)r   jobs_subparsersr   s     @r   r)    JobsCommands.register_subcommand8   s    ''5V'W%44:`4a 	  &K L 	**?;''8%%o6&&7))/:%%o6r"    N)__name__
__module____qualname____firstlineno__staticmethodr   r)   __static_attributes__r1   r"   r   r   r   7   s    7$5 7 7r"   r   c                   L    \ rS rSr\S\SS4S j5       rS\SS4S jrS
S jr	S	r
g)r,   I   r   returnNc                 ,   U R                  SSS9nUR                  S[        SS9  UR                  SSS	S
S9  UR                  SSS	SS9  UR                  S[        SS9  UR                  S[        SS9  UR                  S[        SSR                  [        5       S3S9  UR                  S[        SS9  UR                  SSSSS9  UR                  S[        SS9  UR                  S[        S S9  UR                  S!S"S#S$9  UR                  [        S%9  g )&Nrunz	Run a Jobr   imagezThe Docker image to use.typer   -e--envappendz/Set environment variables. E.g. --env ENV=valueactionr   -s	--secretsvSet secret environment variables. E.g. --secrets SECRET=value or `--secrets HF_TOKEN` to pass your Hugging Face token.
--env-file(Read in a file of environment variables.--secrets-file/Read in a file of secret environment variables.--flavorTFlavor for the hardware, as in HF Spaces. Defaults to `cpu-basic`. Possible values: , .	--timeoutzVMax duration: int/float with s (seconds, default), m (minutes), h (hours) or d (days).-d--detach
store_truez3Run the Job in the background and print the Job ID.--namespaceVThe namespace where the Job will be created. Defaults to the current user's namespace.--tokenIA User Access Token generated from https://huggingface.co/settings/tokenscommand...zThe command to run.nargsr   r#   )r%   add_argumentstrjoinSUGGESTED_FLAVORSr'   r,   r   
run_parsers     r   r)   RunCommand.register_subcommandJ   s   &&u;&?
c8RSghEvwK 	  	
 	3=gh 0sArsghlhqhq  sD  iE  hF  FG  H 	  	

 	i 	  	

 	F	 	  	
 	i 	  	

 	\ 	  	

 		=RSZ0r"   r   c                    UR                   U l         UR                  U l        0 U l        UR                  (       a`  U R                  R	                  [        [        UR                  5      R                  5       [        R                  R                  5       S95        UR                  =(       d    /  HB  nU R                  R	                  [        U[        R                  R                  5       S95        MD     0 U l        [        5       nUR                  (       aD  U R                  R	                  [        [        UR                  5      R                  5       US95        UR                  =(       d    /  H%  nU R                  R	                  [        XCS95        M'     UR                  U l        UR                  U l        UR                   U l        UR"                  U l        UR$                  U l        g )Nenviron)r=   rX   envenv_fileupdater   r   	read_textosre   copysecrets_get_extended_environsecrets_fileflavortimeoutdetach	namespacetokenselfr   	env_valueextended_environsecrets        r   __init__RunCommand.__init__w   s@   **
"&,,-/==HHOOKT]](;(E(E(GQSQ[Q[Q`Q`QbcdRIHHOOK	2::??;LMN (1302LLD1B1B,C,M,M,OYi jkll(b(FLLF MN )/3{{&*ll KK(,$(JJ
r"   c           
         [        U R                  S9nUR                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  S9n[        SUR                   35        [        SUR                   35        U R                  (       a  g UR                  UR                  S9 H  n[        U5        M     g )Nrs   )r=   rX   rf   rl   ro   rp   rr   Job started with ID: 	View at: job_id)r   rs   run_jobr=   rX   rf   rl   ro   rp   rr   printidurlrq   fetch_job_logsru   apijoblogs       r   r<   RunCommand.run   s    $**%kk**LLLL;;LLnn  
 	%cffX./	#''#$;; %%SVV%4C#J 5r"   )	rX   rq   rf   ro   r=   rr   rl   rp   rs   r:   Nr2   r3   r4   r5   r6   r   r)   r   ry   r<   r7   r1   r"   r   r,   r,   I   s<    *1$5 *1$ *1 *1X/Y /4 /(r"   r,   c                   L    \ rS rSr\S\SS4S j5       rS\SS4S jrS
S jr	S	r
g)r*      r   r:   Nc                     U R                  SSS9nUR                  S[        SS9  UR                  S[        SS9  UR                  S	[        S
S9  UR                  [        S9  g )NlogszFetch the logs of a Jobr   r   Job IDr>   rT   QThe namespace where the job is running. Defaults to the current user's namespace.rV   rW   r#   )r%   r\   r]   r'   r*   r`   s     r   r)   LogsCommand.register_subcommand   sy    &&v4M&N
sBd 	  	

 	C&q 	  	
 	[1r"   r   c                 j    UR                   U l         UR                  U l        UR                  U l        g r   r   rr   rs   ru   r   s     r   ry   LogsCommand.__init__   s#    ;;(,$(JJ
r"   c                     [        U R                  S9nUR                  U R                  U R                  S9 H  n[        U5        M     g Nr|   r   rr   )r   rs   r   r   rr   r   )ru   r   r   s      r   r<   LogsCommand.run   s:    $**%%%T[[DNN%SC#J Tr"   r   r   r   r1   r"   r   r*   r*      s;    2$5 2$ 2 2/Y /4 /
r"   r*   rowsheadersr:   c           
         [        / U QUP76  Vs/ sH  n[        S U 5       5      PM     nn[        [        R                  " 5       R                  [        U5      S-  5      n[        U5      [        U5      -   U:  a  UR                  [        U5      5      nX5==   S-  ss'   [        U5      [        U5      -   U::  a!  U[        U5      -
  [        U5      -
  X5   -   X5'   [        U5      [        U5      -   U:  a  M  S[        U5      -  R                  " U6 n/ nUR                  UR                  " U6 5        UR                  UR                  " U Vs/ sH  nSU-  PM
     sn6 5        U  Ht  n	[        X5       V
Vs/ sH<  u  p[        [        U
5      5      U:  a  [        U
5      SUS-
   S-   O
[        U
5      PM>     nn
nUR                  UR                  " U6 5        Mv     S	R                  U5      $ s  snf s  snf s  snn
f )
zy
Inspired by:

- stackoverflow.com/a/8356620/593036
- stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
c              3   H   #    U H  n[        [        U5      5      v   M     g 7fr   )lenr]   ).0xs     r   	<genexpr>_tabulate.<locals>.<genexpr>   s     /3ac#a&kk3s    "      z{{:{}}} -N   rY   
)zipmaxrj   get_terminal_sizecolumnsr   sumindexformatrB   r]   r^   )r   r   col
col_widthsterminal_widthcol_to_minimize
row_formatlineswrowr   	col_widthrow_format_argss                r   	_tabulater      s    <?;N;Ng;NO;NC#/3//;NJO--/77W9JKN
g,Z
(>
9$**3z?;#)#w<#j/)^;*83z?*JSQX\*Y\f\w*wJ'	 g,Z
(>
9
 s7|+33Z@JE	LL""G,-	LL""j$AjS1Wj$ABC !$C 4
 4 033q6{Y/FCF?Y]#e+CPQFR 4 	 
 	Z&&89  99U# P %B
s   G3G8;AG=c                   n    \ rS rSr\S\SS4S j5       rS\SS4S jrSS jr	S	\
\\4   S\4S
 jrS rSrg)r+      r   r:   Nc                    U R                  SSS9nUR                  SSSSS9  UR                  S	[        S
S9  UR                  S[        SS9  UR                  SSS/ SS9  UR                  S[        SS9  UR                  [        S9  g )Npsz	List Jobsr   z-az--allrS   z*Show all Jobs (default shows just running)rC   rT   zUThe namespace from where it lists the jobs. Defaults to the current user's namespace.r>   rV   rW   z-fz--filterrB   z>Filter output based on conditions provided (format: key=value))rD   defaultr   z--formatz%Format output using a custom templater#   )r%   r\   r]   r'   r+   r`   s     r   r)   PsCommand.register_subcommand   s    &&t+&>
=	 	  	
 	h 	  	

 	\ 	  	
 	Q 	  	
 	8 	  	

 	Y/r"   r   c                 N   UR                   U l         UR                  U l        UR                  U l        UR                  U l        0 U l        UR
                   HJ  nSU;   a2  UR                  SS5      u  p4X@R                  UR                  5       '   M;  [        SU S35        ML     g )N=r   z)Warning: Ignoring invalid filter format 'z'. Use key=value format.)	allrr   rs   r   filtersfiltersplitlowerr   )ru   r   fkeyvalues        r   ry   PsCommand.__init__   s    (,$(JJ
%)[[') AaxWWS!_
,1SYY[)A!D\]^ r"   c           
      v    [        U R                  S9nUR                  U R                  S9n/ SQn/ nU H  nUR                  (       a  UR                  R
                  OSnU R                  (       d  US;  a  ME  UR                  nUR                  =(       d    SnUR                  =(       d    / n	U	(       a  SR                  U	5      OSn
UR                  =(       d    SnUUUR                  5       U
S.nU R                  U5      (       d  M  UR                  XxXU/5        M     U(       dg  S	nU R                  (       aE  S
SR                  U R                  R!                  5        VVs/ sH  u  pU SU 3PM     snn5       3n[#        SU 35        gU R%                  XC5        gs  snnf ! [&        R(                   a  n[#        SU 35         SnAgSnAf[*        [,        [.        4 a  n[#        SU 35         SnAgSnAf[0         a.  n[#        S[3        U5      R4                   SU 35         SnAgSnAff = f)z
Fetch and display job information for the current user.
Uses Docker-style filtering with -f/--filter flag and key=value pairs.
r|   )rr   )zJOB IDzIMAGE/SPACECOMMANDCREATEDSTATUSUNKNOWN)RUNNINGUPDATINGzN/A )r   r=   statusrX    z matching filters: rN   r   zNo jobs foundNzError fetching jobs data: zError processing jobs data: zUnexpected error - z: )r   rs   	list_jobsrr   r   stager   r   docker_imagerX   r^   
created_atr   _matches_filtersrB   r   itemsr   _print_outputrequestsRequestExceptionKeyError
ValueError	TypeError	Exceptionr?   r2   )ru   r   r   table_headersr   r   r   r   image_or_spacerX   command_strr   job_propertiesfilters_msgkves                    r   r<   PsCommand.run
  s   
A	Adjj)C ==4>>=:D VM D-0ZZ))Y xxF2I$I  "%!1!1!:U +++3:chhw/ !^^4u
 !+$lln*	" ,,^<< V[fUVE J  <<$7		Z^ZfZfZlZlZnBoZnRVRSaS!:ZnBo8p7q"rKk]34 t3 Cp (( 	4.qc233*i0 	60455 	A'Q(8(8'9A3?@@	AsH   E&F+ (F%:F+ F+ %F+ +H8?GH8*G==H8
$H33H8r   c                 j   U R                   R                  5        H  u  p#X!;  a    gSU;   d  SU;   aW  UR                  SS5      R                  SS5      n[        R                  " SU S3X   [        R
                  5      (       d    gMo  UR                  5       X   R                  5       ;  d  M    g   g)	z+Check if job matches all specified filters.F*?z.*rO   ^$T)r   r   replaceresearch
IGNORECASEr   )ru   r   r   patternregex_patterns        r   r   PsCommand._matches_filtersR  s     LL..0LC( g~ 'T : B B3 Lyy1]O1!5~7JBMMZZ  [ (;(A(A(CC 1 r"   c           	         U R                   (       ac  U R                   nU HP  nUn[        / SQ5       H/  u  pgSU S3nX;   d  M  UR                  U[        XF   5      5      nM1     [	        U5        MR     g[	        [        UUS95        g)z,Print output according to the chosen format.)r   r=   rX   createdr   z{{.z}})r   N)r   	enumerater   r]   r   r   )	ru   r   r   templater   lineifieldplaceholders	            r   r   PsCommand._print_outpute  s    ;;{{H )*Y ZHA$)%"5K"*#||KSVE ![ d  #r"   )r   r   r   rr   rs   r   )r2   r3   r4   r5   r6   r   r)   r   ry   r<   r   r]   boolr   r   r7   r1   r"   r   r+   r+      sb     0$5  0$  0  0D_Y _4 _FAPtCH~ $ &r"   r+   c                   L    \ rS rSr\S\SS4S j5       rS\SS4S jrS
S jr	S	r
g)r(   i{  r   r:   Nc                     U R                  SSS9nUR                  S[        SS9  UR                  S[        SS9  UR                  S	S
SS9  UR                  [        S9  g )Ninspectz0Display detailed information on one or more Jobsr   rT   r   r>   rV   rW   job_idsrY   zThe jobs to inspectrZ   r#   )r%   r\   r]   r'   r(   r`   s     r   r)   "InspectCommand.register_subcommand|  sz    &&y7i&j
d 	  	

 	C&q 	  	
 		=RS^4r"   r   c                 j    UR                   U l         UR                  U l        UR                  U l        g r   )rr   rs   r  r   s     r   ry   InspectCommand.__init__  s#    (,$(JJ
"&,,r"   c           
         [        U R                  S9nU R                   Vs/ sH  o!R                  X R                  S9PM     nn[        [        R                  " U Vs/ sH  n[        U5      PM     snS[        S95        g s  snf s  snf )Nr|   r      )indentr   )
r   rs   r  inspect_jobrr   r   jsondumpsr   r]   )ru   r   r   r   r   s        r   r<   InspectCommand.run  sj    $**%W[WcWcdWcVvHWcddjj6#&+6q#NO e6s   !BB)r  rr   rs   r   r   r1   r"   r   r(   r(   {  s<    5$5 5$ 5 5/Y /4 /
Pr"   r(   c                   L    \ rS rSr\S\SS4S j5       rS\SS4S jrS
S jr	S	r
g)r-   i  r   r:   Nc                     U R                  SSS9nUR                  S[        SS9  UR                  S[        SS9  UR                  S	[        S
S9  UR                  [        S9  g )NcancelzCancel a Jobr   r   r   r>   rT   r   rV   rW   r#   )r%   r\   r]   r'   r-   r`   s     r   r)   !CancelCommand.register_subcommand  sx    &&xn&E
sBd 	  	

 	C&q 	  	
 	]3r"   r   c                 j    UR                   U l         UR                  U l        UR                  U l        g r   r   r   s     r   ry   CancelCommand.__init__  s#    ;;$(JJ
r"   c                 r    [        U R                  S9nUR                  U R                  U R                  S9  g r   )r   rs   
cancel_jobr   rr   )ru   r   s     r   r<   CancelCommand.run  s(    $**%dkkT^^Dr"   r   r   r   r1   r"   r   r-   r-     s<    4$5 4$ 4 4/Y /4 /
Er"   r-   c                   D    \ rS rSrSr\S 5       rS\SS4S jrS
S jr	S	r
g)r.   i  z.Run UV scripts on Hugging Face infrastructure.c                     U R                  SSS9nUR                  SSSS9nUR                  SS	S9nUR                  S
SS9  UR                  SSS/ S9  UR                  S[        SS9  UR                  SSS9  UR                  S[        SSR	                  [
        5       S3S9  UR                  SSSSS9  UR                  SSSS S9  UR                  S![        S"S9  UR                  S#[        S$S9  UR                  S%[        S&S9  UR                  S'S(S)S*S9  UR                  S+[        S,S9  UR                  S-[        S.S9  UR                  S/SS0S1S29  UR                  S3S4[        S5S9  UR                  [        S69  g7)8zRegister UV run subcommand.uvzERun UV scripts (Python with inline dependencies) on HF infrastructurer   
uv_commandzUV commandsT)destr   requiredr<   z8Run a UV script (local file or URL) on HF infrastructurescriptz$UV script to run (local file or URL)script_argsrY   zArguments for the script)r[   r   r   z--imagez.Use a custom Docker image with `uv` installed.r>   z--repozCRepository name for the script (creates ephemeral if not specified)rL   rM   rN   rO   r@   rA   rB   zEnvironment variablesrC   rE   rF   rG   rH   rI   rJ   rK   rP   z Max duration (e.g., 30s, 5m, 1h)rQ   rR   rS   zRun in backgroundrT   rU   rV   zHF tokenz--withz%Run with the given packages installedwith_)rD   r   r  z-pz--pythonz5The Python interpreter to use for the run environmentr#   N)r%   r&   r\   r]   r^   r_   r'   r.   )r   	uv_parser
subparsersra   s       r   r)   UvCommand.register_subcommand  s    %%X & 
	
 --<m^b-c
  **K + 

 	/UVUA[egh	:jkV 	  	
 	ghlhqhq  sD  iE  hF  FG  H 	  	

 	ghE\]K 	  	
 	3=ghB 	  	

 	#<^_jL_`i 	  	

 		*E@gnuv*3-d 	  	
 	Y/r"   r   r:   Nc                 h   UR                   U l         UR                  U l        UR                  U l        UR                  U l        UR
                  U l        0 U l        UR                  (       a`  U R                  R                  [        [        UR                  5      R                  5       [        R                  R                  5       S95        UR                  =(       d    /  HB  nU R                  R                  [        U[        R                  R                  5       S95        MD     0 U l        [!        5       nUR"                  (       aD  U R                  R                  [        [        UR"                  5      R                  5       US95        UR                  =(       d    /  H%  nU R                  R                  [        XCS95        M'     UR$                  U l        UR&                  U l        UR(                  U l        UR*                  U l        UR,                  U l        UR.                  U l        g)z-Initialize the command with parsed arguments.rd   N)r   r!  r"  dependenciespythonr=   rf   rg   rh   r   r   ri   rj   re   rk   rl   rm   rn   ro   rp   rq   rr   rs   repo_report   s        r   ry   UvCommand.__init__  sp   kk++ JJkkZZ
-/==HHOOKT]](;(E(E(GQSQ[Q[Q`Q`QbcdRIHHOOK	2::??;LMN (1302LLD1B1B,C,M,M,OYi jkll(b(FLLF MN )/3{{&*ll KK(,$(JJ
YY
r"   c                 Z   [         R                  " [         R                  5        [        U R                  S9nUR                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                   S9n[#        SUR$                   35        [#        SUR&                   35        U R(                  (       a  gUR+                  UR$                  S9 H  n[#        U5        M     g)zExecute UV command.r|   )r   r!  r'  r(  r=   rf   rl   ro   rp   rr   r*  r}   r~   Nr   )r   set_verbosityINFOr   rs   
run_uv_jobr   r!  r'  r(  r=   rf   rl   ro   rp   rr   r*  r   r   r   rq   r   r   s       r   r<   UvCommand.run  s    gll+$**%nn;;((**;;**LL;;LLnn**  
 	%cffX./	#''#$;; %%SVV%4C#J 5r"   )r*  r'  rq   rf   ro   r=   rr   r(  r   r!  rl   rp   rs   r   )r2   r3   r4   r5   __doc__r6   r)   r   ry   r<   r7   r1   r"   r   r.   r.     s0    870 70rY 4 2r"   r.   c                  d    [         R                  R                  5       n [        5       =nb  XS'   U $ )NHF_TOKEN)rj   re   rk   r   )rw   rs   s     r   rm   rm   "  s.    zz()',$r"   )+r1  r  rj   r   argparser   r   dataclassesr   pathlibr   typingr   r   r	   r
   r   huggingface_hubr   r   r   huggingface_hub.utilsr   huggingface_hub.utils._dotenvr   r   r   
get_loggerr2   loggerr   r_   r   r,   r*   r]   intr   r+   r(   r-   r.   rm   )items   0r   <module>r?     s  &  	 	 1   . .  ; ; ) 5 ' 
		H	%,9WMDZZ;=VZTZZMW 7, 7$V* Vr+ 4DeCHo./ $s)  6a) aHP. P4E- E2q) qhtCH~ ] Xs   %D;D