o
    iM                     @   s~   d dl Z d dlmZ d dlmZ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	 ZG d
d dZdS )    Nwraps)CallableListOptionalUnion)logger)DeployConfigParams)config)AgentStartErrorc                    s   t  d d fdd
}|S )Nlivec             
      sT   z | g|R i |I d H }|| j fW S  ty) } z|r#|  |d }~ww N)error	Exceptionstop)selfr   argskwargsresultefunc D/home/ubuntu/.local/lib/python3.10/site-packages/pipecatcloud/api.pywrapper   s   zapi_method.<locals>.wrapperr   )r   r   r   r   r   
api_method   s   	r   c                   @   sv  e Zd Zddee defddZededefd	d
Zddee de	fddZ
				ddededee	 dee	 dedee dee	 fddZdedefddZdd Zdd Zde	fddZedd Zdd ee de	dB fd!d"Zed#d$ Zdefd%d&Zed'd( Zde	fd)d*Zed+d, Zde	fd-d.Zed/d0 Zd1ed ede	fd2d3Zed4d5 Zd6ed ede	fd7d8Zed9d: Z	dd ed;ee d<ee de	dB fd=d>Z ed?d@ Z!	ddAe	dBed ed<ee de	f
dCdDZ"edEdF Z#dBedGed ede	dB fdHdIZ$edJdK Z%dBed ede	dB fdLdMZ&edNdO Z'	ddPe(d edQede	dB fdRdSZ)edTdU Z*dVed ede	dB fdWdXZ+edYdZ Z,dd ed<ee de-e	 dB fd[d\Z.ed]d^ Z/		ddVed_ed`edAee daee de	dB fdbdcZ0eddde Z1dVed ede	dB fdfdgZ2edhdi Z3	j		ddVed edke4dlee dmee de	dB fdndoZ5edpdq Z6dVed ede	dB fdrdsZ7edtdu Z8dVedmed ede	dB fdvdwZ9edxdy Z:dVedmed ede	dB fdzd{Z;ed|d} Z<d edee	 dB fd~dZ=edd Z>d ede	dB fddZ?edd Z@d ede	dB fddZAedd ZBd ede	de	dB fddZCedd ZDdS )_APINFtokenis_clic                 C   s   || _ d | _d| _|| _d S NF)r   r   bubble_nextr   )r   r   r   r   r   r   __init__"   s   
z_API.__init__pathreturnc                 C   sL   t dds
tdt | dstd|  dt dd t | d S )Napi_host z#API host config variable is not setz	Endpoint z is not set)r
   get
ValueError)r#   r   r   r   construct_api_url(   s
   z_API.construct_api_urloverride_tokenc                 C   s"   | j s|si S dd|p| j  iS )NAuthorizationzBearer )r   )r   r*   r   r   r   _configure_headers2   s   
z_API._configure_headersmethodurlparamsjsonnot_found_is_emptyc           
         s*  t  4 I d H }td| d| d| d|  |j||| |||dI d H }|jswtd|j d|j  | j	rQ|rQ|jdkrQ	 W d   I d H  d S z|
 I d H }	|	| _W n tyr   |jphdt|jd| _Y nw |  |
 I d H W  d   I d H  S 1 I d H sw   Y  d S )Nz	Request:  )r-   r.   headersr/   r0   zResponse not ok: i  zBad Request)r   code)aiohttpClientSessionr   debugrequestr,   okstatusreasonr   r0   r   r   strraise_for_status)
r   r-   r.   r/   r0   r1   r*   sessionresponse
error_datar   r   r   _base_request7   s4   	"
0z_API._base_requestmethod_funcc                    s    t  dd fdd
}|S )zJFactory method that wraps API methods with error handling and live contextNr   c              
      s   d _ z |i |I d H }d_|j fW S  tyf } zC| r(js(|   jsEj rEjsEtj trCj ddrCtj |j rTjsTt	
|   d_d j fW  Y d }~S d }~ww )NFr:   429)r   r!   r   r   r   
isinstancedictr'   r   r   r7   print_error)r   r   r   r   r   rB   r   r   r   r   b   s(   


z'_API.create_api_method.<locals>.wrapperr   )r   rB   r   r   rG   r   create_api_method_   s   z_API.create_api_methodc                 C   sP   ddl m} | jsd S t| jtr | jdddkr |  d S || j d S )Nr   )consoler4   400401)!pipecatcloud._utils.console_utilsrI   r   rD   rE   r'   unauthorized	api_error)r   rI   r   r   r   rF   |   s   z_API.print_errorc                 C   s
   d| _ | S )NT)r!   r   r   r   r   bubble_error   s   z_API.bubble_errorc                    s"   |  d}| d|I d H pi S )Nwhoami_pathGET)r)   rA   )r   r.   r   r   r   _whoami   s   
z_API._whoamic                 C      |  | jS r   )rH   rS   rO   r   r   r   whoami      z_API.whoamiorgc                    s   |  d}| d|I d H }|rt|d sd S |r3|d D ]}|d |kr2|d |d d  S q|d d |d d dS )Norganization_pathrR   organizationsnameverboseName)rZ   verbose_namer   )r)   rA   len)r   rW   r.   resultsor   r   r   _organizations_current   s   
z_API._organizations_currentc                 C   rT   r   )rH   r`   rO   r   r   r   organizations_current   rV   z_API.organizations_currentc                    s@   |  d}| d|I d H }|r|dd s |dd pg S )NrX   rR   rY   )r)   rA   r'   )r   r.   r^   r   r   r   _organizations   s   
z_API._organizationsc                 C   rT   r   )rH   rb   rO   r   r   r   rY      rV   z_API.organizationsc                    *   |  dj|d}| d|I d H pi S )Ndaily_key_pathrW   rR   r)   formatrA   r   rW   r.   r   r   r   _organizations_daily_key      z_API._organizations_daily_keyc                 C   rT   r   )rH   ri   rO   r   r   r   organizations_daily_key   rV   z_API.organizations_daily_keyc                    rc   )Napi_keys_pathre   rR   rf   rh   r   r   r   	_api_keys   rj   z_API._api_keysc                 C   rT   )zYGet API keys for an organization.
        Args:
            org: Organization ID
        )rH   rm   rO   r   r   r   api_keys   s   z_API.api_keysapi_key_namec                    s4   |  dj|d}| jd||dddI d H pi S )Nrl   re   POSTpublic)rZ   typer0   rf   )r   ro   rW   r.   r   r   r   _api_key_create   s
   z_API._api_key_createc                 C   rT   )zCreate API keys for an organization.
        Args:
            api_key_name: Human readable name for API key
            org: Organization ID
        )rH   rt   rO   r   r   r   api_key_create      z_API.api_key_create
api_key_idc                    s4   |  dj|d d| }| d|I d H pi S )Nrl   re   /DELETErf   )r   rw   rW   r.   r   r   r   _api_key_delete      z_API._api_key_deletec                 C   rT   )zDelete API keys for an organization.
        Args:
            api_key_id: Human readable name for API key
            org: Organization ID
        )rH   rz   rO   r   r   r   api_key_delete   rv   z_API.api_key_delete
secret_setregionc                    s   |r|  dj|d d| }n
|  dj|d }|r"d|ind }| jd||ddI d H p1i }d|v r:|d S d	|v rB|d	 S d S )
Nsecrets_pathre   rx   r~   rR   T)r/   r1   setssecretsrf   )r   rW   r}   r~   r.   r/   r   r   r   r   _secrets_list   s   z_API._secrets_listc                 C   rT   )zList secrets
        Args:
            org: Organization ID,
            secret_set: (optional) name of secret set to lookup
            region: (optional) filter by region

        )rH   r   rO   r   r   r   secrets_list     	z_API.secrets_listdataset_namec                    sL   |  dj|d d| }|ri |d|i}| jd||dI d H p%i S )Nr   re   rx   r~   PUTrs   rf   )r   r   r   rW   r~   r.   r   r   r   _secrets_upsert  s
   z_API._secrets_upsertc                 C   rT   )a  Create / modify secret set.
        Args:
            data: key and value of secret to add (or credentials for image pull secrets)
            set_name: name of set to create or update
            org: Organization ID
            region: region for secret set
        )rH   r   rO   r   r   r   secrets_upsert  r   z_API.secrets_upsertsecret_namec                    s:   |  dj|d d| d| }| jd|ddI d H S Nr   re   rx   ry   Tr1   rf   )r   r   r   rW   r.   r   r   r   _secrets_delete&  s   "z_API._secrets_deletec                 C   rT   )zDelete secret from set
        Args:
            set_name: name of set to target
            secret_name: name of secret to delete
            org: Organization ID
        )rH   r   rO   r   r   r   secrets_delete*     z_API.secrets_deletec                    4   |  dj|d d| }| jd|ddI d H S r   rf   )r   r   rW   r.   r   r   r   _secrets_delete_set4  r{   z_API._secrets_delete_setc                 C   rT   )zzDelete secret from set
        Args:
            set_name: name of set to target
            org: Organization ID
        )rH   r   rO   r   r   r   secrets_delete_set8  rv   z_API.secrets_delete_setdeploy_configupdatec                    s   |  dj|d }|j|j|j|j|j|jj|jj	d|j
|j|jd|jjid
} fdd  |}|rB| jd||d	I d H S | jd
||d	I d H S )Nservices_pathre   )	minAgents	maxAgentsaudioFilter)
serviceNameimageimagePullSecretSet	secretSetr~   autoScalingenableKrispenableIntegratedKeysProxyagentProfile	krispVivac                    s    fdd|   D S )Nc                    s0   i | ]\}}|d ur|t |tr |n|qS r   )rD   rE   ).0kvremove_none_valuesr   r   
<dictcomp>]  s
    z<_API._deploy.<locals>.remove_none_values.<locals>.<dictcomp>)items)dr   r   r   r   \  s   
z(_API._deploy.<locals>.remove_none_valuesr   rs   rp   )r)   rg   
agent_namer   image_credentialsr}   r~   scaling
min_agents
max_agentsenable_krispenable_managed_keysagent_profile
krisp_vivaaudio_filterrA   )r   r   rW   r   r.   payloadcleaned_payloadr   r   r   _deployC  s*   z_API._deployc                 C   rT   )zLookup agent by name
        Args:
            deploy_config: Deploy config object to send as JSON to deployment
            update: Updated existing deployment
            org: Organization ID
        )rH   r   rO   r   r   r   deployj  r   z_API.deployr   c                    sL   |  dj|d d| }| jd|ddI d H }|r$d|v r$|d S d S )Nr   re   rx   rR   Tr   bodyrf   )r   r   rW   r.   r   r   r   r   _agentv  s   z_API._agentc                 C   rT   )z|Lookup agent by name
        Args:
            agent_name: name of agent to lookup
            org: Organization ID
        )rH   r   rO   r   r   r   agent  rv   z
_API.agentc                    sT   |  dj|d }|rd|ind }| jd||dI d H pi }d|v r(|d S d S )Nr   re   r~   rR   r/   servicesrf   )r   rW   r~   r.   r/   r   r   r   r   _agents  s   z_API._agentsc                 C   rT   )z|List agents/services
        Args:
            org: Organization ID
            region: (optional) filter by region
        )rH   r   rO   r   r   r   agents  rv   z_API.agentsapi_key	use_dailydaily_propertiesc                    sd   |  dj|d }d|i}|d urt||d< |r%|r%t||d< | jd|||ddI d H S )	N
start_path)servicecreateDailyRoomr   dailyRoomPropertiesrp   T)r*   r0   r1   )r)   rg   r0   loadsrA   )r   r   r   r   r   r   r.   r   r   r   r   _start_agent  s   
z_API._start_agentc                 C   rT   r   )rH   r   rO   r   r   r   start_agent  rV   z_API.start_agentc                    r   )Nr   re   rx   ry   Tr   rf   r   r   rW   r.   r   r   r   _agent_delete  r{   z_API._agent_deletec                 C   rT   r   )rH   r   rO   r   r   r   agent_delete  rV   z_API.agent_deleted   limitdeployment_id
session_idc                    sN   |  dj||d }d|i}|r||d< |r||d< | jd||dI d H S )Nservices_logs_pathrW   r   r   deploymentId	sessionIdrR   r   rf   )r   r   rW   r   r   r   r.   r/   r   r   r   _agent_logs  s   z_API._agent_logsc                 C   rT   r   )rH   r   rO   r   r   r   
agent_logs  rV   z_API.agent_logsc                    s.   |  dj||d }| d|I d H pi S )Nservices_sessions_pathr   rR   rf   r   r   r   r   _agent_sessions  s   z_API._agent_sessionsc                 C   rT   r   )rH   r   rO   r   r   r   agent_sessions  rV   z_API.agent_sessionsc                    6   |  dj||d d| }| jd|ddI d H S )Nr   r   rx   rR   Tr   rf   r   r   r   rW   r.   r   r   r   _agent_session  s   z_API._agent_sessionc                 C   rT   )zGet details for a specific session including resource metrics.
        Args:
            agent_name: Name of the agent
            session_id: ID of the session
            org: Organization ID
        )rH   r   rO   r   r   r   agent_session  r   z_API.agent_sessionc                    r   )Nr   r   rx   ry   Tr   rf   r   r   r   r   _agent_session_terminate  s   z_API._agent_session_terminatec                 C   rT   )zTerminate an active session for an agent.
        Args:
            agent_name: Name of the agent
            session_id: ID of the session to terminate
            org: Organization ID
        )rH   r   rO   r   r   r   agent_session_terminate  r   z_API.agent_session_terminatec                    B   |  dj|d}| jd|ddI d H }|rd|v r|d S d S )Nregions_pathre   rR   Tr   regionsrf   r   rW   r.   r   r   r   r   _regions  s   z_API._regionsc                 C   rT   )zList available regions
        Args:
            org: Organization ID
        Returns:
            List of region objects with 'code' and 'display_name' fields
        )rH   r   rO   r   r   r   r     r   z_API.regionsc                    r   )Nproperties_pathre   rR   Tr   
propertiesrf   r   r   r   r   _properties     z_API._propertiesc                 C   rT   )zGet current organization properties
        Args:
            org: Organization ID
        Returns:
            Dict of property names to current values
        )rH   r   rO   r   r   r   r     r   z_API.propertiesc                    sH   |  dj|d d}| jd|ddI d H }|r"d|v r"|d S d S )Nr   re   z/schemarR   Tr   r   rf   r   r   r   r   _properties_schema%  s   z_API._properties_schemac                 C   rT   )zGet organization properties schema with metadata
        Args:
            org: Organization ID
        Returns:
            Dict of property names to schema info (type, description, currentValue, default, availableValues)
        )rH   r   rO   r   r   r   properties_schema,  r   z_API.properties_schemar   c                    sB   |  dj|d}| jd||dI d H }|rd|v r|d S d S )Nr   re   PATCHrs   r   rf   )r   rW   r   r.   r   r   r   r   _properties_update6  r   z_API._properties_updatec                 C   rT   )zUpdate organization properties
        Args:
            org: Organization ID
            properties: Dict of property names to new values
        Returns:
            Updated properties dict
        )rH   r   rO   r   r   r   properties_update=  r   z_API.properties_updater    r   )NNFN)NN)F)r   NN)E__name__
__module____qualname__r   r<   boolr"   staticmethodr)   rE   r,   rA   r   rH   rF   rP   rS   propertyrU   r`   ra   listrb   rY   ri   rk   rm   rn   rt   ru   rz   r|   r   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   intr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   !   sJ   		
(


	










	

'
	
$







	




	
	r   )r0   	functoolsr   typingr   r   r   r   r5   logurur    pipecatcloud._utils.deploy_utilsr	   pipecatcloud.configr
   pipecatcloud.exceptionr   r   r   r   r   r   r   <module>   s   