o
    NK&hI                     @   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
 ddlmZ ddlmZmZ dd	lmZmZmZmZmZ dd
lmZmZmZ G dd deZdS )z
pons translator API
z"Copyright (C) 2020 Nidhal Baccouri    )ListOptionalUnionN)BeautifulSoup)requote_uri)BaseTranslator)	BASE_URLSPONS_CODES_TO_LANGUAGES)ElementNotFoundInGetRequestNotValidPayloadRequestErrorTooManyRequestsTranslationNotFound)is_emptyis_input_validrequest_failedc                
       sx   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
e de
e fddZ  ZS )PonsTranslatorz<
    class that uses PONS translator to translate words
    enNsourcetargetproxiesc              
      s6   || _ t jdtdt||ddddid| dS )zy
        @param source: source language to translate from
        @param target: target language to translate to
        PONSNdivclassr   )base_url	languagesr   r   payload_keyelement_tagelement_query )r   super__init__r   getr	   )selfr   r   r   kwargs	__class__r   G/var/www/html/venv/lib/python3.10/site-packages/deep_translator/pons.pyr!      s   
zPonsTranslator.__init__Fword
return_allreturnc                 K   s.  t |ddr|  st|r|S | j | j d| j d| }t|}tj|| j	d}|j
dkr3t t|j
dr<t t|jd}|d	d
di| j| j}|  |sZt|g }|D ]}	g }
|	dD ]	}|
|  qg|d|
 q^|st|dd |D }|st||r|S |d S dS )a  
        function that uses PONS to translate a word
        @param word: word to translate
        @type word: str
        @param return_all: set to True to return all synonym of the translated word
        @type return_all: bool
        @return: str: translated word
        2   )	max_chars-/)r   i  )status_codezhtml.parserr   r   result_lista c                 S   s    g | ]}|rt |d kr|qS )   )len).0r(   r   r   r'   
<listcomp>`   s    z,PonsTranslator.translate.<locals>.<listcomp>r   N)r   _same_source_targetr   	_base_url_source_targetr   requestsr"   r   r/   r   r   r   r   textfindfindAll_element_tag_element_querycloser
   appendget_textjoinr   )r#   r(   r)   r$   urlresponsesoupelementsfiltered_elementseltempe	word_listr   r   r'   	translate5   s@   
zPonsTranslator.translatewordsc                 K   s8   |st |g }|D ]}|| jdd|i| q
|S )z
        translate a batch of words together by providing them in a list
        @param words: list of words you want to translate
        @param kwargs: additional args
        @return: list of translated words
        r(   Nr   )r   rB   rN   )r#   rO   r$   translated_wordsr(   r   r   r'   translate_wordsi   s   zPonsTranslator.translate_words)r   N)F)__name__
__module____qualname____doc__strr   dictr!   boolr   r   rN   rQ   __classcell__r   r   r%   r'   r      s(    
"4r   )rU   __copyright__typingr   r   r   r;   bs4r   requests.utilsr   deep_translator.baser   deep_translator.constantsr   r	   deep_translator.exceptionsr
   r   r   r   r   deep_translator.validater   r   r   r   r   r   r   r'   <module>   s    