o
    /ifT(                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
Z
d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZmZ dZd	Zd
Zddgeedd Zeh dZG dd deZG dd dZdS )    N)HTTPAdapterResponseRetry)ClientSession)r   )Enum)API_KEY_ENV)KEY_FILE_HANDLER	KeyValueszhttps://api.confident-ai.com      i  i  i  i  >   GETPOSTDELETEc                   @   s   e Zd ZdZdZdZdZdS )	Endpointsz/v1/datasetz/v1/test-runz	/v1/eventz/v1/feedbackN)__name__
__module____qualname__DATASET_ENDPOINTTEST_RUN_ENDPOINTEVENT_ENDPOINTFEEDBACK_ENDPOINT r   r   E/var/www/html/corbot_env/lib/python3.10/site-packages/deepeval/api.pyr      s
    r   c                   @   s   e Zd ZdZeeddddddfdefddZe										d!de
fdd	Ze	d
e
fddZ						d"ddZd#ddZd$ddZd%ddZd%ddZe	d#dedefddZe	dedefddZ						d"ddZ	d$dd ZdS )&Apiz3Internal Api reference for handling http operations Napi_keyc                 C   s   |dkr
t tj}|dks|d u rtd|| _| jdf| _d| ||d| _d| |i| _	|p4t
| _|| _|| _|| _d S )Nr   zPlease provide a valid API Key.application/json)Content-Type
User-AgentCONFIDENT_API_KEYr   )r   
fetch_datar	   API_KEY
ValueErrorr   _auth_generate_useragent_headers_headers_multipart_form_dataAPI_BASE_URLbase_api_urlverifyproxiescert)selfr   user_agent_extensionapi_instance_urlr)   r*   r+   r   r   r   __init__"   s    	


zApi.__init__returnc              
   C   s   t  }tttttdd}t|d}|d| |
r|
nd |_	|r#|nd|_
|	r.|j|	 z|p2i }|p6d }|j| ||||||d}|W S  tyV } zt||d }~ww )NF)totalbackoff_factorstatus_forcelistallowed_methodsraise_on_status)max_retrieszhttps://T)methodurlheadersparamsjsonfilesdata)requestsSessionr   HTTP_TOTAL_RETRIESHTTP_RETRY_BACKOFF_FACTORHTTP_STATUS_FORCE_LISTHTTP_RETRY_ALLOWED_METHODSr   mountr+   r)   r*   updaterequest	Exception)r7   r8   r9   authr:   bodyr<   r=   r)   r*   r+   httpsretry_strategyadapterreserrr   r   r   _http_requestE   s>   

zApi._http_requestrM   c              
   C   sn   z|   d| j}W n ty$ } zt| | j}W Y d }~nd }~ww | jdkr3td| t t	|)Nerrori  zDeprecation Warning: )
r;   gettextr"   printstatus_codewarningswarnDeprecationWarningrG   )rM   messageer   r   r   _raise_on_responsew   s   
zApi._raise_on_responsec	                 C   s   | j  | }	| j||	||||||| j| j| jd}
d}|
jdkr=z|
 }W |S  ty< } z|W  Y d}~S d}~ww |
jdkro|
 dd}t	| d
  }|dkrid	|d
< | ||||||||S td dS | |
 |S )z0Generic HTTP request method with error handling.)r)   r*   r+   N   i  rX   zConflict occurred.z [y/N]: yT	overwritezAborted.)r(   rO   r)   r*   r+   rT   r;   r"   rQ   inputstriplower_api_requestrS   rZ   )r,   r7   endpointr9   rH   r:   rI   r<   r=   r8   rM   r;   rY   rX   
user_inputr   r   r   ra      sF   



zApi._api_requestc                 C   s   | j d|| j| j|dS )zGeneric GET Request Wrapperr   )r9   rH   r:   ra   r%   r#   )r,   rb   r:   r   r   r   get_request   s   zApi.get_requestc              	   C   s*   | j d||du r| jn| j| j|||dS )zGeneric POST Request Wrapperr   Nr9   rH   rI   r<   r=   )ra   r%   r&   r#   r,   rb   rI   r<   r=   r   r   r   post_request   s   zApi.post_requestc                 C   s   | j d|| j| j||dS )zGeneric DELETE Request Wrapperr   )r9   rH   r:   rI   rd   )r,   rb   r:   rI   r   r   r   delete_request   s   zApi.delete_requestc                 C   s   | j d||| j| j|dS )zGeneric PUT Request WrapperPUT)rI   r9   rH   r:   rd   )r,   rb   rI   r:   r   r   r   put_request   s   zApi.put_request	extensionc                 C   s6   t  }t   }dtdd| d| | g}|S )a  Generates UserAgent parameter with module, Python
        and OS details

        Args:
            extension (str, optional): Option to extend UserAgent
            with source system

        Returns:
            str: Generated UserAgent parameter with platform versions
         NzPython/zOS/)platformpython_versionjoinfilter)rl   ro   os_platform
user_agentr   r   r   r$      s   
zApi._generate_useragentrR   c                 C   s   t jj| ddS )al  Project and Batch names can be a part of URL, which causes
        an error in case of a special character used.
        Quotation assures the right object to be retrieved from API.

        `quote_string('a bc/def')` -> `a%20bc%2Fdef`

        Args:
            text (str): Input text to be quoted

        Returns:
            str: Quoted text in return
        r   )safe)urllibparsequote)rR   r   r   r   quote_string   s   zApi.quote_stringc	                    s  | j  | }	t 4 I dH }
z|r(t }| D ]\}}|j|||d q|
j||	|||dI dH }|jdkrkz| I dH }|W W W  d  I dH  S  t	yj   |
 I dH  Y W W  d  I dH  S w |jdd}d|v r~| I dH }n|
 I dH }|jdkrtd	|  td
|j d|  W W d  I dH  dS  ty } ztd| |d}~ww 1 I dH sw   Y  dS )z=Generic asynchronous HTTP request method with error handling.N)filename)r7   r8   r9   r:   r;   r[   r   r   r   i  zError 400: Bad Request - zError z: zHTTP request failed: )r(   r   aiohttpFormDataitems	add_fieldrF   statusr;   r"   rR   r9   rQ   rS   rG   )r,   r7   rb   r9   rH   r:   rI   r<   r=   r8   session	file_namefile_contentrM   r;   content_typeerror_responserN   r   r   r   _api_request_async  sP   
	
)zApi._api_request_asyncc              	      s2   | j d||du r| jn| j| j|||dI dH S )z)Generic asynchronous POST Request Wrapperr   Nrf   )r   r%   r&   r#   rg   r   r   r   post_request_asyncH  s   zApi.post_request_async)	NNNNNNNNN)NNNNNN)N)NNN)NN)r   r   r   __doc__osgetenvr   strr/   staticmethodr   rO   rZ   ra   re   rh   ri   rk   r$   rx   r   r   r   r   r   r   r      sd    

#1

2




:r   )r   rn   urllib.parseru   r>   rU   requests.adaptersr   r   r   rz   r   enumr   deepeval.constantsr   deepeval.key_handlerr   r	   r'   r@   rA   listrangerB   	frozensetrC   r   r   r   r   r   r   <module>   s&    