o
    Ph>*                     @   s   d 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 ejejeZG d	d
 d
eZG dd dZG dd dZG dd deZdS )zu
This implementation was made specifically for translatepy from 'Zhymabek Roman', based on 'Anime no Sekai' version.
    N)JSONFile)UnsupportedMethod)Language)BaseTranslateExceptionBaseTranslator)Request)CallableDictc                   @   s   e Zd ZddiZdS )BingTranslateException  zToo many requestsN)__name__
__module____qualname__error_codes r   r   W/var/www/html/env_mimamsha/lib/python3.10/site-packages/translatepy/translators/bing.pyr
      s    r
   c                   @   s@   e Zd ZG dd dZG dd dZdddZdefd	d
ZdS )BingExampleResultc                   @   (   e Zd ZdZdddZdefddZdS )	zBingExampleResult.SourceExamplezThe source for an examplereturnNc                 C   N   || _ | j dd| _| j dd| _| j dd| _| j| j | j | _d S )NsourcePrefix 
sourceTermsourceSuffix_datagetprefixtermsuffixexampleselfdatar   r   r   __init__   
   z(BingExampleResult.SourceExample.__init__c                 C   
   t | jS Nstrr    r"   r   r   r   __repr__&      
z(BingExampleResult.SourceExample.__repr__r   Nr   r   r   __doc__r$   r)   r+   r   r   r   r   SourceExample       
r0   c                   @   r   )	z$BingExampleResult.DestinationExamplezThe target language exampler   Nc                 C   r   )NtargetPrefixr   
targetTermtargetSuffixr   r!   r   r   r   r$   ,   r%   z-BingExampleResult.DestinationExample.__init__c                 C   r&   r'   r(   r*   r   r   r   r+   3   r,   z-BingExampleResult.DestinationExample.__repr__r-   r.   r   r   r   r   DestinationExample)   r1   r5   r   Nc                 C   s&   || _ | | j | _| | j | _d S r'   )r   r0   sourcer5   destinationr!   r   r   r   r$   6   s   zBingExampleResult.__init__c                 C   r&   r'   )r)   r6   r*   r   r   r   r+   ;   r,   zBingExampleResult.__repr__r-   )r   r   r   r0   r5   r$   r)   r+   r   r   r   r   r      s
    
r   c                   @   s:   e Zd Zd
dedeegef fddZdd Zdd	 ZdS )BingSessionManagerNrequestcaptcha_callbackc                 C   s   || _ ttjtddd| _| j}| }W d    n1 s!w   Y  |d|d|d|d|df\| _	| _
| _| _| _|| _|sQ|   d S d S )	Nz.bing_translatepyF)blockingidiidkeytokencookies)sessionr   ospathjoinHOME_DIR_auth_session_filereadr   igr=   r>   r?   r@   r:   _parse_authorization_data)r"   r9   r:   _auth_session_auth_session_datar   r   r   r$   @   s   
@zBingSessionManager.__init__c                 C   s   | j d}|j}td|}td|}td|}|s"tddt|d d }t|d d }|d | _|d | _	|| _
|| _|j| _d S )	Nzhttps://www.bing.com/translatorz
IG:"(.*?)"zdata-iid="(.*?)"z#params_RichTranslateHelper = (.*?);zMCan't parse the authorization data, try again later or use MicrosoftTranslate)messager      )rA   r   textrefindallr
   jsonloadsrH   r=   r>   r?   r@   )r"   _request_page
_parsed_IG_parsed_IID_parsed_helper_info_normalized_key_normalized_tokenr   r   r   rI   J   s   


z,BingSessionManager._parse_authorization_datac           	   	   C   s   t dD ]`}| j| jdd}| j| jdd}|| | jj|||| jd}|	 }t
|tr7|d|j}n|j}|dkrB|  S |d	krYz|   W n tyW   t|w q|d
krat|t|td	)N   rM   )IGIID
isVerticalT)r?   r>   isAuthv2)paramsr#   r@   
statusCode   i  r   )rangerH   r=   r?   r>   updaterA   postr@   rQ   
isinstancer	   r   status_coderI   	Exceptionr
   )	r"   urlr#   __paramsr   r9   responserf   r   r   r   send]   s,   

zBingSessionManager.sendr'   )	r   r   r   r   r   r)   r$   rI   rl   r   r   r   r   r8   ?   s    
r8   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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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 )!BingTranslatezF
    A Python implementation of Microsoft Bing 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hyr<   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zh-Hanszh-Hantauto-detectr9   c                 C   s   t || _|| _d S r'   )r8   session_managerrA   )r"   r9   r   r   r   r$      s   

zBingTranslate.__init__rN   destination_languagesource_languager   c                 C   s\   | j jd|||dd}z
|d d d }W n ty!   |}Y nw ||d d d d fS )	N!https://www.bing.com/ttranslatev3rN   fromLangr   r#   r   detectedLanguagelanguagetranslationsrN   )r   rl   rg   )r"   rN   r   r   rk   _detected_languager   r   r   
_translate   s   zBingTranslate._translatec                 C   s`   |dkr	|  |}| |||\}}| jjd| ||| dd}|dd |d d D fS )	Nr   zhttps://www.bing.com/texamplev3)rN   fromr   translationr   c                 S   s   g | ]}t |qS r   )r   ).0r    r   r   r   
<listcomp>   s    z*BingTranslate._example.<locals>.<listcomp>r   examples)	_languager   r   rl   lower)r"   rN   r   r   r   r   rk   r   r   r   _example   s
   
"zBingTranslate._examplec                 C   sH   |dkr	|  |}| jjd||dd}|d }|dkr ||fS ||fS )Nr   z"https://www.bing.com/tspellcheckv3)rN   r   r   correctedTextr   )r   r   rl   )r"   rN   r   rk   resultr   r   r   _spellcheck   s   
zBingTranslate._spellcheckc                 C   s(   | j jd|dddd}|d d d S )	Nr   r   r   r   r   r   r   r   )r   rl   )r"   rN   rk   r   r   r   r      s   zBingTranslate._languagec                 C   s|   | j jd|||dd}z	||d d fW S  ty=   z||d d d d d	 fW  Y S  ty<   ||f Y  Y S w w )
Nr   r   r   rM   inputTransliterationr   r   transliterationrN   )r   rl   
IndexErrorrg   )r"   rN   r   r   rk   r   r   r   _transliterate   s   "zBingTranslate._transliteratec                 C   sZ   |dkr	|  |}| jjd|||dd}g }|d d D ]}|d }|| q||fS )Nr   zhttps://www.bing.com/tlookupv3)rN   r   r   r   r   r   displayTarget)r   r   rl   append)r"   rN   r   r   rk   _result_dictionary_dictionary_resultr   r   r   r      s   
zBingTranslate._dictionaryspeedgenderc                 C   s   t ddd)Ni  z:DEPRECATED! Use Microsoft Translate's text to spech method)rf   rL   )r
   )r"   rN   r   r   r   r   r   r   _text_to_speech   s   zBingTranslate._text_to_speechc                 C   s8   t |}|jdkrdS |jdkrdS |jdkrdS |jS )Nautor   zhor   ochr   )r   r<   alpha2)r"   r   r   r   r   r   _language_normalize   s   


z!BingTranslate._language_normalizec                 C   sL   t |dkr
tdS t | dv rtdS t | dkr"tdS t|S )Nr   r   >   zh-cnzh-hansr   zzh-twr   )r)   r   r   )r"   language_coder   r   r   _language_denormalize   s   z#BingTranslate._language_denormalizec                 C   s   dS )NzMicrosoft Bingr   r*   r   r   r   __str__   s   zBingTranslate.__str__N)r   r   r   r/   _supported_languagesr   r$   r)   r   r   r   r   r   r   intr   r   r   r   r   r   r   r   rm      s    	

	rm   )r/   rQ   rB   rO   timesafeIOr   translatepy.exceptionsr   translatepy.languager   translatepy.translators.baser   r   translatepy.utils.requestr   translatepy.utils.annotationsr   r	   rC   abspathdirname__file__rE   r
   r   r8   rm   r   r   r   r   <module>   s     %Q