
    k7id                        S r SSKrSSKrSSKrSSKrSSKJr  SSKJrJ	r	  SSK
JrJr  SSKJrJr  SSKJrJr  SS	KJrJr  SS
KJrJrJr   " S S5      r " S S\\R6                  S9r " S S\\R6                  S9r " S S\5      rg)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                      \ rS rSr% SR	                  \5      r\\   \	S'   \S-   r
\\   \	S'   \S-   r\\   \	S'   \
\-   S-   r\\   \	S	'   \S
\4S j5       r\S
\\S4   4S j5       r\S
\4S j5       r   SS\S\\   S\\\      S\\   S\\   S
S4S jjrS
\4S jrS
\4S jrSS\S
\4S jjrSS\S
\4S jjrSS\S
\4S jjrS
\4S jrSrg) BaseFile    _INVALID_PATH_CHARS/_INVALID_FILENAME_CHARSz:*?"<>|	
_INVALID_WIN_PATH_CHARS\_INVALID_WIN_FILENAME_CHARSreturnc                     U R                   $ N)_BaseFile__platformselfs    L/home/james-whalen/.local/lib/python3.13/site-packages/pathvalidate/_base.pyplatformBaseFile.platform   s        .c                     U R                   $ r   )_additional_reserved_namesr    s    r"   reserved_keywordsBaseFile.reserved_keywords   s    ...r%   c                     U R                   $ r   )_max_lenr    s    r"   max_lenBaseFile.max_len#       }}r%   Nr,   fs_encodingadditional_reserved_namesplatform_max_lenr#   c                 >   Uc
  [        5       n[        S U 5       5      U l        [        U5      U l        Uc  U R	                  5       nUS::  a  X@l        OXl        [        U R
                  U5      U l        U(       a  X l        g [        R                  " 5       U l        g )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr   )upper).0ns     r"   	<genexpr>$BaseFile.__init__.<locals>.<genexpr>1   s     /]C\a		C\s   r   )
tupler'   r   r   _get_default_max_path_lenr+   min_fs_encodingsysgetfilesystemencoding)r!   r,   r/   r0   r1   r#   s         r"   __init__BaseFile.__init__'   s     %,(-%*//]C\/]*]',X6##==?a<,M#MDMM+;< + # 9 9 ;Dr%   c                 <    U R                   [        R                  :H  $ r   )r#   r
   POSIXr    s    r"   	_is_posixBaseFile._is_posixD   s    }}..r%   c                 <    U R                   [        R                  :H  $ r   )r#   r
   	UNIVERSALr    s    r"   _is_universalBaseFile._is_universalG   s    }} 2 222r%   include_universalc                     U(       a-  U R                   [        R                  [        R                  4;   $ U R                   [        R                  :H  $ r   )r#   r
   rF   LINUXr!   rI   s     r"   	_is_linuxBaseFile._is_linuxJ   6    ==X%7%7$HHH}}..r%   c                     U(       a-  U R                   [        R                  [        R                  4;   $ U R                   [        R                  :H  $ r   )r#   r
   rF   WINDOWSrL   s     r"   _is_windowsBaseFile._is_windowsP   s:    ==X%7%79I9I$JJJ}} 0 000r%   c                     U(       a-  U R                   [        R                  [        R                  4;   $ U R                   [        R                  :H  $ r   )r#   r
   rF   MACOSrL   s     r"   	_is_macosBaseFile._is_macosV   rO   r%   c                     U R                  5       (       a  gU R                  5       (       a  gU R                  5       (       d  U R                  5       (       a  gg)Ni   i  i   )rM   rR   rC   rV   r    s    r"   r:   "BaseFile._get_default_max_path_len\   sC    >>>>t~~//r%   )
__platformr'   r<   r+   NNN)F) __name__
__module____qualname____firstlineno__joinr   r   r   str__annotations__r   r   r   propertyr
   r#   r9   r(   intr,   r   r   r   r?   boolrC   rG   rM   rR   rV   r:   __static_attributes__ 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                      ^  \ rS rSr   SS\S\\   S\S\\\      S\\   S\\	   S	S4U 4S
 jjjr
\\R                  S	\4S j5       5       r\R                  S\S	S4S j5       rS\S	\4S jrS\S	\4S jrSrU =r$ )AbstractValidatori   Nr,   r/   check_reservedr0   r1   r#   r   c                 4   > X0l         [        TU ]	  UUUUUS9  g )N)r0   r1   r#   )_check_reservedsuperr?   )r!   r,   r/   rk   r0   r1   r#   	__class__s          r"   r?   AbstractValidator.__init__j   s,      .&?- 	 	
r%   c                     g r   rg   r    s    r"   min_lenAbstractValidator.min_len}   s     	r%   valuec                     g r   rg   r!   rt   s     r"   validateAbstractValidator.validate       r%   c                 T     U R                  U5        g! [        [        4 a     gf = f)NFT)rw   	TypeErrorr   rv   s     r"   is_validAbstractValidator.is_valid   s1    	MM%   ?+ 		s    ''c                 <    UR                  5       U R                  ;   $ r   )r4   r(   rv   s     r"   _is_reserved_keyword&AbstractValidator._is_reserved_keyword   s    {{} 6 666r%   )rm   r[   )r\   r]   r^   r_   rd   r   ra   re   r   r   r?   rc   abcabstractmethodrr   r   rw   r|   r   rf   __classcell__ro   s   @r"   ri   ri   i   s     >B*.+/

 c]
 	

 $,HSM#:
 #3-
 <(
 

 
&     	h 4  h 4 7# 7$ 7 7r%   ri   )	metaclassc                      ^  \ rS rSr     SS\S\S\\   S\S\\	   S\\	   S	\\
\      S
\\   S\\   SS4U 4S jjjr\R                  SS\S\S\4S jj5       rSrU =r$ )AbstractSanitizer   N	validatorr,   r/   validate_after_sanitizenull_value_handlerreserved_name_handlerr0   r1   r#   r   c
                    > [         T
U ]  UUUUU	S9  Uc  [        R                  nXPl        Uc  [
        R                  nX`l        X@l        Xl	        g )N)r,   r/   r0   r1   r#   )
rn   r?   r   return_null_string_null_value_handlerr   add_trailing_underscore_reserved_name_handler_validate_after_sanitize
_validator)r!   r   r,   r/   r   r   r   r0   r1   r#   ro   s             r"   r?   AbstractSanitizer.__init__   sc     	#&?- 	 	
 %!1!D!D#5  ($7$O$O!&;#(?%#r%   rt   replacement_textc                     g r   rg   )r!   rt   r   s      r"   sanitizeAbstractSanitizer.sanitize   ry   r%   )r   r   r   r   )NNNNN)r   )r\   r]   r^   r_   ri   rd   r   ra   re   r   r   r   r?   r   r   r   r   rf   r   r   s   @r"   r   r      s     @DBF=A*.+/$$$ $ c]	$
 "&$ %%;<$  ((>?$ $,HSM#:$ #3-$ <($ 
$ $@ 	h # x  r%   r   c                   "  ^  \ rS rSr% \R
                  " S5      r\\S'   \R
                  " S5      r	\\S'   \
S\4S j5       r   SS	\S
\S\\   S\S\\\      S\\   S\\   SS4U 4S jjjrS\SS4S jrSS jr\S\S\4S j5       rSrU =r$ )BaseValidator   z([^\.]+)_BaseValidator__RE_ROOT_NAMEz^\.{3,}_BaseValidator__RE_REPEAD_DOTr   c                     U R                   $ r   _min_lenr    s    r"   rr   BaseValidator.min_len   r.   r%   Nrr   r,   r/   rk   r0   r1   r#   c           	         > US::  a  [         n[        US5      U l        [        TU ]  UUUUUUS9  U R                  5         g )Nr   r   )r,   r/   rk   r0   r1   r#   )r	   maxr   rn   r?   _validate_max_len)	r!   rr   r,   r/   rk   r0   r1   r#   ro   s	           r"   r?   BaseValidator.__init__   sP     a<%GGQ#)&?- 	 	
 	 r%   namec                     U R                   (       d  g U R                  U5      n[        R                  R	                  U5      nX#4 H3  nU R                  U5      (       d  M  [        SU S3SUU R                  S9e   g )N'z' is a reserved nameF)reusable_namereserved_namer#   )rm   !_BaseValidator__extract_root_nameospathbasenamer   r   r#   )r!   r   	root_name	base_names       r"   _validate_reserved_keywords)BaseValidator._validate_reserved_keywords   sw    ##,,T2	GG$$T*	*D((..'	{"67"'"+!]]	  +r%   c                     U R                   S:  a  [        S5      eU R                  U R                   :  a  [        S5      eg )Nr   z'max_len must be greater or equal to onez"min_len must be lower than max_len)r,   
ValueErrorrr   r    s    r"   r   BaseValidator._validate_max_len   s;    <<!FGG<<$,,&ABB 'r%   r   c                     US;   a  U$ U R                   R                  U5      (       a  U$ U R                  R                  [        R
                  R                  U5      5      nUc  gUR                  S5      $ )N).z..r   r   )r   searchr   matchr   r   r   group)clsr   r   s      r"   __extract_root_name!BaseValidator.__extract_root_name   sf    ;K%%d++K""(()9)9$)?@={{1~r%   r   r[   )r   N)r\   r]   r^   r_   recompiler   r   rb   r   rc   rd   rr   r   ra   re   r   r   r?   r   r   classmethodr   rf   r   r   s   @r"   r   r      s    JJ{3NE3ZZ
3OU3   >B*.+/!! ! c]	!
 ! $,HSM#:! #3-! <(! 
! !2   C s s  r%   r   )__doc__r   r   r   r=   collections.abcr   typingr   r   _commonr   r   _constr	   r
   _typesr   r   errorr   r   handlerr   r   r   r   ABCMetari   r   r   rg   r%   r"   <module>r      sr     	 	 
 $ " @ - * 5 R RS Sl&7CKK &7R#CKK #LD% Dr%   