o
    "ik                     @   s   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	m
Z
m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 ddlmZ zd dlmZ W n ey[   d dlZY nw e e jdZG dd dZG dd dZ dS )    N)JSONDecodeError   )core)ApiError)AsyncClientWrapperSyncClientWrapper)jsonable_encoder)remove_none_from_dict)RequestOptions)UnprocessableEntityError)DoDubbingResponse)HttpValidationError.c                #   @   \  e Zd ZdefddZdddddddddddddddddeje dejej	 dejej	 d	ejej	 d
ejej	 deje deje deje dedeje
 deje deje
 deje
 deje deje deje def"ddZdddedeje dejfddZdddedeje dejfddZdddededeje dejfd d!ZdS )"DubbingClientclient_wrapperc                C   
   || _ d S N_client_wrapperselfr    r   ]/var/www/html/voicebot/backend/venv/lib/python3.10/site-packages/elevenlabs/dubbing/client.py__init__      
zDubbingClient.__init__Nmodefilecsv_fileforeground_audio_filebackground_audio_filename
source_urlsource_langnum_speakers	watermark
start_timeend_timehighest_resolutiondubbing_studiorequest_optionsr   r   r   r   r    r!   r"   r#   target_langr$   r%   r&   r'   r(   r)   r*   returnc                C   s  | j jjdtj| j   ddt|dur|dnd|du s(|ddu r:tt	|||||	|
|||||dni tt	|||||	|
|||||dtt	|di t
t	||||dtt	i | j  |durt|d	i ni |dur|d
dur|d
ndd|dur|dndd	}d|j  krdk rn ntt| S |jdkrttt| z| }W n ty   t|j|jdw t|j|d)a  
        Dubs provided audio or video file into given language.

        Parameters:
            - mode: typing.Optional[str]. automatic or manual.

            - file: typing.Optional[core.File]. See core.File for more documentation

            - csv_file: typing.Optional[core.File]. See core.File for more documentation

            - foreground_audio_file: typing.Optional[core.File]. See core.File for more documentation

            - background_audio_file: typing.Optional[core.File]. See core.File for more documentation

            - name: typing.Optional[str]. Name of the dubbing project.

            - source_url: typing.Optional[str]. URL of the source video/audio file.

            - source_lang: typing.Optional[str]. Source language.

            - target_lang: str. Target language.

            - num_speakers: typing.Optional[int]. Number of speakers to use for the dubbing.

            - watermark: typing.Optional[bool]. Whether to apply watermark to the output video.

            - start_time: typing.Optional[int]. Start time of the source video/audio file.

            - end_time: typing.Optional[int]. End time of the source video/audio file.

            - highest_resolution: typing.Optional[bool]. Whether to use the highest resolution available.

            - dubbing_studio: typing.Optional[bool]. Whether to prepare dub for edits in dubbing studio.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import ElevenLabs

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.dubbing.dub_a_video_or_an_audio_file()
        POST/
v1/dubbingNadditional_query_parametersadditional_body_parametersr   r!   r"   r#   r+   r$   r%   r&   r'   r(   r)   r   r   r   r    additional_headerstimeout_in_seconds<   r   max_retriesparamsdatafilesheaderstimeoutretriesr7      ,    status_codebodyr   httpx_clientrequesturllibparseurljoinget_base_urlr   getr	   r   !convert_file_dict_to_httpx_tuplesget_headersrC   pydanticparse_obj_asr   jsonr   r   r   r   textr   r   r   r   r   r    r!   r"   r#   r+   r$   r%   r&   r'   r(   r)   r*   	_response_response_jsonr   r   r   dub_a_video_or_an_audio_file   s   ?
	
D
z*DubbingClient.dub_a_video_or_an_audio_filer*   
dubbing_idc                C   2  | j jjdtj| j   ddt| t|dur |dndtt	i | j 
 |dur4|di ni |durH|ddurH|dndd	|durS|d
nd	d}d|j  krbdk rmn n	ttj| S |jdkr|ttt| z| }W n ty   t|j|jdw t|j|d)a  
        Returns metadata about a dubbing project, including whether it's still in progress or not

        Parameters:
            - dubbing_id: str. ID of the dubbing project.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import ElevenLabs

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.dubbing.get_dubbing_project_metadata(
            dubbing_id="dubbing_id",
        )
        GETr.   v1/dubbing/Nr0   r4   r5   r6   r   r7   r9   r<   r=   r>   r7   r?   r@   rA   rB   r   rF   rG   rH   rI   rJ   rK   r   rL   r	   rN   rC   rO   rP   typingAnyrQ   r   r   r   r   rR   r   rX   r*   rT   rU   r   r   r   get_dubbing_project_metadata   B   	

z*DubbingClient.get_dubbing_project_metadatac                C   rY   )a  
        Deletes a dubbing project.

        Parameters:
            - dubbing_id: str. ID of the dubbing project.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import ElevenLabs

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.dubbing.delete_dubbing_project(
            dubbing_id="dubbing_id",
        )
        DELETEr.   r[   Nr0   r4   r5   r6   r   r7   r\   r?   r@   rA   rB   r]   r`   r   r   r   delete_dubbing_project   rb   z$DubbingClient.delete_dubbing_projectlanguage_codec                C   s<  | j jjdtj| j   ddt| dt| t|dur%|dndtt	i | j 
 |dur9|di ni |durM|ddurM|dnd	d
|durX|dnd
d}d|j  krgdk rrn n	ttj| S |jdkrttt| z| }W n ty   t|j|jdw t|j|d)a  
        Returns dubbed file.

        Parameters:
            - dubbing_id: str. ID of the dubbing project.

            - language_code: str. ID of the language.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import ElevenLabs

        client = ElevenLabs(
            api_key="YOUR_API_KEY",
        )
        client.dubbing.get_dubbed_file(
            dubbing_id="dubbing_id",
            language_code="language_code",
        )
        rZ   r.   r[   /audio/Nr0   r4   r5   r6   r   r7   r\   r?   r@   rA   rB   r]   r   rX   re   r*   rT   rU   r   r   r   get_dubbed_file  sD   	

zDubbingClient.get_dubbed_file)__name__
__module____qualname__r   r   r^   Optionalstrr   Fileintboolr
   r   rV   r_   ra   rd   rh   r   r   r   r   r          



	

 
5
5r   c                #   @   r   )"AsyncDubbingClientr   c                C   r   r   r   r   r   r   r   r   M  r   zAsyncDubbingClient.__init__Nr   r   r   r   r   r    r!   r"   r#   r+   r$   r%   r&   r'   r(   r)   r*   r,   c                   s  | j jjdtj| j   ddt|dur|dnd|du s)|ddu r;tt	|||||	|
|||||dni tt	|||||	|
|||||dtt	|di t
t	||||dtt	i | j  |duru|d	i ni |dur|d
dur|d
ndd|dur|dndd	I dH }d|j  krdk rn ntt| S |jdkrttt| z| }W n ty   t|j|jdw t|j|d)a  
        Dubs provided audio or video file into given language.

        Parameters:
            - mode: typing.Optional[str]. automatic or manual.

            - file: typing.Optional[core.File]. See core.File for more documentation

            - csv_file: typing.Optional[core.File]. See core.File for more documentation

            - foreground_audio_file: typing.Optional[core.File]. See core.File for more documentation

            - background_audio_file: typing.Optional[core.File]. See core.File for more documentation

            - name: typing.Optional[str]. Name of the dubbing project.

            - source_url: typing.Optional[str]. URL of the source video/audio file.

            - source_lang: typing.Optional[str]. Source language.

            - target_lang: str. Target language.

            - num_speakers: typing.Optional[int]. Number of speakers to use for the dubbing.

            - watermark: typing.Optional[bool]. Whether to apply watermark to the output video.

            - start_time: typing.Optional[int]. Start time of the source video/audio file.

            - end_time: typing.Optional[int]. End time of the source video/audio file.

            - highest_resolution: typing.Optional[bool]. Whether to use the highest resolution available.

            - dubbing_studio: typing.Optional[bool]. Whether to prepare dub for edits in dubbing studio.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import AsyncElevenLabs

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )
        await client.dubbing.dub_a_video_or_an_audio_file()
        r-   r.   r/   Nr0   r1   r2   r3   r4   r5   r6   r   r7   r8   r?   r@   rA   rB   rE   rS   r   r   r   rV   P  s   ?
	
D
z/AsyncDubbingClient.dub_a_video_or_an_audio_filerW   rX   c                   :  | j jjdtj| j   ddt| t|dur!|dndtt	i | j 
 |dur5|di ni |durI|ddurI|dndd	|durT|d
nd	dI dH }d|j  krfdk rqn n	ttj| S |jdkrttt| z| }W n ty   t|j|jdw t|j|d)a  
        Returns metadata about a dubbing project, including whether it's still in progress or not

        Parameters:
            - dubbing_id: str. ID of the dubbing project.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import AsyncElevenLabs

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )
        await client.dubbing.get_dubbing_project_metadata(
            dubbing_id="dubbing_id",
        )
        rZ   r.   r[   Nr0   r4   r5   r6   r   r7   r\   r?   r@   rA   rB   r]   r`   r   r   r   ra     D   	

z/AsyncDubbingClient.get_dubbing_project_metadatac                   rs   )a  
        Deletes a dubbing project.

        Parameters:
            - dubbing_id: str. ID of the dubbing project.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import AsyncElevenLabs

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )
        await client.dubbing.delete_dubbing_project(
            dubbing_id="dubbing_id",
        )
        rc   r.   r[   Nr0   r4   r5   r6   r   r7   r\   r?   r@   rA   rB   r]   r`   r   r   r   rd     rt   z)AsyncDubbingClient.delete_dubbing_projectre   c                   sD  | j jjdtj| j   ddt| dt| t|dur&|dndtt	i | j 
 |dur:|di ni |durN|ddurN|dnd	d
|durY|dnd
dI dH }d|j  krkdk rvn n	ttj| S |jdkrttt| z| }W n ty   t|j|jdw t|j|d)a(  
        Returns dubbed file.

        Parameters:
            - dubbing_id: str. ID of the dubbing project.

            - language_code: str. ID of the language.

            - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
        ---
        from elevenlabs.client import AsyncElevenLabs

        client = AsyncElevenLabs(
            api_key="YOUR_API_KEY",
        )
        await client.dubbing.get_dubbed_file(
            dubbing_id="dubbing_id",
            language_code="language_code",
        )
        rZ   r.   r[   rf   Nr0   r4   r5   r6   r   r7   r\   r?   r@   rA   rB   r]   rg   r   r   r   rh   E  sF   	

z"AsyncDubbingClient.get_dubbed_file)ri   rj   rk   r   r   r^   rl   rm   r   rn   ro   rp   r
   r   rV   r_   ra   rd   rh   r   r   r   r   rr   L  rq   rr   )!r^   urllib.parserH   json.decoderr    r   core.api_errorr   core.client_wrapperr   r   core.jsonable_encoderr   core.remove_none_from_dictr	   core.request_optionsr
   !errors.unprocessable_entity_errorr   types.do_dubbing_responser   types.http_validation_errorr   pydantic.v1v1rO   ImportErrorcastr_   OMITr   rr   r   r   r   r   <module>   s,     4