o
0i @ s d dl Z d dlZdddZdd Zdd Zdd Ze je jd
d
dd Z e fdd
Z
[ dd ZG dd deZ
dae dS ) Nc C s | }|d ur-t |ttfrtddt| d| tttjj |s*t
t||}ntj
dd }|d ur=t|}nttd}t|ad S )Nz!tzpaths must be a list or tuple, znot z: ZPYTHONTZPATHTZPATH)
isinstancestrbytes TypeErrortypeallmapospathisabs
ValueError_get_invalid_paths_messageenvironget_parse_python_tzpath sysconfigZget_config_vartupler )totzpathsZbase_tzpathenv_var r 7/opt/alt/python310/lib64/python3.10/zoneinfo/_tzpath.pyreset_tzpath s$
r c C sZ | sdS | tj}tttjj|}t|t|kr+dd l}t |}|
d| t |S )Nr r z>Invalid paths specified in PYTHONTZPATH environment variable. )splitr
pathsepr filterr r lenwarningsr warnInvalidTZPathWarning)r Z
raw_tzpathZ
new_tzpathr msgr r r r s r c C s( dd | D }d}|| | }d| S )Nc s s | ]}t j|s|V qd S N)r
r r ).0r r r r 6 s z-_get_invalid_paths_message..z
z@Paths should be absolute but found the following relative paths:)join)r Z
invalid_pathsprefixZindented_strr r r r 5 s r c C s8 t | tD ]}tj|| }tj|r| S qdS )z,Retrieve the path to a TZif file from a key.N)_validate_tzfile_pathr r
r r% isfile)keyZsearch_pathfilepathr r r find_tzfileA s r+ _c C sv t j| r
td| t j| }t|t| kr"td| t jt j||}||s9td| 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 Z_basenew_pathZresolvedr r r r' O s
r' c C sR ddl m} t }z(| dd}|D ]
}| }|r || qW d n1 s+w Y W n ttfy< Y nw dd }tD ]Z}t j
|sLqCt |D ]K\}}}||krld|v rc|
d d |v rl|
d |D ]-} t j
|| }
t j
j|
|d
}t jdkr|t jd}|r||v rqn||
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 ) resourcesZtzdataZzonesNc S sV z t | d}|ddkW d W S 1 sw Y W d S ty* Y dS w )Nrb s TZifF)openread Exception)fpathfr r r valid_key s (z&available_timezones..valid_keyrightposix)start/Z
posixrules) importlibr1 setZ open_textstripaddImportErrorFileNotFoundErrorr r
r existswalkremover% relpathsepreplace)r1 Zvalid_zonesr8 Zzoner9 Ztz_rootrootZdirnamesfilesfiler7 r) r r r available_timezonesi sP
rM c @ s e Zd ZdZdS )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 r+ r r. r% Z
_TEST_PATHr' rM RuntimeWarningr r r r r r s
A