o
    e%                     @   s   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Zd dlm	Z	 d dl
mZmZ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
ZdddZdd ZdddZdadddZdd ZdddZG dd dZ dS )    N)getpass)urlparse)rfapi)API_URLAPP_URL	DEMO_KEYSload_roboflow_api_key)Project)	Workspace)	CLIPModel	GazeModel)
write_linez1.1.16c                 C   s   t | tstdttd d tt|  tdd | D r`| tv r&| S ttd |  }|j	dkr9t|j
|j	dkrZ|d	k rVtd
 td |d7 }t| |||S td| }|S tjdt d | d | d  dS )Nz.API Key is of Incorrect Type 
 Expected Type:  z
 Input Type: c                 s   s    | ]	}|  r|V  qd S N)islower).0c r   @/var/www/myenv/lib/python3.10/site-packages/roboflow/__init__.py	<genexpr>   s    zcheck_key.<locals>.<genexpr>z
/?api_key=i        zretrying...   z?There was an error validating the api key with Roboflow server.z8upload and label your dataset, and get an API KEY here: z/?model=z&ref=

onboarding)
isinstancestrRuntimeErrortypeanyr   requestspostr   status_codetextprinttimesleep	check_keyjsonsysstdoutwriter   )api_keymodelnotebooknum_retriesresponserr   r   r   r'      sF   




	r'   c                 C   s   t | }|d }t| |S )N	workspace)r'   Roboflow)r,   r1   wr   r   r   auth>   s   
r5   Fc           	      C   s  t j}|dkrt jt dd}n
t jt dd}t jd|d}t j|r1|s1td d S t j|r>|r>t | | d u rKtd	t d
  ntd	t d |  d  t	d}t
td | }|jdkr| }|d u rutdt jt j|st t j| d|i}t|d  d }|d | } | d |d< t|d}tj||dd W d    d S 1 sw   Y  d S |  d S )NntUSERPROFILEzroboflow/config.jsonHOMEz.config/roboflow/config.jsonROBOFLOW_CONFIG_DIRdefaultz_You are already logged into Roboflow. To make a different login,run roboflow.login(force=True).zvisit z+/auth-cli to get your authentication token.z/auth-cli/?workspace=z" to get your authentication token.z%Paste the authentication token here: z/query/cliAuthToken/r   z9Invalid API key. Please check your API key and try again.
workspacesr   urlRF_WORKSPACEr4      indent)osnamepathjoingetenvisfiler   remover   r   r    getr"   r(   
ValueErrorexistsdirnamemkdirlistkeysopendumpraise_for_status)	r2   forceos_namedefault_pathconf_locationtokenr_logindefault_workspace_idfr   r   r   loginE   sH   


r[   c                 C   sR   t jdt dd d}t j|std| du r!t  atS t | atS )zHigh level function to initialize Roboflow.

    Args:
        the_workspace: the workspace url to initialize.
            If None, the default workspace will be used.

    Returns:
        None
    r9   r8   z/.config/roboflow/config.jsonr:   z?To use this method, you must first login - run roboflow.login()N)rB   rF   rD   rG   r   r3   r2   active_workspace)the_workspacerV   r   r   r   initialize_roboflow   s   
r^   c                 C   sb   t  }d| v sd| v r t| }|jd}|d }t|d }nd||}||}|j}|S )zHigh level function to load Roboflow models.

    Args:
        model_url: the model url to load.
            Must be from either app.roboflow.com or universe.roboflow.com

    Returns:
        the model object to use for inference
    universe.roboflow.comapp.roboflow.com/r?   GModel URL must be from either app.roboflow.com or universe.roboflow.com)r^   r   rD   splitintprojectversionr-   )	model_urloperate_workspace
parsed_url
path_partsrf   rg   r-   r   r   r   
load_model   s   

rl   c           	      C   sp   d| v sd| v r!t | }|jd}|d }t|d }|d }ndt|d}||}||}|||S )	a  High level function to download data from Roboflow.

    Args:
        dataset_url: the dataset url to download.
            Must be from either app.roboflow.com or universe.roboflow.com
        model_format: the format the dataset will be downloaded in
        location: the location the dataset will be downloaded to

    Returns:
        The dataset object with location available as dataset.location
    r_   r`   ra   r?   rb   r   rc   )r]   )r   rD   rd   re   r^   rf   rg   download)	dataset_urlmodel_formatlocationrj   rk   rf   rg   r]   ri   r   r   r   download_dataset   s   



rq   c                   @   s@   e Zd Z			dddZdd ZdddZdd	d
Zdd ZdS )r3   N	undefinedc                 C   s6   || _ | j d u rt | _ || _|| _d| _|   d S NF)r,   r   ro   r.   r   r5   )selfr,   ro   r.   r   r   r   __init__   s   
zRoboflow.__init__c                 C   sH   t | j| j| j}|dkrd| _| S |tv rd| _| S |d }|| _| S )Nr   Tr2   )r'   r,   ro   r.   r   r   universecurrent_workspace)rt   r1   r4   r   r   r   r5      s   zRoboflow.authc                 C   sz   t jd t jd t j  |d u r| j}| jtv r&ti | j|| jS t	|}|p.| j}t
||}t|||| jS )Nzloading Roboflow workspace...r   )r)   r*   r+   flushrw   r,   r   r
   ro   r   r   get_workspace)rt   r]   workspace_api_keyr,   list_projectsr   r   r   r2      s   


zRoboflow.workspacec                 C   s   |du rd|v r| d}|d |d }}n| j}ttd | d | d | j }|jdkr6t|j|	 d }t
| j|S )zFunction that takes in the name of the project and returns the project object
        :param project_name api_key: project name
        :param the_workspace workspace name
        :return project object
        Nra   r   r   z	?api_key=r   rf   )rsplitrw   r    rI   r   r,   r"   r   r#   r(   r	   )rt   project_namer]   splitted_projectdataset_infor   r   r   rf     s   
$

zRoboflow.projectc                 C   s   | j | jd}tj|ddS )zto string function)r,   r2   r?   r@   )r,   r2   r(   dumps)rt   
json_valuer   r   r   __str__  s   zRoboflow.__str__)Nrr   rr   r   )__name__
__module____qualname__ru   r5   r2   rf   r   r   r   r   r   r3      s    


r3   )r   rs   r   )!r(   rB   r)   r%   r   urllib.parser   r    roboflow.adaptersr   roboflow.configr   r   r   r   roboflow.core.projectr	   roboflow.core.workspacer
   roboflow.modelsr   r   roboflow.util.generalr   __version__r'   r5   r[   r\   r^   rl   rq   r3   r   r   r   r   <module>   s,    
*
;

