o
    Ph	&                     @   sp   d Z ddl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 G dd	 d	eZG d
d deZdS )z
Yandex Translate

This implementation was made specifically for translatepy from 'Zhymabek Roman', based on 'Anime no Sekai' version.
    N)UnsupportedMethod)Language)BaseTranslateExceptionBaseTranslator)timed_lru_cache)Requestc                
   @   s(   e Zd ZdZdddddddd	d
d	ZdS )YandexTranslateExceptionz,
    Default Yandex Translate exception
    ERR_KEY_INVALIDERR_KEY_BLOCKEDERR_DAILY_REQ_LIMIT_EXCEEDEDERR_DAILY_CHAR_LIMIT_EXCEEDEDERR_MONTHLY_CHAR_LIMIT_EXCEEDEDERR_TEXT_TOO_LONGERR_UNPROCESSABLE_TEXTERR_LANG_NOT_SUPPORTEDERR_SERVICE_NOT_AVAIBLE)	i  i  i  i  i  i  i  i  i  N)__name__
__module____qualname____doc__error_codes r   r   Y/var/www/html/env_mimamsha/lib/python3.10/site-packages/translatepy/translators/yandex.pyr      s    
r   c                   @   s  e Zd ZdZdZh dZe fdefddZedde	fd	d
Z
de	de	de	de	fddZde	de	de	de	fddZde	de	de	fddZde	fddZde	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 )%YandexTranslatez+
    Yandex Translation Implementation
    z6https://translate.yandex.net/api/v1/tr.json/{endpoint}>e   afamarazbabebgbnbscacscvcydadeeleneoeseteufafifrgagdglguhehihrhthuhyidisitjajvkakkkmknkokylalbloltlvmgmimkmlmnmrmsmtmynenlnopaplptrorusiskslsqsrsusvswtatetgthtltrttukuruzvixhyizhzucebemjmhrmrjpapsahsjnudmautokazlatuzbcyrrequestc                 C   s   || _ ddi| j _d S )Nz
User-Agentzru.yandex.translate/3.20.2024)sessionheader)selfr   r   r   r   __init__+   s   zYandexTranslate.__init__ih  returnc                 C   s   t t }|dd}|S )z
        Generates UUID (UCID) for Yandex Translate API requests (USID analogue)

        Args:

        Returns:
            str --> new generated UUID value
        - )struuiduuid4replace)r   _uuid_ucidr   r   r   r   /   s   zYandexTranslate._ucidtextdestination_languagesource_languagec           
      C   s   |dkr	|  |}| jjdd}|  ddd}||d | d}| jj|||d	}| }|jd
k rZ|d dkrZzt|d 	dd }	W n t
yQ   |}	Y nw |	|d d fS t|d )Nr|   	translateendpointandroidr   )ucidsrvformatr   r   langparamsdata  code   r   r   )	_language_api_urlr   r   r   postjsonstatus_coder   split	Exceptionr   )
r   r   r   r   urlr   r   r   response_detected_languager   r   r   
_translate>   s   
zYandexTranslate._translatec                 C   sb   |dkr	|  |}d}||d | d}| jj||d}|jdk r*||jdd fS t|j|j)	Nr|   z.https://translate.yandex.net/translit/translitr   r   )r   r      )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   _transliterateQ   s   

zYandexTranslate._transliteratec                 C   s   |dkr	|  |}d}|  dd}||dd}| jj|||d}| }|jdk rG|D ]}|d	 rB|d
 }	|d	 d }
||	|
}q,||fS t|j|j)Nr|   z?https://speller.yandex.net/services/spellservice.json/checkTextr   r   r      )r   r   optionsr   r   swordr   )	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   
correctionr   
suggestionr   r   r   _spellcheck^   s    

zYandexTranslate._spellcheckc                 C   sj   | j jdd}|  dd}|dd}| jj|||d}| }|jdk r/|d	 d
kr/|d S t|d	 )Ndetectr   r   r   r*   )r   hintr   r   r   r   r   )r   r   r   r   getr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   s   
zYandexTranslate._languagec                 C   s   |dkr	|  |}d}|  d|d|d | dd}| jj||d}|jd	k rR| }g }|d
 D ]}	|	d D ]}
|
d }|dddd}|| q7q1||fS t|j|j	)Nr|   z9https://dictionary.yandex.net/dicservice.json/queryCorpusr   r*   r      )r   r   srcuir   flagsr   r   resultexamplesdst<r   >)
r   r   r   r   r   r   r   appendr   r   )r   r   r   r   r   r   r   r   _resultexamples_groupsentense_sentense_resultr   r   r   _example~   s    

zYandexTranslate._examplec                 C   s   |dkr	|  |}d}|  d|d|d | ddd}| jj||d	}|jd
k rL| }g }|d|| d D ]}	|	d d d }
||
 q8||fS t|j|j	)Nr|   z<https://dictionary.yandex.net/dicservice.json/lookupMultipler   r*   r   r   regular)r   r   r   r   dictr   	dict_typer   r   z{}-{}rj   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   _word_resultr   r   r   _dictionary   s   
 
zYandexTranslate._dictionaryspeedgenderc           
      C   s   |dkr	|  |}ddgddgddgddd	gdd
gddgdd}|| |}|d u r5tdj|dd}dddddd|d ||d |d d
}| jj||dd id}	|	jdk r_||	jfS t|	j|	j)Nr|   ru_RUfilipptr_TR
erkanyavasen_USnick)r\   rj   r*   alena	silaerkanalyss)malefemalez7Yandex SpeechKit doesn't support {source_lang} language)source_langz$https://tts.voicetech.yandex.net/ttsmp3r7   r   webr   r   d   )
r   qualitychunkedplatformzmock-rangesapplicationr   r   voicer   zContent-Type)r   headersr   )	r   r   r   r   r   r   contentr   r   )
r   r   r   r   r   speech_lang_voicesr   r   r   r   r   r   r   _text_to_speech   s   
&

zYandexTranslate._text_to_speechc                 C   s"   |j dkrdS |j dkrdS |jS )Nzhorr   srdrz   )r<   alpha2)r   languager   r   r   _language_normalize   s
   

z#YandexTranslate._language_normalizec                 C   s8   t | dv rtdS t | dkrtdS t|S )N>   zh-cnrr   r   rz   r   )r   lowerr   )r   language_coder   r   r   _language_denormalize   s
   z%YandexTranslate._language_denormalizec                 C   s   dS )NYandexr   )r   r   r   r   __str__   s   zYandexTranslate.__str__N)r   r   r   r   r   _supported_languagesr   r   r   r   r   r   r   r   r   r   r   intr   r   r   r   r   r   r   r   r   "   s$    r   )r   r   translatepy.exceptionsr   translatepy.languager   translatepy.translators.baser   r   translatepy.utils.lru_cacherr   translatepy.utils.requestr   r   r   r   r   r   r   <module>   s    