o
    NK&h+                     @   s|   d Z dZddlmZ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mZ ddlmZmZmZ G d	d
 d
eZdS )z
mymemory translator API
z"Copyright (C) 2020 Nidhal Baccouri    )ListOptionalUnionN)BaseTranslator)	BASE_URLSMY_MEMORY_LANGUAGES_TO_CODES)RequestErrorTooManyRequestsTranslationNotFound)is_emptyis_input_validrequest_failedc                
       s   e Zd ZdZ			ddededee f fdd	Z	
ddedede	ee
e f fddZdedefddZde
e de
e fddZ  ZS )MyMemoryTranslatorzD
    class that uses the mymemory translator to translate texts
    autoenNsourcetargetproxiesc                    s4   || _ |dd| _t jtd||dtd dS )zy
        @param source: source language to translate from
        @param target: target language to translate to
        emailNMYMEMORYq)base_urlr   r   payload_key	languages)r   getr   super__init__r   r   )selfr   r   r   kwargs	__class__ K/var/www/html/venv/lib/python3.10/site-packages/deep_translator/mymemory.pyr      s   
zMyMemoryTranslator.__init__Ftext
return_allreturnc           
      K   s   t |ddr| }|  st|r|S | j d| j | jd< | jr)|| j| j< | jr2| j| jd< t	j
| j| j| jd}|jdkrEt t|jdrNt | }|sXt| |  |
d	
d
}|
dg }|rw|sp|S |gt| S |sdd |D }t|}	|s|	S t|S dS dS )a  
        function that uses the mymemory translator to translate a text
        @param text: desired text to translate
        @type text: str
        @param return_all: set to True to return all synonym/similars of the translated text
        @return: str or list
        i  )	max_chars|langpairde)paramsr   i  )status_coderesponseDatatranslatedTextmatchesc                 s   s    | ]}|d  V  qdS )translationNr!   ).0matchr!   r!   r"   	<genexpr>]   s    z/MyMemoryTranslator.translate.<locals>.<genexpr>N)r   strip_same_source_targetr   _source_target_url_paramsr   r   requestsr   	_base_urlr   r+   r	   r   r   jsonr
   closelistnext)
r   r#   r$   r   responsedatar/   all_matchesr.   
next_matchr!   r!   r"   	translate/   s@   

#zMyMemoryTranslator.translatepathc                 K      | j |fi |S )z
        translate directly from file
        @param path: path to the target file
        @type path: str
        @param kwargs: additional args
        @return: str
        )_translate_file)r   rC   r   r!   r!   r"   translate_filea   s   z!MyMemoryTranslator.translate_filebatchc                 K   rD   )z
        translate a list of texts
        @param batch: list of texts you want to translate
        @return: list of translations
        )_translate_batch)r   rG   r   r!   r!   r"   translate_batchk   s   z"MyMemoryTranslator.translate_batch)r   r   N)F)__name__
__module____qualname____doc__strr   dictr   boolr   r   rB   rF   rI   __classcell__r!   r!   r   r"   r      s,    
2"
r   )rM   __copyright__typingr   r   r   r8   deep_translator.baser   deep_translator.constantsr   r   deep_translator.exceptionsr   r	   r
   deep_translator.validater   r   r   r   r!   r!   r!   r"   <module>   s    