
    "Ki*                        S SK Jr  S SKJr  S SKJr  S SKJrJrJrJ	r	J
r
  S SKJr  S SKJr  S SKJr   " S S	\\5      r\ " S
 S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       rS\S\\   S\	\\\4      S\	\\\4      S\	\   S\	\
\\\4      S\\\4   4S jrg )!    )	dataclass)datetime)Enum)AnyDictListOptionalUnion)	constants)SpaceHardware)parse_datetimec                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
JobStage   aH  
Enumeration of possible stage of a Job on the Hub.

Value can be compared to a string:
```py
assert JobStage.COMPLETED == "COMPLETED"
```
Possible values are: `COMPLETED`, `CANCELED`, `ERROR`, `DELETED`, `RUNNING`.
Taken from https://github.com/huggingface/moon-landing/blob/main/server/job_types/JobInfo.ts#L61 (private url).
	COMPLETEDCANCELEDERRORDELETEDRUNNING N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   __static_attributes__r       [/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/huggingface_hub/_jobs_api.pyr   r      s"    	 IHEGGr   r   c                   0    \ rS rSr% \\S'   \\   \S'   Srg)	JobStatus-   stagemessager   N)	r   r   r   r   r   __annotations__r	   strr   r   r   r   r    r    -   s    Oc]r   r    c                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)JobOwner3   idnametyper   N)r   r   r   r   r%   r$   r   r   r   r   r'   r'   3   s    G
I
Ir   r'   c                       \ rS rSr% Sr\\S'   \\   \S'   \\   \S'   \\   \S'   \\	\      \S'   \\	\      \S'   \\
\\4      \S	'   \\
\\4      \S
'   \\   \S'   \\S'   \\S'   \\S'   \\S'   SS jrSrg)JobInfo:   ar  
Contains information about a Job.

Args:
    id (`str`):
        Job ID.
    created_at (`datetime` or `None`):
        When the Job was created.
    docker_image (`str` or `None`):
        The Docker image from Docker Hub used for the Job.
        Can be None if space_id is present instead.
    space_id (`str` or `None`):
        The Docker image from Hugging Face Spaces used for the Job.
        Can be None if docker_image is present instead.
    command (`List[str]` or `None`):
        Command of the Job, e.g. `["python", "-c", "print('hello world')"]`
    arguments (`List[str]` or `None`):
        Arguments passed to the command
    environment (`Dict[str]` or `None`):
        Environment variables of the Job as a dictionary.
    secrets (`Dict[str]` or `None`):
        Secret environment variables of the Job (encrypted).
    flavor (`str` or `None`):
        Flavor for the hardware, as in Hugging Face Spaces. See [`SpaceHardware`] for possible values.
        E.g. `"cpu-basic"`.
    status: (`JobStatus` or `None`):
        Status of the Job, e.g. `JobStatus(stage="RUNNING", message=None)`
        See [`JobStage`] for possible stage values.
    owner: (`JobOwner` or `None`):
        Owner of the Job, e.g. `JobOwner(id="5e9ecfc04957053f60648a3e", name="lhoestq", type="user")`

Example:

```python
>>> from huggingface_hub import run_job
>>> job = run_job(
...     image="python:3.12",
...     command=["python", "-c", "print('Hello from the cloud!')"]
... )
>>> job
JobInfo(id='687fb701029421ae5549d998', created_at=datetime.datetime(2025, 7, 22, 16, 6, 25, 79000, tzinfo=datetime.timezone.utc), docker_image='python:3.12', space_id=None, command=['python', '-c', "print('Hello from the cloud!')"], arguments=[], environment={}, secrets={}, flavor='cpu-basic', status=JobStatus(stage='RUNNING', message=None), owner=JobOwner(id='5e9ecfc04957053f60648a3e', name='lhoestq', type='user'), endpoint='https://huggingface.co', url='https://huggingface.co/jobs/lhoestq/687fb701029421ae5549d998')
>>> job.id
'687fb701029421ae5549d998'
>>> job.url
'https://huggingface.co/jobs/lhoestq/687fb701029421ae5549d998'
>>> job.status.stage
'RUNNING'
```
r)   
created_atdocker_imagespace_idcommand	argumentsenvironmentsecretsflavorstatusownerendpointurlNc                    US   U l         UR                  S5      =(       d    UR                  S5      nU(       a  [        U5      OS U l        UR                  S5      =(       d    UR                  S5      U l        UR                  S5      =(       d    UR                  S5      U l        UR                  S0 5      n[        US   US	   US
   S9U l        UR                  S5      U l        UR                  S5      U l	        UR                  S5      U l
        UR                  S5      U l        UR                  S5      U l        UR                  S0 5      n[        US   UR                  S5      S9U l        UR                  S[        R                   5      U l        U R"                   SU R                  R$                   SU R                    3U l        g )Nr)   	createdAtr/   dockerImager0   spaceIdr1   r8   r*   r+   r)   r*   r+   r2   r3   r4   r5   r6   r7   r"   r#   )r"   r#   r9   z/jobs//)r)   getr   r/   r0   r1   r'   r8   r2   r3   r4   r5   r6   r    r7   r   ENDPOINTr9   r*   r:   )selfkwargsr/   r8   r7   s        r   __init__JobInfo.__init__~   sa   ,ZZ,H

<0H
8B.4"JJ}5SN9S

9-GJ1G

7B't5=uV}U
zz),K0!::m4zz),jj*Hb)fWovzz)?TU 

:y/A/ABmm_F4::??*;1TWWIFr   )r3   r2   r/   r0   r9   r4   r6   r)   r8   r5   r1   r7   r:   returnN)r   r   r   r   r   r%   r$   r	   r   r   r   r   r   r    r'   rE   r   r   r   r   r-   r-   :   s    0d 	G""3-smd3i  S	""$sCx.))d38n%%]##O M	HGr   r-   c                       \ rS rSr% \\   \S'   \\   \S'   \\\      \S'   \\\      \S'   \\\\	4      \S'   \\\\	4      \S'   \\
   \S'   \\   \S	'   \\\      \S
'   \\   \S'   SS jrSrg)JobSpec   r0   r1   r2   r3   r4   r5   r6   timeouttagsarchNc                    UR                  S5      =(       d    UR                  S5      U l        UR                  S5      =(       d    UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S	5      U l        UR                  S
5      U l        UR                  S5      U l	        UR                  S5      U l
        g )Nr=   r0   r>   r1   r2   r3   r4   r5   r6   rL   rM   rN   )rA   r0   r1   r2   r3   r4   r5   r6   rL   rM   rN   rC   rD   s     r   rE   JobSpec.__init__   s    "JJ}5SN9S

9-GJ1Gzz),K0!::m4zz),jj*zz),JJv&	JJv&	r   )
rN   r3   r2   r0   r4   r6   r5   r1   rM   rL   rG   )r   r   r   r   r	   r%   r$   r   r   r   r   intrE   r   r   r   r   rJ   rJ      s    3-smd3i  S	""$sCx.))d38n%%]##c]
49

3-
'r   rJ   c                   4    \ rS rSr% \\S'   \\S'   SS jrSrg)LastJobInfo   r)   atNc                 >    US   U l         [        US   5      U l        g )Nr)   rV   )r)   r   rV   rP   s     r   rE   LastJobInfo.__init__   s    , .r   )rV   r)   rG   )	r   r   r   r   r%   r$   r   rE   r   r   r   r   rT   rT      s    GL/r   rT   c                   @    \ rS rSr% \\   \S'   \\   \S'   SS jrSr	g)ScheduledJobStatus   last_jobnext_job_run_atNc                 *   UR                  S5      =(       d    UR                  S5      nU(       a  [        S0 UD6OS U l        UR                  S5      =(       d    UR                  S5      nU(       a  [        [	        U5      5      U l        g S U l        g )NlastJobr\   nextJobRunAtr]   r   )rA   rT   r\   r   r%   r]   )rC   rD   r\   r]   s       r   rE   ScheduledJobStatus.__init__   sj    ::i(BFJJz,B3;/h/ **^4U

CT8UGV~c/.BC\`r   r\   r]   rG   )
r   r   r   r   r	   rT   r$   r   rE   r   r   r   r   rZ   rZ      s    {##h''ar   rZ   c                       \ rS rSr% Sr\\S'   \\   \S'   \	\S'   \\   \S'   \\
   \S'   \\
   \S'   \\S	'   \\S
'   SS jrSrg)ScheduledJobInfo   a9  
Contains information about a Job.

Args:
    id (`str`):
        Scheduled Job ID.
    created_at (`datetime` or `None`):
        When the scheduled Job was created.
    tags (`List[str]` or `None`):
        The tags of the scheduled Job.
    schedule (`str` or `None`):
        One of "@annually", "@yearly", "@monthly", "@weekly", "@daily", "@hourly", or a
        CRON schedule expression (e.g., '0 9 * * 1' for 9 AM every Monday).
    suspend (`bool` or `None`):
        Whether the scheduled job is suspended (paused).
    concurrency (`bool` or `None`):
        Whether multiple instances of this Job can run concurrently.
    status (`ScheduledJobStatus` or `None`):
        Status of the scheduled Job.
    owner: (`JobOwner` or `None`):
        Owner of the scheduled Job, e.g. `JobOwner(id="5e9ecfc04957053f60648a3e", name="lhoestq", type="user")`
    job_spec: (`JobSpec` or `None`):
        Specifications of the Job.

Example:

```python
>>> from huggingface_hub import run_job
>>> scheduled_job = create_scheduled_job(
...     image="python:3.12",
...     command=["python", "-c", "print('Hello from the cloud!')"],
...     schedule="@hourly",
... )
>>> scheduled_job.id
'687fb701029421ae5549d999'
>>> scheduled_job.status.next_job_run_at
datetime.datetime(2025, 7, 22, 17, 6, 25, 79000, tzinfo=datetime.timezone.utc)
```
r)   r/   job_specschedulesuspendconcurrencyr7   r8   Nc                    US   U l         UR                  S5      =(       d    UR                  S5      nU(       a  [        U5      OS U l        [	        S0 UR                  S5      =(       d    UR                  S0 5      D6U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S	0 5      n[        UR                  S
5      =(       d    UR                  S5      UR                  S5      =(       d    UR                  S5      S9U l
        UR                  S0 5      n[        US   US   US   S9U l        g )Nr)   r<   r/   rf   jobSpecrg   rh   ri   r7   r\   r_   r]   r`   rb   r8   r*   r+   r?   r   )r)   rA   r   r/   rJ   rf   rg   rh   ri   rZ   r7   r'   r8   )rC   rD   r/   r7   r8   s        r   rE   ScheduledJobInfo.__init__   s   ,ZZ,H

<0H
8B.4X6::j#9#VVZZ	SU=VX

:.zz),!::m4Hb)(ZZ
+Dvzz)/D"JJ'89WVZZ=W
 

7B't5=uV}U
r   )ri   r/   r)   rf   r8   rg   r7   rh   rG   )r   r   r   r   r   r%   r$   r	   r   rJ   boolrZ   r'   rE   r   r   r   r   rd   rd      sO    &P 	G""smd^$OVr   rd   imager2   envr5   r6   rL   rH   c                    U/ U=(       d    0 U=(       d    [         R                  S.nU(       a  X6S'   U(       aV  SSSSS.n[        U[        5      (       a,  US   U;   a#  [	        [        US S 5      XuS      -  5      US	'   O[	        U5      US	'   S
 H-  nU R                  U5      (       d  M  U [        U5      S  US'     U$    XS'   U$ )N)r2   r3   r4   r6   r5      <   i  iQ )smhdtimeoutSeconds)zhttps://huggingface.co/spaces/zhttps://hf.co/spaces/zhuggingface.co/spaces/zhf.co/spaces/r>   r=   )r   	CPU_BASIC
isinstancer%   rR   float
startswithlen)	rn   r2   ro   r5   r6   rL   rf   time_units_factorsprefixs	            r   _create_job_specr     s     yb3M33	 H %#$2DyIgs##7I(I),U73B<-@CU^`VaCb-b)cH%&),WH%& F##"'F"6HY O #(Or   N)dataclassesr   r   enumr   typingr   r   r   r	   r
   huggingface_hubr   huggingface_hub._space_apir   huggingface_hub.utils._datetimer   r%   r   r    r'   r-   rJ   rT   rZ   rd   rR   r{   r   r   r   r   <module>r      sq   "   3 3 % 4 :sD (   
    UG UG UGp ' ' '2 / / / a a a @V @V @VF&& #Y& 
$sCx.	!	&
 d38n%& ]#& eCO,-& 
#s(^&r   