o
    ɷ6i*                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZddlm	Z	m
Z
 eeZee  eejj dd e
D ZdZG dd	 d	eZG d
d dZdS )    N)quote   )	LANGUAGESDEFAULT_SERVICE_URLSc                 C   s"   g | ]}t d | dqS )ztranslate.google.(.*)r   )researchstripgroup).0url r   f/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/google_trans_new/google_trans_new.py
<listcomp>   s   " r   cnc                       s,   e Zd ZdZd fdd	ZdddZ  ZS )google_new_transErrorzAException that uses context to present a meaningful error messageNc                    sb   | dd | _| dd | _|r|| _n| jd ur#| | j| j| _nd | _tt| | j d S )Nttsresponse)popr   rspmsg	infer_msgsuperr   __init__)selfr   kwargs	__class__r   r   r      s   
zgoogle_new_transError.__init__c                 C   sv   d}|d u rd}d |dS |j}|j}d ||}|dkr!d}n|dkr/|js/d	| jj }n|d
kr5d}d ||S )NUnknownzFailed to connectz{}. Probable cause: {}timeoutz{:d} ({}) from TTS APIi  z!Bad token or upstream API changes   z6No audio stream in response. Unsupported language '%s'i  z#Uptream API error. Try again later.)formatstatus_codereason
lang_checkr   lang)r   r   r   causepremisestatusr"   r   r   r   r   !   s   zgoogle_new_transError.infer_msg)N)__name__
__module____qualname____doc__r   r   __classcell__r   r   r   r   r      s    r   c                   @   s6   e Zd ZdZdddZddd	ZdddZdd ZdS )google_translatoru  
    You can use 108 language in target and source,details view LANGUAGES.
    Target language: like 'en'、'zh'、'th'...

    :param url_suffix: The source text(s) to be translated. Batch translation is supported via sequence input.
                       The value should be one of the url_suffix listed in : `DEFAULT_SERVICE_URLS`
    :type url_suffix: UTF-8 :class:`str`; :class:`unicode`; string sequence (list, tuple, iterator, generator)

    :param text: The source text(s) to be translated.
    :type text: UTF-8 :class:`str`; :class:`unicode`;

    :param lang_tgt: The language to translate the source text into.
                     The value should be one of the language codes listed in : `LANGUAGES`
    :type lang_tgt: :class:`str`; :class:`unicode`

    :param lang_src: The language of the source text.
                    The value should be one of the language codes listed in :const:`googletrans.LANGUAGES`
                    If a language is not specified,
                    the system will attempt to identify the source language automatically.
    :type lang_src: :class:`str`; :class:`unicode`

    :param timeout: Timeout Will be used for every request.
    :type timeout: number or a double of numbers

    :param proxies: proxies Will be used for every request.
    :type proxies: class : dict; like: {'http': 'http:171.112.169.47:19934/', 'https': 'https:171.112.169.47:19934/'}

    r      Nc                 C   s<   || _ |tvrt| _n|| _d| j}|d | _|| _d S )Nzhttps://translate.google.{}z)/_/TranslateWebserverUi/data/batchexecute)proxiesURLS_SUFFIXURL_SUFFIX_DEFAULT
url_suffixr    r   r   )r   r2   r   r/   url_baser   r   r   r   Z   s   

zgoogle_translator.__init__autoc                 C   sd   dg}|  ||dgdgg}tj|dd}t||d dggg}tj|dd}dt|}	|	}
|
S )NMkEWBcTr   ),:)
separatorsgenericz	f.req={}&)r   jsondumpsrandomchoicer    r   )r   textlang_srclang_tgtGOOGLE_TTS_RPC	parameterescaped_parameterrpcespaced_rpcfreq_initialfreqr   r   r   _package_rpcd   s   zgoogle_translator._package_rpcFc                 C   sd  zt | }W n   d}Y zt | }W n   d}Y t|}t|dkr&dS t|dkr.dS d| jddd	}| |||}tjd
| j||d}z/| j	d ksWt
| j	tkrZi | _	t }	| j	|	_	|	j| d| jd}
W d    n1 sxw   Y  |
jddD ]}|d}d|v rrz|d }t|}t|}t|d d }t|}|d d }t|dkr"t|d dkr|d d }n|d d }|dkr|W   W S |dkr|d d gW   W S d}|D ]}|d }|| d 7 }q|}|dkr|W   W S |dkr!|d d }|d d d d }|||gW   W S n?t|dkrag }|D ]
}||d  q-|dkrC|W   W S |dkra|d d }|d d d d }|||gW   W S W q tyq } z|d }~ww q|
  W d S  tjjy } z|d }~w tjjy } zt| |
dd }~w tjjy } zt| dd }~ww )Nr4     2Warning: Can only detect less than 5000 charactersr    http://translate.google.{}/nMozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36/application/x-www-form-urlencoded;charset=utf-8Refererz
User-AgentzContent-TypePOSTmethodr   dataheadersFrequestverifyr      
chunk_sizeutf-8r5   ]   r   r.   T r   r   r   )r   strlenr    r2   rH   requestsRequestr   r/   typedictSessionsendpreparer   
iter_linesdecoder:   loadslistr   append	Exceptionraise_for_status
exceptionsConnectTimeout	HTTPErrorr   RequestException)r   r>   r@   r?   	pronouncer$   rU   rG   r   srlinedecoded_line	response_	sentencestranslate_textsentencepronounce_srcpronounce_tgtier   r   r   	translateo   s   









(
zgoogle_translator.translatec              
   C   s  t |}t|dkrtdS t|dkrdS d| jddd}| |}tjd	| j	||d
}z| j
d ks=t| j
tkr@i | _
t }| j
|_
|j| d| jd}W d    n1 s^w   Y  |jddD ]B}|d}d|v rz"|d }t|}t|}t|d d }t|}|d d }	W n	 ty   tw |	t|	  g  W S qi|  W d S  tjjy }
 ztt |
 t| |dd }
~
w tjjy }
 ztt |
 t| dd }
~
ww )NrI   rJ   r   rK   rL   rM   rN   rO   rQ   rR   FrV   rY   rZ   r\   r5   r]   r^   r`   ra   )rb   rc   logdebugr    r2   rH   rd   re   r   r/   rf   rg   rh   ri   rj   r   rk   rl   r:   rm   rn   rp   r   lowerrq   rr   rt   r   ru   )r   r>   rU   rG   r   rw   rx   ry   rz   detect_langr   r   r   r   detect   sd   







zgoogle_translator.detect)r   r.   N)r4   r4   )r4   r4   F)r(   r)   r*   r+   r   rH   r   r   r   r   r   r   r-   <   s    



Xr-   )r:   rd   r<   r   urllib.parser   urllib3loggingconstantr   r   	getLoggerr(   r   
addHandlerNullHandlerdisable_warningsrr   InsecureRequestWarningr0   r1   rp   r   r-   r   r   r   r   <module>   s    
)