o [d@sddlZddlZdddZddZddZdd Zejejd d dd Z e fd d Z [ ddZ Gddde Z daedS)NcCs|}|dur-t|ttfrtddt|d|tttjj |s*t t ||}ntj dd}|dur=t|}nttd}t|adS)Nz!tzpaths must be a list or tuple, znot z: PYTHONTZPATHTZPATH) isinstancestrbytes TypeErrortypeallmapospathisabs ValueError_get_invalid_paths_messageenvironget_parse_python_tzpath sysconfigget_config_vartupler)totzpaths base_tzpathenv_varr'/usr/lib/python3.10/zoneinfo/_tzpath.py reset_tzpaths$   rcCsZ|sdS|tj}tttjj|}t|t|kr+ddl}t |}| d|t |S)Nrrz>Invalid paths specified in PYTHONTZPATH environment variable. ) splitr pathseprfilterr r lenwarningsrwarnInvalidTZPathWarning)r raw_tzpath new_tzpathr!msgrrrrs rcCs(dd|D}d}|||}d|S)Ncss |] }tj|s|VqdSN)r r r ).0r rrr 6sz-_get_invalid_paths_message..z z@Paths should be absolute but found the following relative paths:)join)r invalid_pathsprefix indented_strrrrr5srcCs8t|tD]}tj||}tj|r|SqdS)z,Retrieve the path to a TZif file from a key.N)_validate_tzfile_pathrr r r*isfile)key search_pathfilepathrrr find_tzfileAs r3_cCsvtj|r td|tj|}t|t|kr"td|tjtj||}||s9td|dS)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 rnormpathr r* startswith)r _basenew_pathresolvedrrrr.Os   r.c CsRddlm}t}z(|dd}|D] }|}|r ||qWdn1s+wYWn ttfy<Ynwdd}tD]Z}t j |sLqCt |D]K\}}}||krld|vrc| dd |vrl| d |D]-} t j || } t j j| |d } t jd kr| t jd } | r| |vrqn|| r|| qnqQqCd |vr| 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) resourcestzdatazonesNcSsVz t|d}|ddkWdWS1swYWdSty*YdSw)NrbsTZifF)openread Exception)fpathfrrr valid_keys  ( z&available_timezones..valid_keyrightposix)start/ posixrules) importlibr;set open_textstripadd ImportErrorFileNotFoundErrorrr r existswalkremover*relpathsepreplace) r; valid_zonesrDzonerEtz_rootrootdirnamesfilesfilerCr0rrravailable_timezonesisP         r_c@seZdZdZdS)r#z?Warning raised if an invalid path is specified in PYTHONTZPATH.N)__name__ __module__ __qualname____doc__rrrrr#sr#rr')r rrrrr3r r6r* _TEST_PATHr.r_RuntimeWarningr#rrrrrs   A