
    Rh                         d dl Z d dlZddZddZd Zd Zd Ze j                  j                  e j                  j                  dd            dd Z
e
fd	Z[
d
 Z G d de      Zda ed       y)    Nc                    | }|wt        |t        t        f      rt        ddt	        |       d|z         t        t        t        j                  j                  |            st        t        |            |}nCt        j                  j                  dd       }|t        j                  d      }t!        ||      }t#        |      ay )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	sysconfigget_config_var_parse_python_tzpathtupler   )to
stackleveltzpathsbase_tzpathenv_vars        '/usr/lib/python3.12/zoneinfo/_tzpath.py_reset_tzpathr      s     GgU|,3gr'56 
 3rww}}g./7@AA**..6?..x8G*7J?;F    c                     t        |        y)zReset global TZPATH.N)r   )r   s    r   reset_tzpathr!      s    
 "r   c                 &   | sy| j                  t        j                        }t        t	        t        j
                  j                  |            }t        |      t        |      k7  r*dd l}t        |      }|j                  d|z   t        |       |S )N r   z>Invalid paths specified in PYTHONTZPATH environment variable. r   )splitr   pathsepr   filterr   r   lenwarningsr   warnInvalidTZPathWarning)r   r   
raw_tzpath
new_tzpathr)   msgs         r   r   r   $   s|    rzz*JvbggmmZ89J :#j/)(4L !	 	 	
 r   c                 J    d | D        }d}||j                  |      z   }d|z   S )Nc              3   `   K   | ]&  }t         j                  j                  |      r#| ( y wN)r   r   r   ).0r   s     r   	<genexpr>z-_get_invalid_paths_message.<locals>.<genexpr><   s     IdRWW]]45HTIs   $..z
    z@Paths should be absolute but found the following relative paths:)join)r   invalid_pathsprefixindented_strs       r   r   r   ;   s7    IgIMFFKK66L 	K
	r   c                     t        |        t        D ]E  }t        j                  j	                  ||       }t        j                  j                  |      sC|c S  y)z,Retrieve the path to a TZif file from a key.N)_validate_tzfile_pathr   r   r   r4   isfile)keysearch_pathfilepaths      r   find_tzfiler>   G   sG    # 77<<S177>>(#O
 r   _c                    t         j                  j                  |       rt        d|        t         j                  j	                  |       }t        |      t        |       k7  rt        d|        t         j                  j	                  t         j                  j                  ||            }|j                  |      st        d|        y )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(   r4   
startswith)r   _basenew_pathresolveds       r   r9   r9   U   s    	ww}}T<TFC
 	
 ww%H
8}D	!DTFK
 	
 wwUH =>Hu%I$P
 	
 &r   c                     ddl m}  t               }	 | j                  d      j	                  d      j                  d      5 }|D ]&  }|j                         }|s|j                  |       ( 	 ddd       d }t        D ]  }t        j                  j                  |      s$t        j                  |      D ]  \  }}}||k(  r*d|v r|j                  d       d	|v r|j                  d	       |D ]  }	t        j                  j!                  ||	      }
t        j                  j#                  |
|
      }t        j$                  dk7  r |j'                  t        j$                  d      }|r||v r~ ||
      s|j                  |          d|v r|j                  d       |S # 1 sw Y   :xY w# t        t        f$ r Y Ow xY w)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zonesrNc                     	 t        | d      5 }|j                  d      dk(  cd d d        S # 1 sw Y   y xY w# t        $ r Y yw xY w)Nrb   s   TZifF)openread	Exception)fpathfs     r   	valid_keyz&available_timezones.<locals>.valid_key   sI    	eT" ,avvayG+, , , 		s#   8 ,	8 58 8 	AArightposix)start/
posixrules)	importlibrH   setfilesjoinpathrO   stripaddImportErrorFileNotFoundErrorr   r   r   existswalkremover4   relpathsepreplace)rH   valid_zonesrS   zonerT   tz_rootrootdirnamesr\   filerR   r;   s               r   available_timezonesrn   o   s    $%K__X&//8==cB 	*a *zz|OOD)*	*  )ww~~g&%'WWW%5 	)!D(Ew h&OOG,h&OOG, )T40ggooe7o;66S=++bffc2Cc[0U#OOC()	)	)4 {" 	<(]	* 	*
 *+ s/   /F3 F&F&.F3 &F0+F3 3GGc                       e Zd ZdZy)r+   z?Warning raised if an invalid path is specified in PYTHONTZPATH.N)__name__
__module____qualname____doc__r#   r   r   r+   r+      s    Ir   r+   r#      r$   )NrN   r1   )r   r   r   r!   r   r   r>   r   rB   r4   
_TEST_PATHr9   rn   RuntimeWarningr+   r   r#   r   r   <module>rw      s    	  ..	 WWbggll345cr:
 '1 
. >BJ> J 
  r   