o
    NK&h                     @   s   d Z ddlZddlZddlZddlmZmZ ddlZddlm	Z	 ddl
mZmZ ddlmZmZ ddlmZ G dd	 d	e	ZdS )
z"Copyright (C) 2020 Nidhal Baccouri    N)ListOptional)BaseTranslator)	BASE_URLSMSFT_ENV_VAR)ApiKeyExceptionMicrosoftAPIerror)is_input_validc                       s   e Zd ZdZddeedddfdededee dee d	ee	 f
 fd
dZ
dd ZdedefddZdedefddZdee dee fddZ  ZS )MicrosoftTranslatorzp
    the class that wraps functions, which use the Microsoft translator under the hood to translate word(s)
    autoenNsourcetargetapi_keyregionproxiesc                    sh   |st td|| _|| _| jdd| _|r|| _| j| jd< t jdt	d||| 
 d| dS )	z
        @params api_key and target are the required params
        @param api_key: your Microsoft API key
        @param region: your Microsoft Location
        )env_varzapplication/json)zOcp-Apim-Subscription-KeyzContent-typezOcp-Apim-Subscription-RegionMICROSOFT_TRANSLATE)base_urlr   r   	languagesN )r   r   r   r   headersr   super__init__r   get_get_supported_languages)selfr   r   r   r   r   kwargs	__class__r   L/var/www/html/venv/lib/python3.10/site-packages/deep_translator/microsoft.pyr      s$   

zMicrosoftTranslator.__init__c                    s0   d}t |}| d   fdd  D S )NzZhttps://api.cognitive.microsofttranslator.com/languages?api-version=3.0&scope=translation translationc                    s"   i | ]} | d    |  qS )name)lower).0ktranslation_dictr   r    
<dictcomp>H   s    z@MicrosoftTranslator._get_supported_languages.<locals>.<dictcomp>)requestsr   jsonkeys)r   microsoft_languages_api_urlmicrosoft_languages_responser   r&   r    r   >   s   
z,MicrosoftTranslator._get_supported_languagestextreturnc           
      K   s   d}t |ro| j| jd< | j| jd< d|ig}ztj| j| j| j|| jd}W n tj	j
yB   t \}}}td|j  Y nw t| tu rU| d }t|t| tu rqdd	 | d
 d D }	d|	S dS dS )z
        function that uses microsoft translate to translate a text
        @param text: desired text to translate
        @return: str: translated text
        Nfromtor.   )paramsr   r*   r   zReturned error: errorc                 S   s   g | ]}|d  qS )r.   r   )r$   ir   r   r    
<listcomp>n   s    z1MicrosoftTranslator.translate.<locals>.<listcomp>r   translations
)r	   _source_url_params_targetr)   post	_base_urlr   r   
exceptionsRequestExceptionsysexc_infologgingwarning__name__typer*   dictr   listjoin)
r   r.   r   responsevalid_microsoft_jsonexc_typevalue	tracebackerror_messageall_translationsr   r   r    	translateM   s6   


zMicrosoftTranslator.translatepathc                 K      | j |fi |S )zj
        translate from a file
        @param path: path to file
        @return: translated text
        )_translate_file)r   rP   r   r   r   r    translate_files      z"MicrosoftTranslator.translate_filebatchc                 K   rQ   )z
        translate a batch of texts
        @param batch: list of texts to translate
        @return: list of translations
        )_translate_batch)r   rU   r   r   r   r    translate_batch{   rT   z#MicrosoftTranslator.translate_batch)rC   
__module____qualname____doc__osgetenvr   strr   rE   r   r   rO   rS   r   rW   __classcell__r   r   r   r    r
      s,    
'&"r
   )__copyright__rA   r[   r?   typingr   r   r)   deep_translator.baser   deep_translator.constantsr   r   deep_translator.exceptionsr   r   deep_translator.validater	   r
   r   r   r   r    <module>   s   