o
    éT•jÙ  ã                   @   s„   d dl Z d dlZddd„Zdd„ Zdd„ Zdd	„ Ze j e j d
d
¡¡dd… Z	e	fdd„Z
[	dd„ ZG dd„ deƒZdaeƒ  dS )é    Nc                 C   s”   | }|d ur-t |ttfƒrtddt|ƒ› d|›� ƒ‚tttjj	|ƒƒs*t
t|ƒƒ‚|}ntj dd ¡}|d ur=t|ƒ}ntt d¡ƒ}t|ƒad S )Nz!tzpaths must be a list or tuple, znot z: ÚPYTHONTZPATHÚTZPATH)Ú
isinstanceÚstrÚbytesÚ	TypeErrorÚtypeÚallÚmapÚosÚpathÚisabsÚ
ValueErrorÚ_get_invalid_paths_messageÚenvironÚgetÚ_parse_python_tzpathÚ	sysconfigÚget_config_varÚtupler   )ÚtoÚtzpathsÚbase_tzpathÚenv_var© r   ú'/usr/lib/python3.10/zoneinfo/_tzpath.pyÚreset_tzpath   s$   ÿÿ
ÿr   c                 C   sZ   | sdS |   tj¡}tttjj|ƒƒ}t|ƒt|ƒkr+dd l}t	|ƒ}| 
d| t¡ |S )Nr   r   z>Invalid paths specified in PYTHONTZPATH environment variable. )Úsplitr   Úpathsepr   Úfilterr   r   ÚlenÚwarningsr   ÚwarnÚInvalidTZPathWarning)r   Ú
raw_tzpathÚ
new_tzpathr!   Úmsgr   r   r   r      s   ÿýr   c                 C   s(   dd„ | D ƒ}d}||  |¡ }d| S )Nc                 s   s    � | ]}t j |¡s|V  qd S ©N)r   r   r   )Ú.0r   r   r   r   Ú	<genexpr>6   s   € z-_get_invalid_paths_message.<locals>.<genexpr>z
    z@Paths should be absolute but found the following relative paths:)Újoin)r   Úinvalid_pathsÚprefixÚindented_strr   r   r   r   5   s   ÿÿr   c                 C   s8   t | ƒ tD ]}tj || ¡}tj |¡r|  S qdS )z,Retrieve the path to a TZif file from a key.N)Ú_validate_tzfile_pathr   r   r   r*   Úisfile)ÚkeyÚsearch_pathÚfilepathr   r   r   Úfind_tzfileA   s   ÿr3   Ú_éÿÿÿÿc                 C   sv   t j | ¡rtd| › �ƒ‚t j | ¡}t|ƒt| ƒkr"td| › �ƒ‚t j t j ||¡¡}| |¡s9td| › �ƒ‚d S )Nz.ZoneInfo keys may not be absolute paths, got: z6ZoneInfo keys must be normalized relative paths, got: z;ZoneInfo keys must refer to subdirectories of TZPATH, got: )r   r   r   r   Únormpathr    r*   Ú
startswith)r   Ú_baseÚnew_pathÚresolvedr   r   r   r.   O   s   ÿÿ
ÿÿr.   c               	   C   sR  ddl m}  tƒ }z(|  dd¡�}|D ]}| ¡ }|r | |¡ qW d  ƒ n1 s+w   Y  W n ttfy<   Y nw dd„ }tD ]Z}t	j
 |¡sLqCt	 |¡D ]K\}}}||krld|v rc| d¡ d	|v rl| d	¡ |D ]-}	t	j
 ||	¡}
t	j
j|
|d
�}t	jdkr‹| t	jd¡}|r‘||v r’qn||
ƒr›| |¡ qnqQqCd|v r§| d¡ |S )a"  Returns a set containing all available time zones.

    .. caution::

        This may attempt to open a large number of files, since the best way to
        determine if a given file on the time zone search path is to open it
        and check for the "magic string" at the beginning.
    r   )Ú	resourcesÚtzdataÚzonesNc                 S   sV   z t | dƒ�}| d¡dkW  d   ƒ W S 1 sw   Y  W d S  ty*   Y dS w )NÚrbé   s   TZifF)ÚopenÚreadÚ	Exception)ÚfpathÚfr   r   r   Ú	valid_key�   s   (ÿÿz&available_timezones.<locals>.valid_keyÚrightÚposix)Ústartú/Ú
posixrules)Ú	importlibr;   ÚsetÚ	open_textÚstripÚaddÚImportErrorÚFileNotFoundErrorr   r   r   ÚexistsÚwalkÚremover*   ÚrelpathÚsepÚreplace)r;   Úvalid_zonesrD   ÚzonerE   Útz_rootÚrootÚdirnamesÚfilesÚfilerC   r0   r   r   r   Úavailable_timezonesi   sP   	
€ýÿ€ÿ



€õ÷
r_   c                   @   s   e Zd ZdZdS )r#   z?Warning raised if an invalid path is specified in PYTHONTZPATH.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r#   ª   s    r#   r   r'   )r   r   r   r   r   r3   r   r6   r*   Ú
_TEST_PATHr.   r_   ÚRuntimeWarningr#   r   r   r   r   r   Ú<module>   s    
A
