o
    Ďi#                     @   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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dZdadddZdd ZdddZ G dd dZ!dS )    N)getpass)Path)urlparse)rfapi)API_URLAPP_URL	DEMO_KEYSload_roboflow_api_key)Project)	Workspace)	CLIPModel	GazeModel)
write_linez1.2.13c                 C   s   t | tstdtt d tt|  tdd | D r^| tv r$| S ttd |  }|j	dkr7t|j
|j	dkrX|dk rTt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   M/home/jeff/fluffinator/venv/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'   Fc           	      C   s  t j}|dkrtt d d }ntt d d d }t jd|d}t j|r3|s3td d S t j|r@|r@t 	| | d u rMtdt
 d	  ntdt
 d
 |  d  td}tt
d | }|jdkr| }|d u rwt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roboflowzconfig.jsonz.config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_WORKSPACEw   indent)osnamer   r   homegetenvpathisfiler   remover   r   r    getr"   r(   
ValueErrorexistsdirnamemakedirslistkeysopendumpraise_for_status)		workspaceforceos_namedefault_pathconf_locationtokenr_logindefault_workspace_idfr   r   r   login?   sB   


rW   c                 C   s&   | 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
    N)RoboflowrN   active_workspacethe_workspacer   r   r   initialize_roboflowy   s
   
r\   c                 C   sf   t  }d| v sd| v r t| }|jd}|d }t|d }nt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   rA   splitintrE   projectversionr-   )	model_urloperate_workspace
parsed_url
path_partsrd   re   r-   r   r   r   
load_model   s   

rj   c           	      C   st   d| v sd| v r!t | }|jd}|d }t|d }|d }nt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^   r_   r:   r`   r   ra   rZ   )	r   rA   rb   rc   rE   r\   rd   re   download)	dataset_urlmodel_formatlocationrh   ri   rd   re   r[   rg   r   r   r   download_dataset   s   



ro   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 )rX   N	undefinedc                 C   s6   || _ | j d u rt | _ || _|| _d| _|   d S NF)r,   r	   rm   r.   r   auth)selfr,   rm   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   TrN   )r'   r,   rm   r.   r   r   universecurrent_workspace)rs   r1   r9   r   r   r   rr      s   zRoboflow.authc                 C   s|   t jd t jd t j  |d u r| j}| jr,| j}t||}t|||| j	S | jt
v r:ti | j|| j	S td)Nzloading Roboflow workspace...r   z!A valid API key must be provided.)r)   r*   r+   flushrv   r,   r   get_workspacer   rm   r   rE   )rs   r[   r,   list_projectsr   r   r   rN      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
        Nr_   r   r   z	?api_key=r   rd   )rsplitrv   r    rD   r   r,   r"   r   r#   r(   r
   )rs   project_namer[   splitted_projectdataset_infor   r   r   rd      s   
$

zRoboflow.projectc                 C   s   | j | jd}tj|ddS )zto string function)r,   rN   r:   r;   )r,   rN   r(   dumps)rs   
json_valuer   r   r   __str__  s   zRoboflow.__str__)Nrp   rp   r   )__name__
__module____qualname__rt   rr   rN   rd   r   r   r   r   r   rX      s    


rX   )r   rq   r   )"r(   r=   r)   r%   r   pathlibr   urllib.parser   r    roboflow.adaptersr   roboflow.configr   r   r   r	   roboflow.core.projectr
   roboflow.core.workspacer   roboflow.modelsr   r   roboflow.util.generalr   __version__r'   rW   rY   r\   rj   ro   rX   r   r   r   r   <module>   s,    

*7

