a
    xde;                     @   s&   d dl Zd dlmZ G dd dZdS )    N)
get_loggerc                   @   s   e Zd ZdZg dZedd Zedd Zedd Zed	d
 Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd ZdS )LanguageValidatorN)"nameskippertainsimplificationsno_word_spacingagoinmondaytuesday	wednesdaythursdayfridaysaturdaysundayjanuaryfebruarymarchaprilmayjunejulyaugust	septemberoctobernovemberdecemberyearmonthweekdayhourminutesecondsentence_splitter_groupc                 C   s   | j d u rt | _ | j S )N)loggerr   )cls r(   W/var/www/html/Ranjet/env/lib/python3.9/site-packages/dateparser/languages/validation.pyr      s    
zLanguageValidator.get_loggerc                 C   s   d}||  ||M }|sdS || ||M }|| ||M }|| ||M }|| ||M }|| ||M }|| ||M }|| ||M }|| ||M }|| 	||M }|| 
||M }|S )NTF)_validate_type_validate_name_validate_word_spacing_validate_skip_list_validate_pertain_list_validate_weekdays_validate_months_validate_units_validate_other_words_validate_simplifications_validate_extra_keysr'   language_idinforesultr(   r(   r)   validate_info   s    zLanguageValidator.validate_infoc                 C   s2   d}t |ts.|  d|t|jd d}|S )NTzALanguage '%(id)s' info expected to be dict, but have got %(type)sidtypeF)
isinstancedictr   errorr<   __name__r5   r(   r(   r)   r*   *   s    
z LanguageValidator._validate_typec                 C   s>   d}d|vs"t |d tr"|d s:|  dd|i d}|S )NTr   z&Language '%(id)s' does not have a namer;   F)r=   strr   r?   r5   r(   r(   r)   r+   6   s
    z LanguageValidator._validate_namec                 C   s>   d|vrdS d}|d }|dvr:|   d||d d}|S )Nr   T)TFzQInvalid 'no_word_spacing' value %(value)r for '%(id)s' language: expected boolean)valuer;   F)r   r?   )r'   r6   r7   r8   rB   r(   r(   r)   r,   @   s    z(LanguageValidator._validate_word_spacingc                 C   sv   d|vrdS d}|d }t |ts&|sR|dk s6|dkrr|  d||d d}n |  d|t|jd	 d}|S )
Nr%   T      zfInvalid 'sentence_splitter_group' number %(number)r for '%(id)s' language: expected number from 1 to 6)numberr;   Fz`Invalid 'sentence_splitter_group' for '%(id)s' language: expected int type but have got %(type)sr:   )r=   intr   r?   r<   r@   )r'   r6   r7   r8   groupr(   r(   r)   !_validate_sentence_splitter_groupP   s"    z3LanguageValidator._validate_sentence_splitter_groupc                 C   sz   d|vrdS d}|d }t |trV|D ],}t |tr8|s&|  d||d d}q&n |  d|t|jd d}|S )Nr   TzOInvalid 'skip' token %(token)r for '%(id)s' language: expected not empty stringtokenr;   FzSInvalid 'skip' list for '%(id)s' language: expected list type but have got %(type)sr:   r=   listrA   r   r?   r<   r@   )r'   r6   r7   r8   Zskip_tokens_listrJ   r(   r(   r)   r-   i   s$    
z%LanguageValidator._validate_skip_listc                 C   sz   d|vrdS d}|d }t |trV|D ],}t |tr8|s&|  d||d d}q&n |  d|t|jd d}|S )	Nr   Tr   zRInvalid 'pertain' token %(token)r for '%(id)s' language: expected not empty stringrI   FzVInvalid 'pertain' list for '%(id)s' language: expected list type but have got %(type)sr:   rK   )r'   r6   r7   r8   Zpertain_tokens_listrJ   r(   r(   r)   r.      s$    
z(LanguageValidator._validate_pertain_listc              	   C   s   d}dD ]}||vs|| s8|   d||d d}q|| }t|tr|D ].}t|tr`|sN|   d|||d d}qNq|   d||t|jd	 d}q|S )
NT)r   r   r   r   r   r   r   z@No translations for '%(weekday)s' provided for '%(id)s' language)weekdayr;   Fz\Invalid '%(weekday)s' translation %(token)r for '%(id)s' language: expected not empty string)rM   rJ   r;   zgInvalid '%(weekday)s' translations list for '%(id)s' language: expected list type but have got %(type)s)rM   r;   r<   r   r?   r=   rL   rA   r<   r@   )r'   r6   r7   r8   rM   translations_listrJ   r(   r(   r)   r/      s6    

z$LanguageValidator._validate_weekdaysc              	   C   s   d}dD ]}||vs|| s8|   d||d d}q|| }t|tr|D ].}t|tr`|sN|   d|||d d}qNq|   d||t|jd	 d}q|S )
NT)r   r   r   r   r   r   r   r   r   r   r   r   z>No translations for '%(month)s' provided for '%(id)s' language)r   r;   FzZInvalid '%(month)s' translation %(token)r for '%(id)s' language: expected not empty string)r   rJ   r;   zeInvalid '%(month)s' translations list for '%(id)s' language: expected list type but have got %(type)s)r   r;   r<   rN   )r'   r6   r7   r8   r   rO   rJ   r(   r(   r)   r0      s0    

z"LanguageValidator._validate_monthsc              	   C   s   d}dD ]}||vs|| s8|   d||d d}q|| }t|tr|D ].}t|tr`|sN|   d|||d d}qNq|   d||t|jd	 d}q|S )
NT)r   r   r    r!   r"   r#   r$   z=No translations for '%(unit)s' provided for '%(id)s' language)unitr;   FzYInvalid '%(unit)s' translation %(token)r for '%(id)s' language: expected not empty string)rP   rJ   r;   zdInvalid '%(unit)s' translations list for '%(id)s' language: expected list type but have got %(type)s)rP   r;   r<   rN   )r'   r6   r7   r8   rP   rO   rJ   r(   r(   r)   r1      s0    

z!LanguageValidator._validate_unitsc              	   C   s   d}dD ]}||vs|| s8|   d||d d}q|| }t|tr|D ].}t|tr`|sN|   d|||d d}qNq|   d||t|jd	 d}q|S )
NT)r	   z=No translations for '%(word)s' provided for '%(id)s' language)wordr;   FzYInvalid '%(word)s' translation %(token)r for '%(id)s' language: expected not empty string)rQ   rJ   r;   zdInvalid '%(word)s' translations list for '%(id)s' language: expected list type but have got %(type)s)rQ   r;   r<   rN   )r'   r6   r7   r8   rQ   rO   rJ   r(   r(   r)   r2      s0    

z'LanguageValidator._validate_other_wordsc                 C   s  d|vrdS d}|d }t |tr|D ]}t |trDt|dkr`|  d||d d}q(t| d \}}t |trt |ttfs|  d||d d}q(t	
|}t|}t	d	|}	|	t	d
| g }
|	D ]V}| r|
t| q||jv r|
|j|  q|  d|||d d}qttt|
}ttd|jd }|| }|| }|dh8 }|r|  d||dttt|d d}|r(|  d||dttt|d d}q(n |  d|t|jd d}|S )Nr   TrC   zuInvalid simplification %(simplification)r for '%(id)s' language: eash simplification suppose to be one-to-one mapping)simplificationr;   Fr   zInvalid simplification %(simplification)r for '%(id)s' language: each simplification suppose to be string-to-string-or-int mappingz\\(\d+)z
\\g<(.+?)>zXInvalid simplification %(simplification)r for '%(id)s' language: unknown group %(group)s)rR   r;   rG   zZInvalid simplification %(simplification)r for '%(id)s' language: unknown groups %(groups)s, )rR   r;   groupsz`Invalid simplification %(simplification)r for '%(id)s' language: groups %(groups)s were not usedz^Invalid 'simplifications' list for '%(id)s' language: expected list type but have got %(type)sr:   )r=   rL   r>   lenr   r?   itemsrA   rF   recompilefindallextendisdigitappend
groupindexsetmaprangerT   joinsortedr<   r@   )r'   r6   r7   r8   Zsimplifications_listrR   keyrB   Zcompiled_keyreplacementsrT   rG   Zused_groupsZexpected_groupsextra_groupsZnot_used_groupsr(   r(   r)   r3     s    


z+LanguageValidator._validate_simplificationsc              	   C   sH   d}t | t | j }|rD|  d|dtt|d d}|S )NTz0Extra keys found for '%(id)s' language: %(keys)srS   )r;   keysF)r^   rf   
VALID_KEYSr   r?   ra   r_   repr)r'   r6   r7   r8   Z
extra_keysr(   r(   r)   r4   e  s    z&LanguageValidator._validate_extra_keys)r@   
__module____qualname__r&   rg   classmethodr   r9   r*   r+   r,   rH   r-   r.   r/   r0   r1   r2   r3   r4   r(   r(   r(   r)   r      s<   



	








Nr   )regexrW   Zdateparser.utilsr   r   r(   r(   r(   r)   <module>   s   