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
 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
linguee translator API
z"Copyright (C) 2020 Nidhal Baccouri    )ListOptionalUnionN)BeautifulSoup)requote_uri)BaseTranslator)	BASE_URLSLINGUEE_LANGUAGES_TO_CODES)ElementNotFoundInGetRequestNotValidPayloadRequestErrorTooManyRequestsTranslationNotFound)is_emptyis_input_validrequest_failedc                
       sz   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 )LingueeTranslatorzj
    class that wraps functions, which use the linguee translator under the hood to translate word(s)
    endeNsourcetargetproxiesc              	      s.   || _ t jtd||tdddidd dS )zy
        @param source: source language to translate from
        @param target: target language to translate to
        LINGUEEaclasszdictLink featuredN)base_urlr   r   	languageselement_tagelement_querypayload_key)r   super__init__r   getr	   )selfr   r   r   kwargs	__class__ J/var/www/html/venv/lib/python3.10/site-packages/deep_translator/linguee.pyr!      s   
zLingueeTranslator.__init__Fword
return_allreturnc              	   K   s,  |   st|r
|S t|ddr| j | j d| j d| j d| }t|}tj|| j	d}|j
dkr7t t|j
dr@t t|jd	}|| j| j}|  |sXt|g }|D ])}	z|	d
ddijdd}
W n tyw   d}
Y nw ||	jdd|
d q\|st||r|S |d S dS )a  
        function that uses linguee 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-z/search/?source=z&query=)r   i  )status_codezhtml.parserspanr   placeholderT)strip r   N)_same_source_targetr   r   	_base_url_source_targetr   requestsr"   r   r/   r   r   r   r   textfind_all_element_tag_element_querycloser
   findget_textAttributeErrorappendreplacer   )r#   r)   r*   r$   urlresponsesoupelementsfiltered_elementselpronounr'   r'   r(   	translate4   sB   &

zLingueeTranslator.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   rA   rJ   )r#   rK   r$   translated_wordsr)   r'   r'   r(   translate_wordsf   s   z!LingueeTranslator.translate_words)r   r   N)F)__name__
__module____qualname____doc__strr   dictr!   boolr   r   rJ   rM   __classcell__r'   r'   r%   r(   r      s*    
"2r   )rQ   __copyright__typingr   r   r   r8   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    