
    #hnA                     ,    d dl Zd dlmZ  G d d      Zy)    N)
get_loggerc                       e Zd ZdZg dZed        Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zed
        Zed        Zed        Zed        Zed        Zed        Zed        Zy)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                 P    | j                   t               | _         | j                   S )N)loggerr   )clss    \/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dateparser/languages/validation.pyr   zLanguageValidator.get_logger.   s    ::#CJzz    c                    d}|| j                  ||      z  }|sy|| j                  ||      z  }|| j                  ||      z  }|| j                  ||      z  }|| j	                  ||      z  }|| j                  ||      z  }|| j                  ||      z  }|| j                  ||      z  }|| j                  ||      z  }|| j                  ||      z  }|| j                  ||      z  }|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results       r+   validate_infozLanguageValidator.validate_info4   s   #$$[$77#$$[$77#,,[$??#))+t<<#,,[$??#((d;;#&&{D99#%%k488#++K>>#//TBB#**;==r,   c                     d}t        |t              s8| j                         j                  d|t	        |      j
                  d       d}|S )NTzALanguage '%(id)s' info expected to be dict, but have got %(type)sidtypeF)
isinstancedictr   errorrA   __name__r9   s       r+   r.   z LanguageValidator._validate_typeH   sG    $%NN""S"DJ,?,?@ Fr,   c                     d}d|vst        |d   t              r|d   s$| j                         j                  dd|i       d}|S )NTr   z&Language '%(id)s' does not have a namer@   F)rB   strr   rD   r9   s       r+   r/   z LanguageValidator._validate_nameU   sM    ZVc%B$v,NN""84:M Fr,   c                 p    d|vryd}|d   }|dvr%| j                         j                  d||d       d}|S )Nr
   T)TFzQInvalid 'no_word_spacing' value %(value)r for '%(id)s' language: expected boolean)valuer@   F)r   rD   )r*   r:   r;   r<   rI   s        r+   r0   z(LanguageValidator._validate_word_spacinga   sS    D(&'%NN""#{3
 Fr,   c                    d|vryd}|d   }t        |t              s|s1|dk  s|dkD  r%| j                         j                  d||d       d}|S | j                         j                  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?   )rB   intr   rD   rA   rE   )r*   r:   r;   r<   groups        r+   !_validate_sentence_splitter_groupz3LanguageValidator._validate_sentence_splitter_groups   s    $D0./eS!qyEAI &&2$K8
   NN"":"DK,@,@A
 Fr,   c                 0   d|vryd}|d   }t        |t              rA|D ]:  }t        |t              r|r| j                         j	                  d||d       d}< |S | j                         j	                  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?   rB   listrG   r   rD   rA   rE   )r*   r:   r;   r<   skip_tokens_listrS   s         r+   r1   z%LanguageValidator._validate_skip_list   s    <&-) #!%-UNN$**4"'{;
 #F#   NN"";"D1A,B,K,KL
 Fr,   c                 0   d|vryd}|d   }t        |t              rA|D ]:  }t        |t              r|r| j                         j	                  d||d       d}< |S | j                         j	                  d|t        |      j                  d       d}|S )	Nr   Tr   zRInvalid 'pertain' token %(token)r for '%(id)s' language: expected not empty stringrR   FzVInvalid 'pertain' list for '%(id)s' language: expected list type but have got %(type)sr?   rT   )r*   r:   r;   r<   pertain_tokens_listrS   s         r+   r2   z(LanguageValidator._validate_pertain_list   s    D "6l)40, #!%-UNN$**4"'{;
 #F#   NN"";"D1D,E,N,NO
 Fr,   c           	         d}dD ]  }||vs||   s&| j                         j                  d||d       d}2||   }t        |t              rA|D ];  }t        |t              r|r| j                         j                  d|||d       d}= | j                         j                  d||t        |      j                  d	       d} |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)rZ   rS   r@   zgInvalid '%(weekday)s' translations list for '%(id)s' language: expected list type but have got %(type)s)rZ   r@   rA   r   rD   rB   rU   rG   rA   rE   )r*   r:   r;   r<   rZ   translations_listrS   s          r+   r3   z$LanguageValidator._validate_weekdays   s    
 %	G d"$w- &&V '{;  $W+T2. 'E%eS1(..8(/%{S
 "''  &&? $+) $%6 7 @ @ K%	N r,   c           	         d}dD ]  }||vs||   s&| j                         j                  d||d       d}2||   }t        |t              rA|D ];  }t        |t              r|r| j                         j                  d|||d       d}= | j                         j                  d||t        |      j                  d	       d} |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!   rS   r@   zeInvalid '%(month)s' translations list for '%(id)s' language: expected list type but have got %(type)s)r!   r@   rA   r[   )r*   r:   r;   r<   r!   r\   rS   s          r+   r4   z"LanguageValidator._validate_months   s    
 *	E D U &&T#;7  $U+T2. 'E%eS1(..8&+e;O
 "''  &&? "') $%6 7 @ @ U*	X r,   c           	         d}dD ]  }||vs||   s&| j                         j                  d||d       d}2||   }t        |t              rA|D ];  }t        |t              r|r| j                         j                  d|||d       d}= | j                         j                  d||t        |      j                  d	       d} |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)r_   rS   r@   zdInvalid '%(unit)s' translations list for '%(id)s' language: expected list type but have got %(type)s)r_   r@   rA   r[   )r*   r:   r;   r<   r_   r\   rS   s          r+   r5   z!LanguageValidator._validate_units"  s    N 	D4tDz &&S!5  $T
+T2. 'E%eS1(..8%)EM
 "''  &&? !%) $%6 7 @ @ ;	> r,   c           	         d}dD ]  }||vs||   s&| j                         j                  d||d       d}2||   }t        |t              rA|D ];  }t        |t              r|r| j                         j                  d|||d       d}= | j                         j                  d||t        |      j                  d	       d} |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)ra   rS   r@   zdInvalid '%(word)s' translations list for '%(id)s' language: expected list type but have got %(type)s)ra   r@   rA   r[   )r*   r:   r;   r<   ra   r\   rS   s          r+   r6   z'LanguageValidator._validate_other_wordsG  s     	D4tDz &&S!5  $T
+T2. 'E%eS1(..8%)EM
 "''  &&? !%) $%6 7 @ @ ;	> r,   c                    d|vryd}|d   }t        |t              r|D ]}  }t        |t              rt        |      dk7  r&| j	                         j                  d||d       d}Ht        |j                               d   \  }}t        |t              rt        |t        t        f      s&| j	                         j                  d||d       d}t        j                  |      }t        |      }t        j                  d	|      }	|	j                  t        j                  d
|             g }
|	D ]  }|j                         r|
j                  t        |             .||j                  v r|
j                  |j                  |          [| j	                         j                  d|||d       d} t!        t#        t        |
            }t!        t%        d|j&                  dz               }||z
  }||z
  }|dhz  }|rL| j	                         j                  d||dj)                  t#        t        t+        |                  d       d}|s2| j	                         j                  d||dj)                  t#        t        t+        |                  d       d} |S | j	                         j                  d|t-        |      j.                  d       d}|S )Nr	   TrK   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)rc   r@   rO   zZInvalid simplification %(simplification)r for '%(id)s' language: unknown groups %(groups)s, )rc   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?   )rB   rU   rC   lenr   rD   itemsrG   rN   recompilefindallextendisdigitappend
groupindexsetmaprangere   joinsortedrA   rE   )r*   r:   r;   r<   simplifications_listrc   keyrI   compiled_keyreplacementsre   rO   used_groupsexpected_groupsextra_groupsnot_used_groupss                   r+   r7   z+LanguageValidator._validate_simplificationsl  s   D(#$56*D1"6 G#!.$73~;NRS;SNN$**O+9M
 #F!."6"6"89!<
U!#s+:ec3Z3PNN$**\+9M
 #F!zz#E
!zz*e<##BJJ}e$DE) 'E}}c%j1,"9"99l&=&=e&DE(..6 3A&1). "''" "#c6"23"%eA|/B/BQ/F&G"H*_<"1K"?A3&NN$**4 /="-&*iiC9M0N&O #F"NN$**: /="-&*iiC9P0Q&R #FOG#`  NN"";"D1E,F,O,OP
 Fr,   c           
          d}t        |j                               t        | j                        z
  }|rB| j                         j	                  d|dj                  t        t        |            d       d}|S )NTz0Extra keys found for '%(id)s' language: %(keys)srd   )r@   keysF)ro   r}   
VALID_KEYSr   rD   rr   rp   repr)r*   r:   r;   r<   
extra_keyss        r+   r8   z&LanguageValidator._validate_extra_keys  sd    %CNN(;;
NN""B"DIIc$
6K,LM Fr,   )rE   
__module____qualname__r)   r~   classmethodr   r=   r.   r/   r0   rP   r1   r2   r3   r4   r5   r6   r7   r8    r,   r+   r   r      s.   F#JJ  
  & 
 
 	 	  "  2  4  4 * *X / /b " "H " "H X Xt  r,   r   )regexrh   dateparser.utilsr   r   r   r,   r+   <module>r      s     'M Mr,   