o
    WÎµie;  ã                   @   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(   úS/home/ubuntu/.local/lib/python3.10/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   sx   d|vrdS d}|d }t |tƒs|s*|dk s|dkr(|  ¡  d||dœ¡ d}|S |  ¡  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   s|   d|vrdS d}|d }t |tƒr,|D ]}t |tƒr|s)|  ¡  d||dœ¡ d}q|S |  ¡  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   Úskip_tokens_listrJ   r(   r(   r)   r-   i   ó(   
ý€úýz%LanguageValidator._validate_skip_listc                 C   s|   d|vrdS d}|d }t |tƒr,|D ]}t |tƒr|s)|  ¡  d||dœ¡ d}q|S |  ¡  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   Úpertain_tokens_listrJ   r(   r(   r)   r.   ‚   rN   z(LanguageValidator._validate_pertain_listc              	   C   ó¨   d}dD ]M}||vs|| s|   ¡  d||dœ¡ d}q|| }t|tƒr@|D ]}t|tƒr0|s>|   ¡  d|||dœ¡ d}q'q|   ¡  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)rQ   rJ   r;   zgInvalid '%(weekday)s' translations list for '%(id)s' language: expected list type but have got %(type)s)rQ   r;   r<   ©r   r?   r=   rL   rA   r<   r@   )r'   r6   r7   r8   rQ   Útranslations_listrJ   r(   r(   r)   r/   ›   s:   þ

ý€úþýz$LanguageValidator._validate_weekdaysc              	   C   rP   )
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<   rR   )r'   r6   r7   r8   r   rS   rJ   r(   r(   r)   r0   »   s4   þ

ý€úýz"LanguageValidator._validate_monthsc              	   C   rP   )
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)rT   rJ   r;   zdInvalid '%(unit)s' translations list for '%(id)s' language: expected list type but have got %(type)s)rT   r;   r<   rR   )r'   r6   r7   r8   rT   rS   rJ   r(   r(   r)   r1   Ú   ó4   þ

ý€úýz!LanguageValidator._validate_unitsc              	   C   rP   )
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)rV   rJ   r;   zdInvalid '%(word)s' translations list for '%(id)s' language: expected list type but have got %(type)s)rV   r;   r<   rR   )r'   r6   r7   r8   rV   rS   rJ   r(   r(   r)   r2   ø   rU   z'LanguageValidator._validate_other_wordsc                 C   sø  d|vrdS d}|d }t |tƒrê|D ]Ô}t |tƒr t|ƒdkr.|  ¡  d||dœ¡ d}qt| ¡ ƒd \}}t |tƒrDt |ttfƒsR|  ¡  d||dœ¡ d}qt	 
|¡}t|ƒ}t	 d	|¡}	|	 t	 d
|¡¡ g }
|	D ]*}| ¡ r||
 t|ƒ¡ qn||jv rŠ|
 |j| ¡ qn|  ¡  d|||dœ¡ d}qnt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|S |  ¡  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   z‚Invalid 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)rW   r;   rG   zZInvalid simplification %(simplification)r for '%(id)s' language: unknown groups %(groups)sú, )rW   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ÚrangerY   ÚjoinÚsortedr<   r@   )r'   r6   r7   r8   Úsimplifications_listrW   ÚkeyrB   Úcompiled_keyÚreplacementsrY   rG   Úused_groupsÚexpected_groupsÚextra_groupsÚnot_used_groupsr(   r(   r)   r3     sŒ   
ýý

þý
þýþý€úýz+LanguageValidator._validate_simplificationsc              	   C   sH   d}t | ¡ ƒt | jƒ }|r"|  ¡  d|d tt|ƒ¡dœ¡ d}|S )NTz0Extra keys found for '%(id)s' language: %(keys)srX   )r;   ÚkeysF)rc   rp   Ú
VALID_KEYSr   r?   rf   rd   Úrepr)r'   r6   r7   r8   Ú
extra_keysr(   r(   r)   r4   e  s   þz&LanguageValidator._validate_extra_keys)r@   Ú
__module__Ú__qualname__r&   rq   Úclassmethodr   r9   r*   r+   r,   rH   r-   r.   r/   r0   r1   r2   r3   r4   r(   r(   r(   r)   r      s>    



	








Nr   )Úregexr\   Údateparser.utilsr   r   r(   r(   r(   r)   Ú<module>   s    