o
    id                     @   s   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 dZG dd deejdZG dd deejdZG dd deZdS )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                   @   sF  e Zd ZU deZee ed< ed Z	ee ed< ed Z
ee ed< e	e
 d Zee ed< ed	efd
dZed	eedf fddZed	efddZ			d'dedee deee  dee dee d	dfddZd	efddZd	efddZd(ded	efdd Zd(ded	efd!d"Zd(ded	efd#d$Zd	efd%d&ZdS ))BaseFile _INVALID_PATH_CHARS/_INVALID_FILENAME_CHARSz:*?"<>|	
_INVALID_WIN_PATH_CHARS\_INVALID_WIN_FILENAME_CHARSreturnc                 C      | j S N)_BaseFile__platformself r   X/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pathvalidate/_base.pyplatform      zBaseFile.platform.c                 C   r   r   )_additional_reserved_namesr   r   r   r    reserved_keywords   r"   zBaseFile.reserved_keywordsc                 C   r   r   )_max_lenr   r   r   r    max_len#   r"   zBaseFile.max_lenNr&   fs_encodingadditional_reserved_namesplatform_max_lenr!   c                 C   s|   |d u rt  }t dd |D | _t|| _|d u r|  }|dkr&|| _n|| _t| j|| _|r7|| _d S t	 | _d S )Nc                 s   s    | ]}|  V  qd S r   )upper).0nr   r   r    	<genexpr>1   s    z$BaseFile.__init__.<locals>.<genexpr>r   )
tupler#   r   r   _get_default_max_path_lenr%   min_fs_encodingsysgetfilesystemencoding)r   r&   r'   r(   r)   r!   r   r   r    __init__'   s   

zBaseFile.__init__c                 C      | j tjkS r   )r!   r	   POSIXr   r   r   r    	_is_posixD      zBaseFile._is_posixc                 C   r5   r   )r!   r	   	UNIVERSALr   r   r   r    _is_universalG   r8   zBaseFile._is_universalFinclude_universalc                 C   "   |r| j tjtjfv S | j tjkS r   )r!   r	   r9   LINUXr   r;   r   r   r    	_is_linuxJ      zBaseFile._is_linuxc                 C   r<   r   )r!   r	   r9   WINDOWSr>   r   r   r    _is_windowsP   r@   zBaseFile._is_windowsc                 C   r<   r   )r!   r	   r9   MACOSr>   r   r   r    	_is_macosV   r@   zBaseFile._is_macosc                 C   s0   |   rdS |  rdS |  s|  rdS dS )Ni   i  i   )r?   rB   r7   rD   r   r   r   r    r/   \   s   z"BaseFile._get_default_max_path_lenNNN)F)__name__
__module____qualname__joinr   r   r   str__annotations__r   r   r   propertyr	   r!   r.   r$   intr&   r   r   r   r4   boolr7   r:   r?   rB   rD   r/   r   r   r   r    r      sD   
 


r   c                       s   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	d
Z	e
ejdefddZejdeddfddZdedefddZdedefddZ  ZS )AbstractValidatorNr&   r'   check_reservedr(   r)   r!   r   c                    s    || _ t j|||||d d S )N)r(   r)   r!   )_check_reservedsuperr4   )r   r&   r'   rP   r(   r)   r!   	__class__r   r    r4   j   s   	
zAbstractValidator.__init__c                 C      d S r   r   r   r   r   r    min_len}   s   zAbstractValidator.min_lenvaluec                 C   rU   r   r   r   rW   r   r   r    validate      zAbstractValidator.validatec              	   C   s*   z|  | W dS  ttfy   Y dS w )NFT)rY   	TypeErrorr   rX   r   r   r    is_valid   s   zAbstractValidator.is_validc                 C   s   |  | jv S r   )r*   r$   rX   r   r   r    _is_reserved_keyword   s   z&AbstractValidator._is_reserved_keywordrE   )rF   rG   rH   rM   r   rJ   rN   r   r   r4   rL   abcabstractmethodrV   r
   rY   r\   r]   __classcell__r   r   rS   r    rO   i   s4    
rO   )	metaclassc                       s   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dZejddededefddZ  ZS )AbstractSanitizerN	validatorr&   r'   validate_after_sanitizenull_value_handlerreserved_name_handlerr(   r)   r!   r   c
           
         sN   t  j|||||	d |d u rtj}|| _|d u rtj}|| _|| _|| _	d S )N)r&   r'   r(   r)   r!   )
rR   r4   r   return_null_string_null_value_handlerr   add_trailing_underscore_reserved_name_handler_validate_after_sanitize
_validator)
r   rc   r&   r'   rd   re   rf   r(   r)   r!   rS   r   r    r4      s   
zAbstractSanitizer.__init__r   rW   replacement_textc                 C   rU   r   r   )r   rW   rm   r   r   r    sanitize   rZ   zAbstractSanitizer.sanitize)NNNNN)r   )rF   rG   rH   rO   rM   r   rJ   rN   r   r   r   r4   r^   r_   r
   rn   r`   r   r   rS   r    rb      s:    
	
 "rb   c                       s   e Zd ZU edZeed< edZeed< e	de
fd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dZdeddfddZdddZededefddZ  ZS )BaseValidatorz([^\.]+)_BaseValidator__RE_ROOT_NAMEz^\.{3,}_BaseValidator__RE_REPEAD_DOTr   c                 C   r   r   )_min_lenr   r   r   r    rV      r"   zBaseValidator.min_lenNrV   r&   r'   rP   r(   r)   r!   c                    s<   |dkrt }t|d| _t j||||||d |   d S )Nr   r   )r&   r'   rP   r(   r)   r!   )r   maxrr   rR   r4   _validate_max_len)r   rV   r&   r'   rP   r(   r)   r!   rS   r   r    r4      s   
	zBaseValidator.__init__namec                 C   sV   | j sd S | |}tj|}||fD ]}| |r(td| dd|| jdqd S )N'z' is a reserved nameF)reusable_namereserved_namer!   )rQ   !_BaseValidator__extract_root_nameospathbasenamer]   r   r!   )r   ru   	root_name	base_namer   r   r    _validate_reserved_keywords   s   


z)BaseValidator._validate_reserved_keywordsc                 C   s*   | j dk r	td| j| j krtdd S )Nr   z'max_len must be greater or equal to onez"min_len must be lower than max_len)r&   
ValueErrorrV   r   r   r   r    rt      s
   
zBaseValidator._validate_max_lenr{   c                 C   sF   |dv r|S | j |r|S | jtj|}|d u rdS |dS )N).z..r   r   )rq   searchrp   matchrz   r{   r|   group)clsr{   r   r   r   r    __extract_root_name   s   
z!BaseValidator.__extract_root_namerE   )r   N)rF   rG   rH   recompilerp   r   rK   rq   rL   rM   rV   r   rJ   rN   r   r   r4   r   rt   classmethodry   r`   r   r   rS   r    ro      s:   
 	
	
ro   )__doc__r^   rz   r   r2   collections.abcr   typingr   r   _commonr   r   _constr   r	   _typesr
   r   errorr   r   handlerr   r   r   r   ABCMetarO   rb   ro   r   r   r   r    <module>   s     V)&