
    ʩh                        d Z ddl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mZmZ ddlZddlmZmZmZ ddlmZ dd	lmZ d
dlmZ  ej6                  e      ZeD  cg c]  } | j<                  dk7  s| j<                    c} Z G d de      Z  G d de      Z! G d de      Z"deeee#e$f         dee#   de#fdZ% G d de      Z& G d de      Z' G d de      Z( G d de      Z)dee#e#f   fdZ* G d  d!e      Z+ G d" d#e      Z, G d$ d%e      Z- G d& d'e      Z. G d( d)e      Z/ G d* d+e      Z0 G d, d-e      Z1 G d. d/e      Z2yc c} w )0a  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                   "    e Zd Zedefd       Zy)JobsCommandsparserc                    | j                  dd      j                  d      }j                  fd       t        j	                  |       t
        j	                  |       t        j	                  |       t        j	                  |       t        j	                  |       t        j	                  |       t        j	                  |       y )NjobszRun and manage Jobs on the Hub.helpz$huggingface.co jobs related commandsc                 $    j                         S N
print_help)argsjobs_parsers    V/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/huggingface_hub/cli/jobs.py<lambda>z2JobsCommands.register_subcommand.<locals>.<lambda>>   s    ;3I3I3K     func)
add_parseradd_subparsersset_defaultsInspectCommandregister_subcommandLogsCommand	PsCommand
RunCommandCancelCommand	UvCommandScheduledJobsCommands)r   jobs_subparsersr   s     @r   r(   z JobsCommands.register_subcommand8   s    ''5V'W%44:`4a 	  &K L 	**?;''8%%o6&&7))/:%%o611/Br!   N__name__
__module____qualname__staticmethodr   r(    r!   r   r   r   7   s    C$5 C Cr!   r   c                   >    e Zd Zededdfd       ZdeddfdZddZy)	r+   r   returnNc                 z   | j                  dd      }|j                  dt        d       |j                  ddd	d
       |j                  ddd	d       |j                  dt        d       |j                  dt        d       |j                  dt        ddj                  t               d       |j                  dt        d       |j                  dddd       |j                  dt        d       |j                  dt        d        |j                  d!d"d#$       |j                  t        %       y )&Nrunz	Run a Jobr   imageThe Docker image to use.typer   -e--envappend/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: , .	--timeoutVMax 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...The command to run.nargsr   r"   )r$   add_argumentstrjoinSUGGESTED_FLAVORSr&   r+   r   
run_parsers     r   r(   zRunCommand.register_subcommandK   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                    |j                   | _         |j                  | _        i | _        |j                  rc| j                  j	                  t        t        |j                        j                         t        j                  j                                      |j                  xs g D ]D  }| j                  j	                  t        |t        j                  j                                      F i | _        t               }|j                  rG| j                  j	                  t        t        |j                        j                         |             |j                  xs g D ](  }| j                  j	                  t        ||             * |j                  | _        |j                  | _        |j                   | _        |j"                  | _        |j$                  | _        y Nenviron)r:   rX   envenv_fileupdater   r   	read_textosrf   copysecrets_get_extended_environsecrets_fileflavortimeoutdetach	namespacetokenselfr   	env_valueextended_environsecrets        r   __init__zRunCommand.__init__x   sL   **
"&,,-/==HHOOKT]](;(E(E(GQSQ[Q[Q`Q`QbcdR 	OIHHOOK	2::??;LMN	O1302LLD1B1B,C,M,M,OYi jkll(b 	OFLLF<L MN	O/3{{&*ll KK(,$(JJ
r!   c           	         t        | j                        }|j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                        }t        d|j                          t        d|j                          | j                  ry |j                  |j                        D ]  }t        |        y )Nrt   )r:   rX   rg   rm   rp   rq   rs   Job started with ID: 	View at: job_id)r   rt   run_jobr:   rX   rg   rm   rp   rq   rs   printidurlrr   fetch_job_logsrv   apijoblogs       r   r9   zRunCommand.run   s    $**%kk**LLLL;;LLnn  
 	%cffX./	#''#$;; %%SVV%4 	C#J	r!   r7   N	r1   r2   r3   r4   r   r(   r   rz   r9   r5   r!   r   r+   r+   J   s<    *1$5 *1$ *1 *1X/Y /4 /(r!   r+   c                   >    e Zd Zededdfd       ZdeddfdZddZy)	r)   r   r7   Nc                     | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	t        d
       |j                  t               y )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)   ra   s     r   r(   zLogsCommand.register_subcommand   sy    &&v4M&N
sBd 	  	

 	C&q 	  	
 	[1r!   r   c                 j    |j                   | _         |j                  | _        |j                  | _        y r   r   rs   rt   rv   r   s     r   rz   zLogsCommand.__init__   s#    ;;(,$(JJ
r!   c                     t        | j                        }|j                  | j                  | j                        D ]  }t        |        y Nr|   r   rs   )r   rt   r   r   rs   r   )rv   r   r   s      r   r9   zLogsCommand.run   s>    $**%%%T[[DNN%S 	C#J	r!   r   r   r5   r!   r   r)   r)      s;    2$5 2$ 2 2/Y /4 /
r!   r)   rowsheadersr7   c           
         t        g | | D cg c]  }t        d |D               }}t        t        j                         j                  t        |      dz        }t        |      t        |      z   |kD  r|j                  t        |            }||xx   dz  cc<   t        |      t        |      z   |k  r#|t        |      z
  t        |      z
  ||   z   ||<   t        |      t        |      z   |kD  r dt        |      z  j                  | }g }|j                   |j                  |        |j                   |j                  |D cg c]  }d|z  	 c}        | D ]r  }	t        |	|      D 
cg c];  \  }
}t        t        |
            |kD  rt        |
      d|dz
   dz   n
t        |
      = }}
}|j                   |j                  |        t d	j                  |      S c c}w c c}w c c}}
w )
z
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c              3   D   K   | ]  }t        t        |              y wr   )lenr^   ).0xs     r   	<genexpr>z_tabulate.<locals>.<genexpr>   s     /ac#a&k/s          z{{:{}}} -N   rY   
)zipmaxrk   get_terminal_sizecolumnsr   sumindexformatr@   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OC#/3//OJO--/77W9JKN
g,Z
(>
9$**3z?;?#)#w<#j/)^;*83z?*JSQX\*Y\fgv\w*wJ'	 g,Z
(>
9
 4*s7|+33Z@JE	LL"""G,-	LL"""j$AS1W$ABC : !$C 4
9 033q6{Y/FCF?Y]#e+CPQFR
 
 	&Z&&89: 99U# P %B
s   G*G/6A G4c                   ^    e Zd Zededdfd       ZdeddfdZddZde	e
e
f   defd	Zd
 Zy)r*   r   r7   Nc                 <   | j                  dd      }|j                  dddd       |j                  d	t        d
       |j                  dt        d       |j                  dddg d       |j                  dt        d       |j                  t               y )Npsz	List Jobsr   -a--allrS   z*Show all Jobs (default shows just running)rB   rT   UThe namespace from where it lists the jobs. Defaults to the current user's namespace.r<   rV   rW   -f--filterr@   >Filter output based on conditions provided (format: key=value)rC   defaultr   --format%Format output using a custom templater"   )r$   r]   r^   r&   r*   ra   s     r   r(   zPsCommand.register_subcommand   s    &&t+&>
=	 	  	
 	h 	  	

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

 	Y/r!   r   c                 H   |j                   | _         |j                  | _        |j                  | _        |j                  | _        i | _        |j
                  D ]H  }d|v r3|j                  dd      \  }}|| j                  |j                         <   :t        d| d       J y N=r   z)Warning: Ignoring invalid filter format 'z'. Use key=value format.	allrs   rt   r   filtersfiltersplitlowerr   rv   r   fkeyvalues        r   rz   zPsCommand.__init__       (,$(JJ
%)[[')  	_AaxWWS!_
U,1SYY[)A!D\]^	_r!   c           
      L   	 t        | j                        }|j                  | j                        }g d}g }|D ]  }|j                  r|j                  j
                  nd}| j                  s|dvr8|j                  }|j                  xs d}|j                  xs g }	|	rdj                  |	      nd}
|j                  r|j                  j                  d      nd}|||j                         |
d	}| j                  |      s|j                  |||
||g        |sad
}| j                   rDddj                  | j                   j#                         D cg c]  \  }}| d|  c}}       }t%        d|        y| j'                  ||       yc c}}w # t(        j*                  $ r}t%        d|        Y d}~yd}~wt,        t.        t0        f$ r}t%        d|        Y d}~yd}~wt2        $ r.}t%        dt5        |      j6                   d|        Y d}~yd}~ww xY w)z
        Fetch and display job information for the current user.
        Uses Docker-style filtering with -f/--filter flag and key=value pairs.
        r|   rs   )zJOB IDIMAGE/SPACECOMMANDCREATEDSTATUSUNKNOWN)RUNNINGUPDATINGN/A %Y-%m-%d %H:%M:%S)r   r:   statusrX     matching filters: rM   r   zNo jobs foundNzError fetching jobs data: zError processing jobs data: Unexpected error - : )r   rt   	list_jobsrs   r   stager   r   docker_imagerX   r_   
created_atstrftimer   _matches_filtersr@   r   itemsr   _print_outputrequestsRequestExceptionKeyError
ValueError	TypeError	Exceptionr=   r1   )rv   r   r   table_headersr   r   r   r   image_or_spacerX   command_strr   job_propertiesfilters_msgkves                    r   r9   zPsCommand.run  s   
A	Adjj)C ==4>>=:D VM D "W-0ZZ))Y xxF2I$I  "%!1!1!:U +++3:chhw/ NQ^^S^^445HIaf
 !+$lln*	" ,,^< V^[*fUVE"WJ  <<$7		Z^ZfZfZlZlZnBoRVRSUVaS!:Bo8p7q"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 H#,F??H#G))H#5$HH#r   c                 P   | j                   j                         D ]  \  }}||vr yd|v sd|v rQ|j                  dd      j                  dd      }t        j                  d| d||   t        j
                        rc y|j                         ||   j                         vs y y)	z+Check if job matches all specified filters.F*?.*rN   ^$Tr   r   replaceresearch
IGNORECASEr   rv   r   r   patternregex_patterns        r   r   zPsCommand._matches_filtersS       LL..0 	LC.( g~ 'T : B B3 Lyy1]O1!5~c7JBMMZ s(;(A(A(CC	 r!   c           	         | j                   r_| j                   }|D ]M  }|}t        g d      D ].  \  }}d| d}||v s|j                  |t        ||               }0 t	        |       O yt	        t        ||             y),Print output according to the chosen format.)r   r:   rX   createdr   {{.}}r   Nr   	enumerater   r^   r   r   	rv   r   r   templater   lineifieldplaceholders	            r   r   zPsCommand._print_outputf  s    ;;{{H  )*Y Z FHAu$)%"5K"d*#||KSVEF d #r!   r   r1   r2   r3   r4   r   r(   r   rz   r9   r   r^   boolr   r   r5   r!   r   r*   r*      sb     0$5  0$  0  0D_Y _4 _FAPtCH~ $ &r!   r*   c                   >    e Zd Zededdfd       ZdeddfdZddZy)	r'   r   r7   Nc                     | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	d
d       |j                  t               y )Ninspectz0Display detailed information on one or more Jobsr   rT   r   r<   rV   rW   job_idsrY   zThe jobs to inspectr[   r"   )r$   r]   r^   r&   r'   ra   s     r   r(   z"InspectCommand.register_subcommand}  sz    &&y7i&j
d 	  	

 	C&q 	  	
 		=RS^4r!   r   c                 j    |j                   | _         |j                  | _        |j                  | _        y r   )rs   rt   r  r   s     r   rz   zInspectCommand.__init__  s#    (,$(JJ
"&,,r!   c           
      $   t        | j                        }| j                  D cg c]  }|j                  || j                        ! }}t        t        j                  |D cg c]  }t        |       c}dt                     y c c}w c c}w )Nr|   r      indentr   )
r   rt   r  inspect_jobrs   r   jsondumpsr   r^   )rv   r   r   r   r   s        r   r9   zInspectCommand.run  sg    $**%W[WcWcdVvHdddjj6#&+6q#NO e6   $B#Br   r   r5   r!   r   r'   r'   |  s<    5$5 5$ 5 5/Y /4 /
Pr!   r'   c                   >    e Zd Zededdfd       ZdeddfdZddZy)	r,   r   r7   Nc                     | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	t        d
       |j                  t               y )NcancelzCancel a Jobr   r   r   r<   rT   r   rV   rW   r"   )r$   r]   r^   r&   r,   ra   s     r   r(   z!CancelCommand.register_subcommand  sx    &&xn&E
sBd 	  	

 	C&q 	  	
 	]3r!   r   c                 j    |j                   | _         |j                  | _        |j                  | _        y r   r   r   s     r   rz   zCancelCommand.__init__  s#    ;;$(JJ
r!   c                 ~    t        | j                        }|j                  | j                  | j                         y r   )r   rt   
cancel_jobr   rs   rv   r   s     r   r9   zCancelCommand.run  s(    $**%dkkT^^Dr!   r   r   r5   r!   r   r,   r,     s<    4$5 4$ 4 4/Y /4 /
Er!   r,   c                   8    e Zd ZdZed        ZdeddfdZddZy)	r-   z.Run UV scripts on Hugging Face infrastructure.c                 r   | j                  dd      }|j                  ddd      }|j                  dd	      }|j                  d
d       |j                  dddg        |j                  dt        d       |j                  dd       |j                  dt        ddj	                  t
               d       |j                  dddd       |j                  dddd        |j                  d!t        d"       |j                  d#t        d$       |j                  d%t        d&       |j                  d'd(d)d*       |j                  d+t        d,       |j                  d-t        d.       |j                  d/dd0d12       |j                  d3d4t        d5       |j                  t        6       y7)8Register UV run subcommand.uvzERun UV scripts (Python with inline dependencies) on HF infrastructurer   
uv_commandUV commandsTdestr   requiredr9   8Run a UV script (local file or URL) on HF infrastructurescript$UV script to run (local file or URL)script_argsrY   Arguments for the scriptr\   r   r   --image.Use a custom Docker image with `uv` installed.r<   --repoCRepository name for the script (creates ephemeral if not specified)rK   rL   rM   rN   r>   r?   r@   Environment variablesrB   rD   rE   rF   rG   rH   rI   rJ   rO    Max duration (e.g., 30s, 5m, 1h)rQ   rR   rS   Run in backgroundrT   rU   rV   HF token--with%Run with the given packages installedwith_rC   r   r2  -p--python5The Python interpreter to use for the run environmentr"   N)r$   r%   r]   r^   r_   r`   r&   r-   r   	uv_parser
subparsersrb   s       r   r(   z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   r7   Nc                 R   |j                   | _         |j                  | _        |j                  | _        |j                  | _        |j
                  | _        i | _        |j                  rc| j                  j                  t        t        |j                        j                         t        j                  j                                      |j                  xs g D ]D  }| j                  j                  t        |t        j                  j                                      F i | _        t!               }|j"                  rG| j                  j                  t        t        |j"                        j                         |             |j                  xs g D ](  }| j                  j                  t        ||             * |j$                  | _        |j&                  | _        |j(                  | _        |j*                  | _        |j,                  | _        |j.                  | _        yz-Initialize the command with parsed arguments.re   N)r5  r7  rD  dependenciespythonr:   rg   rh   ri   r   r   rj   rk   rf   rl   rm   rn   ro   rp   rq   rr   rs   rt   repo_reporu   s        r   rz   zUvCommand.__init__  s|   kk++ JJkkZZ
-/==HHOOKT]](;(E(E(GQSQ[Q[Q`Q`QbcdR 	OIHHOOK	2::??;LMN	O1302LLD1B1B,C,M,M,OYi jkll(b 	OFLLF<L MN	O/3{{&*ll KK(,$(JJ
YY
r!   c                 \   t        j                  t         j                         t        | j                        }|j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                         }t#        d|j$                          t#        d|j&                          | j(                  ry|j+                  |j$                        D ]  }t#        |        y)zExecute UV command.r|   )r5  r7  rN  rO  r:   rg   rm   rp   rq   rs   rQ  r}   r~   Nr   )r   set_verbosityINFOr   rt   
run_uv_jobr5  r7  rN  rO  r:   rg   rm   rp   rq   rs   rQ  r   r   r   rr   r   r   s       r   r9   zUvCommand.run  s    gll+$**%nn;;((**;;**LL;;LLnn**  
 	%cffX./	#''#$;; %%SVV%4 	C#J	r!   r   	r1   r2   r3   __doc__r4   r(   r   rz   r9   r5   r!   r   r-   r-     s0    870 70rY 4 2r!   r-   c                  d    t         j                  j                         } t               x}|| d<   | S )NHF_TOKEN)rk   rf   rl   r   )rx   rt   s     r   rn   rn   #  s1    zz()',$r!   c                   "    e Zd Zedefd       Zy)r.   r   c                    | j                  dd      }|j                  d      |j                  fd       t        j	                         t
        j	                         t        j	                         t        j	                         t        j	                         t        j	                         t        j	                         y )N	scheduledz,Create and manage scheduled Jobs on the Hub.r   z.huggingface.co scheduled jobs related commandsc                 $    j                         S r   r   )r   scheduled_jobs_subparserss    r   r    z;ScheduledJobsCommands.register_subcommand.<locals>.<lambda>3  s    =V=a=a=c r!   r"   )r$   r%   r&   ScheduledRunCommandr(   ScheduledPsCommandScheduledInspectCommandScheduledDeleteCommandScheduledSuspendCommandScheduledResumeCommandScheduledUvCommand)r   scheduled_jobs_parserr^  s     @r   r(   z)ScheduledJobsCommands.register_subcommand+  s     & 1 1+Dr 1 s$9$H$HA %I %
!
 	**0c*d 	//0IJ../HI334MN223LM334MN223LM../HIr!   Nr0   r5   r!   r   r.   r.   *  s    J$5 J Jr!   r.   c                   >    e Zd Zededdfd       ZdeddfdZddZy)	r_  r   r7   Nc                    | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	d
dd        |j                  dd
dd        |j                  dddd       |j                  dddd       |j                  dt        d       |j                  dt        d       |j                  dt        ddj                  t               d       |j                  dt        d        |j                  d!t        d"       |j                  d#t        d$       |j                  d%d&d'(       |j                  t        )       y )*Nr9   zSchedule a Jobr   scheduleWOne of annually, yearly, monthly, weekly, daily, hourly, or a CRON schedule expression.r<   r:   r;   	--suspendrS   !Suspend (pause) the scheduled JobrC   r   r   --concurrency8Allow multiple instances of this Job to run concurrentlyr>   r?   r@   rA   rB   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rT   z`The namespace where the scheduled Job will be created. Defaults to the current user's namespace.rV   rW   rX   rY   rZ   r[   r"   )r$   r]   r^   r_   r`   r&   r_  ra   s     r   r(   z'ScheduledRunCommand.register_subcommand@  s   &&u3C&D
j 	  	

 	c8RS4	 	  	
 	K	 	  	
 	ghEvwK 	  	
 	3=gh 0sArsghlhqhq  sD  iE  hF  FG  H 	  	

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

 	s 	  	

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

 		=RS%89r!   r   c                    |j                   | _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        i | _        |j                  rc| j
                  j                  t        t        |j                        j                         t        j                  j                                      |j
                  xs g D ]D  }| j
                  j                  t        |t        j                  j                                      F i | _        t               }|j                   rG| j                  j                  t        t        |j                         j                         |             |j                  xs g D ](  }| j                  j                  t        ||             * |j"                  | _        |j$                  | _        |j&                  | _        |j(                  | _        y rd   )ri  r:   rX   suspendconcurrencyrg   rh   ri   r   r   rj   rk   rf   rl   rm   rn   ro   rp   rq   rs   rt   ru   s        r   rz   zScheduledRunCommand.__init__x  se   !]]**
"&,,'+||+/+;+;-/==HHOOKT]](;(E(E(GQSQ[Q[Q`Q`QbcdR 	OIHHOOK	2::??;LMN	O1302LLD1B1B,C,M,M,OYi jkll(b 	OFLLF<L MN	O/3{{&*ll(,$(JJ
r!   c                 ^   t        | j                        }|j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  
      }t        d|j                          y )Nr|   )
r:   rX   ri  rq  rr  rg   rm   rp   rq   rs   Scheduled Job created with ID: )r   rt   create_scheduled_jobr:   rX   ri  rq  rr  rg   rm   rp   rq   rs   r   r   )rv   r   scheduled_jobs      r   r9   zScheduledRunCommand.run  s    $**%00**LL]]LL((LL;;LLnn 1 
 	/0@0@/ABCr!   r   r   r5   r!   r   r_  r_  ?  s=    5:$5 5:$ 5: 5:n/Y /4 /,Dr!   r_  c                   ^    e Zd Zededdfd       ZdeddfdZddZde	e
e
f   defd	Zd
 Zy)r`  r   r7   Nc                 <   | j                  dd      }|j                  dddd       |j                  d	t        d
       |j                  dt        d       |j                  dddg d       |j                  dt        d       |j                  t               y )Nr   zList scheduled Jobsr   r   r   rS   z1Show all scheduled Jobs (default hides suspended)rB   rT   r   r<   rV   rW   r   r   r@   r   r   r   r   r"   )r$   r]   r^   r&   r`  ra   s     r   r(   z&ScheduledPsCommand.register_subcommand  s    &&t2G&H
D	 	  	
 	h 	  	

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

 	%78r!   r   c                 H   |j                   | _         |j                  | _        |j                  | _        |j                  | _        i | _        |j
                  D ]H  }d|v r3|j                  dd      \  }}|| j                  |j                         <   :t        d| d       J y r   r   r   s        r   rz   zScheduledPsCommand.__init__  r   r!   c           
         	 t        | j                        }|j                  | j                        }g d}g }|D ]>  }|j                  }| j
                  s|r|j                  }|j                  }|j                  j                  xs d}	|j                  j                  xs g }
|
rdj                  |
      nd}|j                  j                  r/|j                  j                  j                  j                  d      nd}|j                  j                   r%|j                  j                   j                  d      nd}||	t#        |      |d}| j%                  |      s'|j'                  |||	||||g       A |sad}| j(                  rDd	d
j                  | j(                  j+                         D cg c]  \  }}| d|  c}}       }t-        d|        y| j/                  ||       yc c}}w # t0        j2                  $ r}t-        d|        Y d}~yd}~wt4        t6        t8        f$ r}t-        d|        Y d}~yd}~wt:        $ r.}t-        dt=        |      j>                   d|        Y d}~yd}~ww xY w)z
        Fetch and display scheduked job information for the current user.
        Uses Docker-style filtering with -f/--filter flag and key=value pairs.
        r|   r   )IDSCHEDULEr   r   zLAST RUNzNEXT RUNSUSPENDr   r   r   )r   r:   rq  rX   r   r   rM   r   zNo scheduled jobs foundNz$Error fetching scheduled jobs data: z&Error processing scheduled jobs data: r   r   ) r   rt   list_scheduled_jobsrs   rq  r   r   ri  job_specr   rX   r_   r   last_jobatr   next_job_run_atr^   r   r@   r   r   r   r   r   r   r   r   r   r   r=   r1   )rv   r   scheduled_jobsr   r   rv  rq  scheduled_job_idri  r   rX   r   last_job_atr  r   r   r   r   r   s                      r   r9   zScheduledPsCommand.run  s   
_	Adjj)C !44t~~4NNM D!/ 8'// xxG $1#3#3  )11 "/!7!7!D!D!M (0088>B3:chhw/
 %++44 "((1144==>QR  %++;; "((88AABUV   ++"7|*	" ,,^< ( &##'
]8v  <<$7		Z^ZfZfZlZlZnBoRVRSUVaS!:Bo8p7q"rK/}=> t]3 Cp (( 	>8<==*i0 	@:1#>?? 	A'Q(8(8'9A3?@@	AsH   F5G: 7G4G: !G: 4G: :JH  J7I

J$I??Jr   c                 P   | j                   j                         D ]  \  }}||vr yd|v sd|v rQ|j                  dd      j                  dd      }t        j                  d| d||   t        j
                        rc y|j                         ||   j                         vs y y)	z5Check if scheduled job matches all specified filters.Fr   r   r   rN   r   r   Tr   r  s        r   r   z#ScheduledPsCommand._matches_filters9  r  r!   c           	         | j                   r_| j                   }|D ]M  }|}t        g d      D ].  \  }}d| d}||v s|j                  |t        ||               }0 t	        |       O yt	        t        ||             y)r  )r   ri  r:   rX   r  r  rq  r
  r  r  Nr  r  s	            r   r   z ScheduledPsCommand._print_outputL  s    ;;{{H  )g! FHAu %*%"5K"d*#||KSVEF d #r!   r   r  r5   r!   r   r`  r`    sb     9$5  9$  9  9D_Y _4 _dALtCH~ $ &r!   r`  c                   >    e Zd Zededdfd       ZdeddfdZddZy)	ra  r   r7   Nc                     | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	d
d       |j                  t               y )Nr  z:Display detailed information on one or more scheduled Jobsr   rT   SThe namespace where the scheduled job is. Defaults to the current user's namespace.r<   rV   rW   scheduled_job_idsrY   zThe scheduled jobs to inspectr[   r"   )r$   r]   r^   r&   ra  ra   s     r   r(   z+ScheduledInspectCommand.register_subcommande  s|    &&y7s&t
f 	  	

 	C&q 	  	
 	 35Gfg%<=r!   r   c                 j    |j                   | _         |j                  | _        |j                  | _        y r   )rs   rt   r  r   s     r   rz   z ScheduledInspectCommand.__init__s  s&    (,$(JJ
,0,B,Br!   c           
      $   t        | j                        }| j                  D cg c]  }|j                  || j                        ! }}t        t        j                  |D cg c]  }t        |       c}dt                     y c c}w c c}w )Nr|   r  rs   r  r  )
r   rt   r  inspect_scheduled_jobrs   r   r!  r"  r   r^   )rv   r   r  r  rv  s        r   r9   zScheduledInspectCommand.runx  s    $**% %)$:$:
  %%7GSWSaSa%b
 
 	djj^TM&/T]^hklm	
 Ur#  r   r   r5   r!   r   ra  ra  d  s?    >$5 >$ > >CY C4 C
nr!   ra  c                   >    e Zd Zededdfd       ZdeddfdZddZy)	rb  r   r7   Nc                     | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	t        d
       |j                  t               y )NdeletezDelete a scheduled Jobr   r  Scheduled Job IDr<   rT   r  rV   rW   r"   )r$   r]   r^   r&   rb  ra   s     r   r(   z*ScheduledDeleteCommand.register_subcommand  s|    &&x6N&O
 2CUVf 	  	

 	C&q 	  	
 	%;<r!   r   c                 j    |j                   | _         |j                  | _        |j                  | _        y r   r  rs   rt   r   s     r   rz   zScheduledDeleteCommand.__init__  &    %)%:%:$(JJ
r!   c                 ~    t        | j                        }|j                  | j                  | j                         y Nr|   r  )r   rt   delete_scheduled_jobr  rs   r*  s     r   r9   zScheduledDeleteCommand.run  0    $**%  $2G2GSWSaSa br!   r   r   r5   r!   r   rb  rb    <    =$5 =$ = =/Y /4 /
cr!   rb  c                   >    e Zd Zededdfd       ZdeddfdZddZy)	rc  r   r7   Nc                     | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	t        d
       |j                  t               y )Nrq  zSuspend (pause) a scheduled Jobr   r  r  r<   rT   r  rV   rW   r"   )r$   r]   r^   r&   rc  ra   s     r   r(   z+ScheduledSuspendCommand.register_subcommand  s|    &&y7X&Y
 2CUVf 	  	

 	C&q 	  	
 	%<=r!   r   c                 j    |j                   | _         |j                  | _        |j                  | _        y r   r  r   s     r   rz   z ScheduledSuspendCommand.__init__  r  r!   c                 ~    t        | j                        }|j                  | j                  | j                         y r  )r   rt   suspend_scheduled_jobr  rs   r*  s     r   r9   zScheduledSuspendCommand.run  s0    $**%!!43H3HTXTbTb!cr!   r   r   r5   r!   r   rc  rc    s<    >$5 >$ > >/Y /4 /
dr!   rc  c                   >    e Zd Zededdfd       ZdeddfdZddZy)	rd  r   r7   Nc                     | j                  dd      }|j                  dt        d       |j                  dt        d       |j                  d	t        d
       |j                  t               y )Nresumez Resume (unpause) a scheduled Jobr   r  r  r<   rT   r  rV   rW   r"   )r$   r]   r^   r&   rd  ra   s     r   r(   z*ScheduledResumeCommand.register_subcommand  s|    &&x6X&Y
 2CUVf 	  	

 	C&q 	  	
 	%;<r!   r   c                 j    |j                   | _         |j                  | _        |j                  | _        y r   r  r   s     r   rz   zScheduledResumeCommand.__init__  r  r!   c                 ~    t        | j                        }|j                  | j                  | j                         y r  )r   rt   resume_scheduled_jobr  rs   r*  s     r   r9   zScheduledResumeCommand.run  r  r!   r   r   r5   r!   r   rd  rd    r  r!   rd  c                   8    e Zd ZdZed        ZdeddfdZddZy)	re  z3Schedule UV scripts on Hugging Face infrastructure.c                    | j                  dd      }|j                  ddd      }|j                  dd	      }|j                  d
t        d       |j                  dd       |j                  dddg        |j                  dddd       |j                  dddd       |j                  dt        d       |j                  dd       |j                  dt        dd j	                  t
               d!       |j                  d"d#d$d%&       |j                  d'd(d$d)&       |j                  d*t        d+       |j                  d,t        d-       |j                  d.t        d/       |j                  d0d1dd2&       |j                  d3t        d4       |j                  d5t        d6       |j                  d7d$d8d9:       |j                  d;d<t        d=       |j                  t        >       y)?r-  r.  zJSchedule UV scripts (Python with inline dependencies) on HF infrastructurer   r/  r0  Tr1  r9   r4  ri  rj  r<   r5  r6  r7  rY   r8  r9  rk  rS   rl  Nrm  rn  ro  r:  r;  r<  r=  rK   rL   rM   rN   r>   r?   r@   r>  rB   rD   rE   rF   rG   rH   rI   rJ   rO   r?  rQ   rR   r@  rT   rU   rV   rA  rB  rC  rD  rE  rF  rG  rH  r"   )r$   r%   r]   r^   r_   r`   r&   re  rI  s       r   r(   z&ScheduledUvCommand.register_subcommand  sz    %%] & 
	
 --<m^b-c
  **K + 

 	j 	  	

 	/UVUA[egh4	 	  	
 	K	 	  	
 		: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 	  	
 	%78r!   r   r7   Nc                    |j                   | _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        i | _	        |j                  rc| j                  j                  t        t        |j                        j                         t        j                   j#                                      |j                  xs g D ]D  }| j                  j                  t        |t        j                   j#                                      F i | _        t'               }|j(                  rG| j$                  j                  t        t        |j(                        j                         |             |j$                  xs g D ](  }| j$                  j                  t        ||             * |j*                  | _        |j,                  | _        |j.                  | _        |j0                  | _        |j2                  | _        |j4                  | _        yrM  )ri  r5  r7  rq  rr  rD  rN  rO  r:   rg   rh   ri   r   r   rj   rk   rf   rl   rm   rn   ro   rp   rq   rr   rs   rt   rP  rQ  ru   s        r   rz   zScheduledUvCommand.__init__  s   !]]kk++'+||+/+;+; JJkkZZ
-/==HHOOKT]](;(E(E(GQSQ[Q[Q`Q`QbcdR 	OIHHOOK	2::??;LMN	O1302LLD1B1B,C,M,M,OYi jkll(b 	OFLLF<L MN	O/3{{&*ll KK(,$(JJ
YY
r!   c                    t        j                  t         j                         t        | j                        }|j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   | j"                  | j$                  | j&                        }t)        d|j*                          y)zSchedule UV command.r|   )r5  r7  ri  rq  rr  rN  rO  r:   rg   rm   rp   rq   rs   rQ  rt  N)r   rS  rT  r   rt   create_scheduled_uv_jobr5  r7  ri  rq  rr  rN  rO  r:   rg   rm   rp   rq   rs   rQ  r   r   )rv   r   r   s      r   r9   zScheduledUvCommand.run6  s    gll+$**%));;((]]LL((**;;**LL;;LLnn** * 
$ 	/x89r!   r   rV  r5   r!   r   re  re    s2    =H9 H9TY 4 8:r!   re  )3rW  r!  rk   r   argparser   r   dataclassesr   pathlibr   typingr   r   r	   r
   r   huggingface_hubr   r   r   huggingface_hub.utilsr   huggingface_hub.utils._dotenvr   r   r   
get_loggerr1   loggerr   r`   r   r+   r)   r^   intr   r*   r'   r,   r-   rn   r.   r_  r`  ra  rb  rc  rd  re  )items   0r   <module>r     s  &  	 	 1   . .  ; ; ) 5 ' 
		H	%,9WDTZZ;=VTZZW C, C&V* Vr+ 4DeCHo./ $s)  6a) aHP. P4E- E2q) qhtCH~ J5 J*^D3 ^DBA2 AHn7 n:c6 c2d7 d2c6 c2@:2 @:q Xs   %E:E