
    Kid                        d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZmZ ddlmZmZ ddlmZmZ dd	lmZmZ dd
lmZmZmZ  G d d      Z G d deej6                        Z G d deej6                        Z G d de      Zy)zA
.. codeauthor:: Tsuyoshi Hombashi <tsuyoshi.hombashi@gmail.com>
    N)Sequence)FinalOptional   )normalize_platformunprintable_ascii_chars)DEFAULT_MIN_LENPlatform)PathTypePlatformType)ReservedNameErrorValidationError)NullValueHandlerReservedNameHandlerValidationErrorHandlerc                      e Zd ZU dj                  e      Zee   ed<   edz   Z	ee   ed<   edz   Z
ee   ed<   e	e
z   dz   Zee   ed<   ed	efd
       Zed	eedf   fd       Zed	efd       Z	 	 	 ddedee   deee      dee   dee   d	dfdZd	efdZd	efdZdded	efdZdded	efdZdded	efdZd	efdZy)BaseFile _INVALID_PATH_CHARS/_INVALID_FILENAME_CHARSz:*?"<>|	
_INVALID_WIN_PATH_CHARS\_INVALID_WIN_FILENAME_CHARSreturnc                     | j                   S N)_BaseFile__platformselfs    ^/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/pathvalidate/_base.pyplatformzBaseFile.platform   s        .c                     | j                   S r   )_additional_reserved_namesr   s    r!   reserved_keywordszBaseFile.reserved_keywords   s    ...r#   c                     | j                   S r   )_max_lenr   s    r!   max_lenzBaseFile.max_len#       }}r#   Nr)   fs_encodingadditional_reserved_namesplatform_max_lenr"   c                 2   |
t               }t        d |D              | _        t        |      | _        || j	                         }|dk  r|| _        n|| _        t        | j
                  |      | _        |r|| _        y t        j                         | _        y )Nc              3   <   K   | ]  }|j                           y wr   )upper).0ns     r!   	<genexpr>z$BaseFile.__init__.<locals>.<genexpr>1   s     /]a	/]s   r   )
tupler%   r   r   _get_default_max_path_lenr(   min_fs_encodingsysgetfilesystemencoding)r    r)   r+   r,   r-   r"   s         r!   __init__zBaseFile.__init__'   s     %,(-%*//]C\/]*]',X6##==?a<,DM#DMDMM+;< +D # 9 9 ;Dr#   c                 <    | j                   t        j                  k(  S r   )r"   r
   POSIXr   s    r!   	_is_posixzBaseFile._is_posixD   s    }}..r#   c                 <    | j                   t        j                  k(  S r   )r"   r
   	UNIVERSALr   s    r!   _is_universalzBaseFile._is_universalG   s    }} 2 222r#   include_universalc                     |r,| j                   t        j                  t        j                  fv S | j                   t        j                  k(  S r   )r"   r
   r?   LINUXr    rA   s     r!   	_is_linuxzBaseFile._is_linuxJ   6    ==X%7%7$HHH}}..r#   c                     |r,| j                   t        j                  t        j                  fv S | j                   t        j                  k(  S r   )r"   r
   r?   WINDOWSrD   s     r!   _is_windowszBaseFile._is_windowsP   s:    ==X%7%79I9I$JJJ}} 0 000r#   c                     |r,| j                   t        j                  t        j                  fv S | j                   t        j                  k(  S r   )r"   r
   r?   MACOSrD   s     r!   	_is_macoszBaseFile._is_macosV   rF   r#   c                     | j                         ry| j                         ry| j                         s| j                         ryy)Ni   i  i   )rE   rI   r=   rL   r   s    r!   r5   z"BaseFile._get_default_max_path_len\   s7    >>>>t~~/r#   NNN)F)__name__
__module____qualname__joinr   r   r   str__annotations__r   r   r   propertyr
   r"   r4   r&   intr)   r   r   r   r:   boolr=   r@   rE   rI   rL   r5    r#   r!   r   r      sy   &(gg.E&FsF*=*CU3ZC*=@W*WU3ZW"99D@  s  (   /5c? / /    >B*.+/<< c]< $,HSM#:	<
 #3-< <(< 
<:/4 /3t 3/4 /D /1T 1d 1/4 /D /
3 
r#   r   c                        e Zd Z	 	 	 ddedee   dedeee      dee   dee   ddf fd	Z	e
ej                  defd
              Zej                  deddfd       ZdedefdZdedefdZ xZS )AbstractValidatorNr)   r+   check_reservedr,   r-   r"   r   c                 <    || _         t        | 	  |||||       y )N)r,   r-   r"   )_check_reservedsuperr:   )r    r)   r+   r[   r,   r-   r"   	__class__s          r!   r:   zAbstractValidator.__init__j   s.      .&?- 	 	
r#   c                      y r   rX   r   s    r!   min_lenzAbstractValidator.min_len}   s     	r#   valuec                      y r   rX   r    rb   s     r!   validatezAbstractValidator.validate       r#   c                 R    	 | j                  |       y# t        t        f$ r Y yw xY w)NFT)re   	TypeErrorr   rd   s     r!   is_validzAbstractValidator.is_valid   s1    	MM%   ?+ 		s    &&c                 :    |j                         | j                  v S r   )r0   r&   rd   s     r!   _is_reserved_keywordz&AbstractValidator._is_reserved_keyword   s    {{} 6 666r#   rN   )rO   rP   rQ   rV   r   rS   rW   r   r   r:   rU   abcabstractmethodra   r   re   ri   rk   __classcell__r_   s   @r!   rZ   rZ   i   s     >B*.+/

 c]
 	

 $,HSM#:
 #3-
 <(
 

&     	h 4  h 4 7# 7$ 7r#   rZ   )	metaclassc                        e Zd Z	 	 	 	 	 ddededee   dedee   dee   dee	e      d	ee   d
ee
   ddf fdZej                  ddededefd       Z xZS )AbstractSanitizerN	validatorr)   r+   validate_after_sanitizenull_value_handlerreserved_name_handlerr,   r-   r"   r   c
                     t         
|   |||||	       |t        j                  }|| _        |t
        j                  }|| _        || _        || _	        y )N)r)   r+   r,   r-   r"   )
r^   r:   r   return_null_string_null_value_handlerr   add_trailing_underscore_reserved_name_handler_validate_after_sanitize
_validator)r    rs   r)   r+   rt   ru   rv   r,   r-   r"   r_   s             r!   r:   zAbstractSanitizer.__init__   sk     	#&?- 	 	
 %!1!D!D#5  ($7$O$O!&;#(?%#r#   rb   replacement_textc                      y r   rX   )r    rb   r~   s      r!   sanitizezAbstractSanitizer.sanitize   rf   r#   )NNNNN)r   )rO   rP   rQ   rZ   rV   r   rS   rW   r   r   r   r:   rl   rm   r   r   rn   ro   s   @r!   rr   rr      s     @DBF=A*.+/$$$ $ c]	$
 "&$ %%;<$  ((>?$ $,HSM#:$ #3-$ <($ 
$@ 	h # x  r#   rr   c                       e Zd ZU  ej                  d      Zeed<    ej                  d      Zeed<   e	de
fd       Z	 	 	 dde
d	e
d
ee   dedeee      dee
   dee   ddf fdZdeddfdZddZededefd       Z xZS )BaseValidatorz([^\.]+)_BaseValidator__RE_ROOT_NAMEz^\.{3,}_BaseValidator__RE_REPEAD_DOTr   c                     | j                   S r   )_min_lenr   s    r!   ra   zBaseValidator.min_len   r*   r#   Nra   r)   r+   r[   r,   r-   r"   c                     |dk  rt         }t        |d      | _        t        |   ||||||       | j                          y )Nr   r   )r)   r+   r[   r,   r-   r"   )r	   maxr   r^   r:   _validate_max_len)	r    ra   r)   r+   r[   r,   r-   r"   r_   s	           r!   r:   zBaseValidator.__init__   sP     a<%GGQ#)&?- 	 	
 	 r#   namec                     | j                   sy | j                  |      }t        j                  j	                  |      }||fD ]0  }| j                  |      st        d| dd|| j                         y )N'z' is a reserved nameF)reusable_namereserved_namer"   )r]   !_BaseValidator__extract_root_nameospathbasenamerk   r   r"   )r    r   	root_name	base_names       r!   _validate_reserved_keywordsz)BaseValidator._validate_reserved_keywords   s{    ##,,T2	GG$$T*		* 	D((.'	{"67"'"+!]]	 	r#   c                     | j                   dk  rt        d      | j                  | j                   kD  rt        d      y )Nr   z'max_len must be greater or equal to onez"min_len must be lower than max_len)r)   
ValueErrorra   r   s    r!   r   zBaseValidator._validate_max_len   s;    <<!FGG<<$,,&ABB 'r#   r   c                     |dv r|S | j                   j                  |      r|S | j                  j                  t        j
                  j                  |            }|y|j                  d      S )N).z..r   r   )r   searchr   matchr   r   r   group)clsr   r   s      r!   __extract_root_namez!BaseValidator.__extract_root_name   sc    ;K%%d+K""(()9)9$)?@={{1~r#   rN   )r   N)rO   rP   rQ   recompiler   r   rT   r   rU   rV   ra   r   rS   rW   r   r   r:   r   r   classmethodr   rn   ro   s   @r!   r   r      s    &BJJ{3NE3'RZZ
3OU3   >B*.+/!! ! c]	!
 ! $,HSM#:! #3-! <(! 
!2   C s s  r#   r   )__doc__rl   r   r   r8   collections.abcr   typingr   r   _commonr   r   _constr	   r
   _typesr   r   errorr   r   handlerr   r   r   r   ABCMetarZ   rr   r   rX   r#   r!   <module>r      sr     	 	 
 $ " @ - * 5 R RS Sl&7CKK &7R#CKK #LD% Dr#   