o
    Ďi4                     @   s   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 Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)datetime	timedelta)deploymentapi)load_roboflow_api_keyc              	   C   s*   zt |  W dS  ttfy   Y dS w )NTF)r   fromisoformat
ValueError	TypeError)ts r
   O/home/jeff/fluffinator/venv/lib/python3.10/site-packages/roboflow/deployment.pyis_valid_ISO8601_timestamp	   s   
r   c                 C   s   | rt | std td |rt |std td t  }| d u r4|d u r4|| } |}| |fS | d urK|d u rKt|  } | | }| |fS | d u rb|d urbt| }|| } | |fS t|  } t| }| |kr|td td | |fS )NzMPlease provide a valid from_timestamp in ISO8601 format (YYYY-MM-DD HH:MM:SS)   zKPlease provide a valid to_timestamp in ISO8601 format (YYYY-MM-DD HH:MM:SS)z2from_timestamp should be earlier than to_timestamp)r   printexitr   now
astimezoner   )from_timestampto_timestampdefault_timedeltatime_nowr
   r
   r   check_from_to_timestamp   s2   r   c                 C   s&  | j ddd}|jdd}|j ddd}|j dd	d}|j d
dd}|j ddd}|j ddd}|j ddd}|j ddd}	|j ddd}
|j ddd}|j ddd}|jtd |jdddd |jtd |jdddd |jddd |jd d!d"d#d$ |jd%d&d'd#d$ |jd(d)d*td+d, |jd-d.d/d0d1 |jd2d3d4d5d6 |jd7d8d9d0d1 |jtd |jdddd |jdd:d |jd7d8d9d0d1 |jtd |jdddd |jt	d |jdddd |jd;d<d=d d6 |jd(d>d?d d6 |jt
d |jdddd |jdd:d |jd;d<d=d d6 |jd(d>d?d d6 |	jtd |	jdddd |	jdd:d |
jtd |
jdddd |
jdd:d |jtd |jdddd |jdd:d |jtd |jdddd |jdd:d |jd@d)dAtdBd, |jdCdDdEtdFd, |jd;dGdHd0d1 d S )IN
deploymentzUdeployment related commands.  type 'roboflow deployment' to see detailed command help)helpzdeployment subcommands)titlemachine_typezlist machine typesaddzcreate a dedicated deploymentgetz-show detailed info for a dedicated deploymentlistz)list dedicated deployments in a workspaceusage_workspacez2get all dedicated deployments usage in a workspaceusage_deploymentz-get usage of a specific dedicated deploymentspausezpause a dedicated deploymentresumezresume a dedicated deploymentdeletezdelete a dedicated deploymentlogz(show log info for a dedicated deployment)funcz-az	--api_keyzapi keydeployment_namezYdeployment name, must contain 5-15 lowercase characters, first character must be a letterz-mz--machine_typezMmachine type, run `roboflow deployment machine_type` to see available optionsT)r   requiredz-ez--creator_emailz3your email address (must be added to the workspace)z-tz
--durationzKduration, how long you want to keep the deployment (unit: hour, default: 3)   )r   typedefaultz-nodelz--no_delete_on_expirationz"keep when expired (default: False)
store_true)r   actionz-vz--inference_versionz*inference server version (default: latest)latest)r   r)   z-wz--wait_on_pendingzwait if deployment is pendingzdeployment namez-fz--from_timestampz8begin time stamp in ISO8601 format (YYYY-MM-DD HH:MM:SS)z--to_timestampz6end time stamp in ISO8601 format (YYYY-MM-DD HH:MM:SS)z-dz%duration of log (from now) in secondsi  z-nz--tailz8number of lines to show from the end of the logs (<= 50)
   z--followzfollow log output)
add_parseradd_subparsersset_defaultslist_machine_typesadd_argumentadd_deploymentfloatget_deploymentlist_deploymentget_workspace_usageget_deployment_usagepause_deploymentresume_deploymentdelete_deploymentget_deployment_logint)
subparsersdeployment_parserdeployment_subparsersdeployment_machine_type_parserdeployment_add_parserdeployment_get_parserdeployment_list_parser!deployment_usage_workspace_parser"deployment_usage_deployment_parserdeployment_pause_parserdeployment_resume_parserdeployment_delete_parserdeployment_log_parserr
   r
   r   add_deployment_parser.   s   

rK   c                 C   l   | j ptd }|d u rtd td t|\}}|dkr+t| d|  t| ttj|dd d S NPlease provide an api keyr      :    indent)api_keyr   r   r   r   r1   jsondumpsargsrT   status_codemsgr
   r
   r   r1         r1   c              	   C   s   | j ptd }|d u rtd td t|| j| j| j| j	 | j
| j\}}|dkr9t| d|  t| ntd| j
 d ttj|dd | jrTt|  d S d S )	NrN   r   rO   rP   zDeployment z created successfullyrQ   rR   )rT   r   r   r   r   r3   creator_emailr   durationno_delete_on_expirationr%   inference_versionrU   rV   wait_on_pendingr5   rW   r
   r
   r   r3      s*   
r3   c                 C   s   | j ptd }|d u rtd td 	 t|| j\}}|dkr.t| d|  t| | jr7|d dkrBttj	|dd	 d S tt
 d
 d| j d td q)NrN   r   TrO   rP   statuspendingrQ   rR   z%H:%M:%Sz Waiting for deployment z to be ready...
   )rT   r   r   r   r   r5   r%   r`   rU   rV   r   r   strftimetimesleeprW   r
   r
   r   r5      s    
r5   c                 C   rL   rM   )rT   r   r   r   r   r6   rU   rV   rW   r
   r
   r   r6      r[   r6   c                 C   s   | j ptd }|d u rtd td t| j| jtdd\}}t	|||\}}|dkr:t| d|  t| tt
j|dd d S NrN   r   )daysrO   rP   rQ   rR   )rT   r   r   r   r   r   r   r   r   r7   rU   rV   rX   rT   r   r   rY   rZ   r
   r
   r   r7      s   r7   c                 C   s   | j ptd }|d u rtd td t| j| jtdd\}}t	|| j
||\}}|dkr<t| d|  t| ttj|dd d S rg   )rT   r   r   r   r   r   r   r   r   r8   r%   rU   rV   ri   r
   r
   r   r8      s   r8   c                 C   p   | j ptd }|d u rtd td t|| j\}}|dkr-t| d|  t| ttj|dd d S rM   )	rT   r   r   r   r   r9   r%   rU   rV   rW   r
   r
   r   r9        r9   c                 C   rj   rM   )	rT   r   r   r   r   r:   r%   rU   rV   rW   r
   r
   r   r:     rk   r:   c                 C   rj   rM   )	rT   r   r   r   r   r;   r%   rU   rV   rW   r
   r
   r   r;     rk   r;   c                 C   s$  | j ptd }|d u rtd td t  }|t| jd }|}t	 }| j
}	 t|| j|||\}}|dkrGt| d|  t| |d d d D ].}	t|	d  }
|	d	 |v sc|
|k rdqN||	d	  |
}td
|
d d|	d   qN| jsd S td |}t  }d}q*)NrN   r   )secondsTrO   rP   	timestamp	insert_id[z%Y-%m-%d %H:%M:%S.%fz] payloadr-   i,  )rT   r   r   r   r   r   r   r   r]   settailr   r<   r%   r   r   rd   followre   rf   )rX   rT   r   r   last_log_timestamplog_idsmax_entriesrY   rZ   r#   log_timestampr
   r
   r   r<   )  s<    
r<   )rU   re   r   r   roboflow.adaptersr   roboflow.configr   r   r   rK   r1   r3   r5   r6   r7   r8   r9   r:   r;   r<   r
   r
   r
   r   <module>   s$    u