o
    Phz'                     @   s   d Z 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 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mZ dd	lmZmZ ejejeZG d
d deZG dd dZG dd deZdS )zP
This implementation was made specifically for translatepy by 'Zhymabek Roman'.
    N)JSONFile)UnsupportedMethod)Language)BaseTranslateExceptionBaseTranslator)Request)CallableDict)BingSessionManagerBingExampleResultc                   @   s   e Zd ZddiZdS )MicrosoftExceptioni  zToo many requestsN)__name__
__module____qualname__error_codes r   r   \/var/www/html/env_mimamsha/lib/python3.10/site-packages/translatepy/translators/microsoft.pyr      s    r   c                   @   s<   e Zd ZdefddZddefddZi fdefd	d
ZdS )MicrosoftSessionManagerrequestc                 C   s   || _ t|| _ttjtddd| _| j}|	 }W d    n1 s&w   Y  |
d|
d|
dd| _| _| _|   d S )Nz.microsoft_translatepyF)blockingregiontokentoken_expiriesr   )sessionr
   bing_sessionr   ospathjoinHOME_DIR_auth_session_filereadget_region_token_token_expiries_parse_authorization_data)selfr   _auth_session_auth_session_datar   r   r   __init__   s   

*z MicrosoftSessionManager.__init__Fforcec                 C   s   | j rt | jks|rP| jjdi d}|dd}|dkr#t|d|d|d| _ | _t t|dd	d
 d
  | _| j	
| j | j| jd d S d S )Nzhttps://www.bing.com/tfetspktokdata
statusCode   z*Error during token request from the serverr   r   expiryDurationInMSi'	 i  )r   r   r   )r#   timer$   r   sendr!   r   r"   intr   write)r&   r*   token_responsetoken_statusr   r   r   r%   '   s   
"z1MicrosoftSessionManager._parse_authorization_dataparamsc           
      C   s   t dD ]S}dj| jddtt d}ddi}|| | jj||||d}|	 }|j
d	krT|d
i }	|	d|j
dkrG| jdd qt|	d|	ddd|  S d S )N   Bearer {token}r   zapplication/json)AuthorizationzContent-typezX-ClientTraceIdzapi-versionz3.0)r6   jsonheadersr.   errorcodeih T)r*   messageUnknown)status_coder?   )rangeformatr#   struuiduuid4updater   postr;   rA   r!   r%   r   )
r&   urlr,   r6   _r<   _paramsr   responser=   r   r   r   r1   5   s"   


zMicrosoftSessionManager.sendN)F)	r   r   r   r   r)   boolr%   r	   r1   r   r   r   r   r      s    
r   c                   @   s   e Zd ZdZh dZe fdefddZdededed	efd
dZd	efddZ	ded	efddZ
dededefddZdedededefddZdd Zdd Zd	efddZdS )MicrosoftTranslatezA
    A Python implementation of Microsoft Translation's APIs
    >[   fr-capt-ptsr-Cyrlsr-Latntlh-Latntlh-Piqdafamarasazbgbnbscacscydadeelenesetfafifjfrgaguhehihrhthuhyidisitiujakkkmknkokuloltlvmgmimlmrmsmtmynbnenlorpaplpsptroruskslsmsqsvswtatethtitotrtyukurvifilkmrmwwotqprsyuayueautozh-Hanszh-Hantr   c                 C   s   t || _|| _d S )N)r   session_managerr   )r&   r   r   r   r   r)   S   s   

zMicrosoftTranslate.__init__textdestination_languagesource_languagereturnc                 C   sH   |dkr	|  |}| jjd||dd|igd}||d d d d fS )Nr   z7https://api.cognitive.microsofttranslator.com/translatefromr   r   r6   r,   r   translations)	_languager   r1   )r&   r   r   r   rL   r   r   r   
_translateW   s   
zMicrosoftTranslate._translatec                 C   sT   |  |||\}}| jjd||d| | dgd}|dd |d d D fS )	NzAhttps://api.cognitive.microsofttranslator.com/dictionary/examplesr   )TextTranslationr   c                 S   s   g | ]}t |qS r   )r   ).0exampler   r   r   
<listcomp>b   s    z/MicrosoftTranslate._example.<locals>.<listcomp>r   examples)r   r   r1   lower)r&   r   r   r   translationrL   r   r   r   _example^   s   (zMicrosoftTranslate._examplec                 C   s"   | j jdd|igd}|d d S )Nz4https://api.cognitive.microsofttranslator.com/detectr   r+   r   language)r   r1   )r&   r   rL   r   r   r   r   d   s   zMicrosoftTranslate._languagec                 C   sX   |  |}| jjdd|ig||dd}g }|d d D ]}|d }|| q||fS )Nz?https://api.cognitive.microsofttranslator.com/dictionary/lookupr   r   )r,   r6   r   r   displayTarget)r   r   r1   append)r&   r   r   r   rL   _result_dictionary_dictionary_resultr   r   r   r   k   s   
zMicrosoftTranslate._dictionaryspeedgenderc                 C   s  |dkr	|  |}| }dj| jjd}| j|}i ddddddd	d
dddddddddddddddddddddd d!d"d#d$i d%d&d'd(d)d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdT}||}|D ]}	|	dU |kr|	dV |kr|	dW }
 n	qtdXj|dYdZj| jjd}d[j| jjd\d]d^d_}d`j||t	|da ||
db}| j
j||dc|dd}||jfS )eNr   zGhttps://{region}.tts.speech.microsoft.com/cognitiveservices/voices/list)r   zzh-CNr   zmr-INrc   zen-USr   zru-RUrb   zel-GRrd   zes-COrr   zid-IDr   zpt-PTrz   zko-KRr   zta-INr   zte-INre   zet-EEr   zpl-PLrt   zit-ITr   zms-MYr   zmt-MTr   zro-ROr   zvi-VNrZ   zbg-BGzzh-TWr   ztr-TRra   zde-CHri   zfr-CHr   znb-NOr   znl-BEr   zuk-UArl   zhe-ILr   zur-PKrm   zhi-INrv   zja-JPrn   zhr-HRr   zsv-SErp   zhu-HUr   zsw-KEzlt-LTzsl-SIzfi-FIzlv-LVzsk-SKzda-DKzcy-GBzgu-INzga-IEzth-THzar-EGzca-ESzh-HKzcs-CZ)r}   r   rg   r~   r   r`   r_   rk   rj   r   rW   r]   r   r^   LocaleGender	ShortNamez:Microsoft Translate doesn't support {source_lang} language)source_langz>https://{region}.tts.speech.microsoft.com/cognitiveservices/v1r8   r9   zapplication/ssml+xmlz audio-48khz-192kbitrate-mono-mp3)authorizationzcontent-typezx-microsoft-outputformatz<speak version='1.0' xml:lang='{local}'><voice xml:lang='{local}' xml:gender='{gender}' name='{voice}'><prosody rate='{speed}%'>{text}</prosody></voice></speak>d   )r   r   r   localvoicezutf-8)r,   r<   )r   
capitalizerC   r   r"   r1   r!   r   r#   floatr   rH   encodecontent)r&   r   r   r   r   _supported_langs_url_supported_langs_list_locals_source_local_supported_langr   
speech_urlr<   r,   spech_resultr   r   r   _text_to_speechu   s$   


z"MicrosoftTranslate._text_to_speechc                 C   s*   t |}|jdkrdS |jdkrdS |jS )Nzhor   ochr   )r   rr   alpha2)r&   r   r   r   r   r   _language_normalize   s   

z&MicrosoftTranslate._language_normalizec                 C   s8   t | dv rtdS t | dkrtdS t|S )N>   zh-cnzh-hansr   zzh-twr   )rD   r   r   )r&   language_coder   r   r   _language_denormalize   s
   z(MicrosoftTranslate._language_denormalizec                 C   s   dS )NzMicrosoft Translater   )r&   r   r   r   __str__   s   zMicrosoftTranslate.__str__N)r   r   r   __doc___supported_languagesr   r)   rD   r   r   r   r   r2   r   r   r   r   r   r   r   r   rN   L   s    
rN   )r   r;   rer   rE   r0   safeIOr   translatepy.exceptionsr   translatepy.languager   translatepy.translators.baser   r   translatepy.utils.requestr   translatepy.utils.annotationsr   r	   translatepy.translators.bingr
   r   r   abspathdirname__file__r   r   r   rN   r   r   r   r   <module>   s"    0