a
    ze#                    @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZmZmZmZ d dlmZ ddlmZ ddlmZmZmZ d dlmZ ed	Z e! \Z"Z#zej$$d
 dZ%W n ej$j&y   dZ%Y n0 da'da(da)e
*e+j,d Z-e-d Z.ed Z/eddZ0dd Z1dd Z2G dd dZ3G dd dZ4G dd de3eZ5G dd de5Z6G dd de4e5Z7G dd de4e6Z8G d d! d!e5Z9G d"d# d#e9Z:G d$d% d%e5Z;G d&d' d'e;Z<e=e% d(G d)d* d*e5Z>e=e% d(G d+d, d,e>Z?G d-d. d.eZ@G d/d0 d0e@ZAG d1d2 d2eZBG d3d4 d4eBZCG d5d6 d6e3eZDG d7d8 d8eDZEG d9d: d:e3eZFG d;d< d<eFZGG d=d> d>eZHG d?d@ d@eHZIG dAdB dBe3eZJG dCdD dDeJZKG dEdF dFeZLG dGdH dHeLZMG dIdJ dJejNZOejPddKG dLdM dMZQejPddKG dNdO dOZRG dPdQ dQZSG dRdS dSZTdS )T    )annotationsN)datedatetimetime	timedeltatimezone)cached_property   )_support)OS_ENV_LOCKTZPATH_TEST_LOCKZoneInfoTestBase)import_modulelzmaZtzdataTFdatazzoneinfo_data.jsonhoursc                   C  s6   t tjddatttd atttd ddad S )NZzoneinfo)prefixZv2v1T)r   )	pathlibPathtempfilemkdtempTEMP_DIRZoneInfoDataZONEINFO_JSONZONEINFO_DATAZONEINFO_DATA_V1 r   r   6/usr/lib/python3.9/test/test_zoneinfo/test_zoneinfo.pysetUpModule,   s    r    c                   C  s   t t d S N)shutilrmtreer   r   r   r   r   tearDownModule6   s    r$   c                      s4   e Zd Zedd Zedd Z fddZ  ZS )TzPathUserMixinc                 C  s   d S r!   r   selfr   r   r   tzpathD   s    zTzPathUserMixin.tzpathc                 C  s   dS )NTr   r&   r   r   r   block_tzdataH   s    zTzPathUserMixin.block_tzdatac                   s`   t  :}|| j| j| jtd | | j	 W d    n1 sH0    Y  t
   d S )N)r)   lock)
contextlib	ExitStackenter_contexttzpath_contextr(   r)   r   
addCleanuppop_allclosesupersetUpr'   stack	__class__r   r   r3   L   s    
.zTzPathUserMixin.setUp)__name__
__module____qualname__propertyr(   r)   r3   __classcell__r   r   r6   r   r%   :   s
   


r%   c                      s,   e Zd ZG dd deZ fddZ  ZS )DatetimeSubclassMixinc                   @  s   e Zd Zedd ZdS )z&DatetimeSubclassMixin.DatetimeSubclassc                 C  s,   | |j |j|j|j|j|j|j|j|jd	S )N)tzinfofold)	yearmonthdayhourminutesecondmicrosecondr>   r?   )clsdtr   r   r   from_datetime`   s    z4DatetimeSubclassMixin.DatetimeSubclass.from_datetimeN)r8   r9   r:   classmethodrI   r   r   r   r   DatetimeSubclass_   s   rK   c                 #  s@   t  |}|D ]*}|j}| j|}tj||d}|V  qd S )N)
transition)r2   load_transition_examplesrL   rK   rI   dataclassesreplace)r'   keyZtransition_examplesztrH   Znew_dtZnew_ztr6   r   r   rM   n   s    z.DatetimeSubclassMixin.load_transition_examples)r8   r9   r:   r   rK   rM   r<   r   r   r6   r   r=   Z   s   r=   c                      s   e Zd ZeZdZ fddZedd Zedd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z  ZS )*ZoneInfoTestZoneInfoc                   s   t    | j  d S r!   )r2   r3   klassclear_cacher&   r6   r   r   r3   {   s    
zZoneInfoTest.setUpc                 C  s   t S r!   r   r&   r   r   r   zoneinfo_data   s    zZoneInfoTest.zoneinfo_datac                 C  s
   | j jgS r!   rW   r(   r&   r   r   r   r(      s    zZoneInfoTest.tzpathc                 C  s
   |  |S r!   rT   r'   rP   r   r   r   zone_from_key   s    zZoneInfoTest.zone_from_keyc                 C  s   t  S r!   )ZoneDumpDatatransition_keysr&   r   r   r   zones   s    zZoneInfoTest.zonesc                 C  s   t  S r!   )r\   fixed_offset_zonesr&   r   r   r   r_      s    zZoneInfoTest.fixed_offset_zonesc                 C  s
   t |S r!   )r\   rM   rZ   r   r   r   rM      s    z%ZoneInfoTest.load_transition_examplesc              	   C  s   |   D ]H}| |* | |}| t|| W d    q1 sF0    Y  q| jjd }| j|}t|d^}| jd|d0 | j	
|}| t|t| W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   rbz	Repr test)	test_namepath)r^   subTestr[   assertEqualstrrW   keyspath_from_keyopenrT   	from_filerepr)r'   rP   zifile_key	file_pathfzi_ffr   r   r   test_str   s    
0zZoneInfoTest.test_strc           	      C  sd  t t|  }| |}| j}| jdd  | t|| W d    n1 sR0    Y  | jj	d }| j
|}t|d }| jj||d}W d    n1 s0    Y  | jdd  | t|| W d    n1 s0    Y  t|d}| j|}W d    n1 s0    Y  | jdd  | t|| W d    n1 sV0    Y  d S )Nzfrom key)namer   r`   rP   zfrom file with keyzfrom file without key)nextiterr^   rT   
class_namerc   ZassertRegexrj   rW   rf   rg   rh   ri   )	r'   rP   rk   ru   rl   rm   rn   ro   Zzi_ff_nkr   r   r   	test_repr   s    
...,zZoneInfoTest.test_reprc              
     s   t t  } fdd}d j|fd jj|fd|d ff}|D ]\}}}||} |  |j| W d    n1 s0    Y   | d@  t	 d|_W d    n1 s0    Y  W d    qB1 s0    Y  qBd S )Nc                   sB   t  j| d} j|W  d    S 1 s40    Y  d S )Nr`   )rh   rW   rg   rT   ri   )rP   rn   r&   r   r   from_file_nokey   s    z8ZoneInfoTest.test_key_attribute.<locals>.from_file_nokeyzPrimary constructorno_cacheri   z
: readonlyz
Some/Value)
rs   rt   r^   rT   rx   rc   rd   rP   assertRaisesAttributeError)r'   rP   rw   Zconstructorsmsgconstructorexpectedrk   r   r&   r   test_key_attribute   s    
,zZoneInfoTest.test_key_attributec              	   C  sN   g d}|D ]<}|  | jj | | W d    q1 s>0    Y  qd S )N)zEurasia/BadzoneZBZQzAmerica.Los_Angelesu   🇨🇦u   America/NewYork)ry   moduleZZoneInfoNotFoundErrorrT   r'   Zbad_keysZbad_keyr   r   r   test_bad_keys   s    zZoneInfoTest.test_bad_keysc              	   C  sJ   g d}|D ]8}|  t | | W d    q1 s:0    Y  qd S )N)z/America/Los_AngeleszAmerica/Los_Angeles/z../zoneinfo/America/Los_AngeleszAmerica/../America/Los_AngeleszAmerica/./Los_Angeles)ry   
ValueErrorrT   r   r   r   r   test_bad_keys_paths   s    z ZoneInfoTest.test_bad_keys_pathsc              	   C  sV   ddg}|D ]D}t |}| t | j| W d    q1 sF0    Y  qd S )N    s   AAAA3               )ioBytesIOry   r   rT   ri   )r'   Z	bad_zonesZbad_zonefobjr   r   r   test_bad_zones   s    
zZoneInfoTest.test_bad_zonesc              
   C  s   t t|  }| |}tdddtjdtftdddtftdddt	ft
dt	fdt	fdt	fg}|D ]h\}}| j|dD | | || W d    n1 s0    Y  W d    qh1 s0    Y  qhd S )N  r	   r>   r   z
2019-01-01)val)rs   rt   r^   r[   r   r   utcr   r   	TypeErrorr   rc   ry   fromutc)r'   rP   zone
bad_valuesr   exc_typer   r   r   test_fromutc_errors   s    

	z ZoneInfoTest.test_fromutc_errorsc                 C  sN   |  d}tddd|d}| | t | | t | | d d S )NUTC  r	   r   )rT   r   rd   	utcoffsetZEROdsttzname)r'   rk   rH   r   r   r   test_utc  s
    
zZoneInfoTest.test_utcc              	   C  s   g }|   D ]P}| |D ]@}|||jtdd |jf |||jtdd |jf qq|D ]\}}}| j|||db | |}|j	|d}| 
| |j| | 
| |j| | 
| |j| W d    qb1 s0    Y  qbd S )N   )Zdays)rP   rH   offsetr   )r^   rM   appendrL   r   offset_beforeoffset_afterrc   r[   rO   rd   r   r   r   )r'   
test_casesrP   Zzone_transitionrH   r   tzir   r   r   test_unambiguous  s,    
zZoneInfoTest.test_unambiguousc              	   C  sN  g }|   D ]}g g d}| |D ]N}|jr<|d }n|jrL|d }nd }q&|jtdd }||d|jf ||d|jf |j}||d|jf ||d|jf |jtdd }||d|jf ||d|jf |j	tdd }||d|jf ||d|jf |j	}||d|jf ||d|jf |j	tdd }||d|jf ||d|jf q&|
 D ]\}}|||f|f qq|D ]\\}}}| j||dv | |}	|D ]V\}}
}|j|
|	d}| | |j| | | |j| | | |j| qW d    n1 s<0    Y  qd S )	N)foldsgapsr   r   r	   secondsr   )rP   grpr?   r>   )r^   rM   r?   gapanomaly_startr   r   r   r   anomaly_enditemsrc   r[   rO   rd   r   r   r   )r'   r   rP   ZtestsrQ   Z
test_groupZno_peephole_optrH   r   r   r?   r   r   r   r   test_folds_and_gaps4  sL    



z ZoneInfoTest.test_folds_and_gapsc           	   	   C  s   |   D ]}| |}| j|d | |D ]j}|js:q.|j}|tdd }|tdd }||}| |jd||f ||}| |jd||f q.W d    q1 s0    Y  qd S )Nrr   r	   r   r   )	r^   r[   rc   rM   r?   transition_utcr   
astimezonerd   )	r'   rP   rk   rQ   dt_utcZdt_before_utcZdt_after_utcZ	dt_beforeZdt_afterr   r   r   test_folds_from_utck  s    


z ZoneInfoTest.test_folds_from_utcc              	   C  s   |   D ]|}| |}tdddd|d}| j|d@ | | d  | | d  | | d  W d    q1 sz0    Y  qd S N      r	   i  r   rr   )r^   r[   r   rc   assertIsr   r   r   )r'   rP   rk   tr   r   r   test_time_variable_offset}  s    
z&ZoneInfoTest.test_time_variable_offsetc              	   C  s   |   D ]\}}| |}tdddd|d}| j|dF | | |j | | |j | | |j W d    q1 s0    Y  qd S r   )r_   r[   r   rc   rd   r   r   r   )r'   rP   r   rk   r   r   r   r   test_time_fixed_offset  s    
z#ZoneInfoTest.test_time_fixed_offset)r8   r9   r:   py_zoneinfor   ru   r3   r;   rW   r(   r[   r^   r_   rM   rp   rv   r~   r   r   r   r   r   r   r   r   r   r   r<   r   r   r6   r   rR   w   s0   

7rR   c                   @  s   e Zd ZeZdd ZdS )CZoneInfoTestc           	   	   C  s   dd }ddg}d}|  |}| |D ](}|jr(|jjtkr(|jj|d} qRq(dD ]h}|rh||}n|}| j|d6 |	|}| 
|jd	 | 
|jd
 W d    qV1 s0    Y  qVd S )Nc                 S  s@   G dd dt | }|| j| j| j| j| j| j| j| j| j	d	S )Nc                      s   e Zd Z fddZ  ZS )zLCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclassc                   s   |t dkr| S t |S Nr   )r   r2   __add__)r'   otherr6   r   r   r     s    zTCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclass.__add__)r8   r9   r:   r   r<   r   r   r6   r   SameAddSubclass  s   r   r   )
typer@   rA   rB   rC   rD   rE   rF   r?   r>   )rH   r   r   r   r   to_subclass  s    z3CZoneInfoTest.test_fold_mutate.<locals>.to_subclassFTEurope/Londonr   )FT)subclassr	   r   )r[   rM   r?   r   r   r   r   rO   rc   r   rd   )	r'   r   r   rP   rk   rQ   ZexamplerH   Z
dt_fromutcr   r   r   test_fold_mutate  s     	


zCZoneInfoTest.test_fold_mutateN)r8   r9   r:   
c_zoneinfor   r   r   r   r   r   r     s   r   c                   @  s   e Zd ZdS )ZoneInfoDatetimeSubclassTestNr8   r9   r:   r   r   r   r   r     s   r   c                   @  s   e Zd ZdS )CZoneInfoDatetimeSubclassTestNr   r   r   r   r   r     s   r   c                      s(   e Zd Ze fddZdd Z  ZS )ZoneInfoSubclassTestc                   s4   t    G dd d| j}d| _| j| _|| _d S )Nc                   @  s   e Zd ZdS )z3ZoneInfoSubclassTest.setUpClass.<locals>.ZISubclassNr   r   r   r   r   
ZISubclass  s   r   )r2   
setUpClassrT   ru   parent_klass)rG   r   r6   r   r   r     s
    
zZoneInfoSubclassTest.setUpClassc                 C  s@   |  d}| d}| || | || j  | || j d S )Nr   )r   rT   assertIsNotZassertIsInstance)r'   Zbase_objZsub_objr   r   r   test_subclass_own_cache  s
    

z,ZoneInfoSubclassTest.test_subclass_own_cache)r8   r9   r:   rJ   r   r   r<   r   r   r6   r   r     s   
r   c                   @  s   e Zd ZeZdS )CZoneInfoSubclassTestNr8   r9   r:   r   r   r   r   r   r   r     s   r   c                   @  s    e Zd Zedd Zdd ZdS )ZoneInfoV1Testc                 C  s   t S r!   )r   r&   r   r   r   rW     s    zZoneInfoV1Test.zoneinfo_datac                 c  sZ   t ddd}tdd}|| }|| }t|D ]$}||j  krJ|kr0n q0|V  q0d S )N  r	           r   )r   r   r\   rM   rL   )r'   rP   ZepochZmax_offset_32Zmin_dtZmax_dtrQ   r   r   r   rM     s    
z'ZoneInfoV1Test.load_transition_examplesN)r8   r9   r:   r;   rW   rM   r   r   r   r   r     s   
r   c                   @  s   e Zd ZeZdS )CZoneInfoV1TestNr   r   r   r   r   r     s   r   z4Skipping tzdata-specific tests: tzdata not installedc                   @  s,   e Zd Zedd Zedd Zdd ZdS )TZDataTestsc                 C  s   g S r!   r   r&   r   r   r   r(     s    zTZDataTests.tzpathc                 C  s   dS )NFr   r&   r   r   r   r)     s    zTZDataTests.block_tzdatac                 C  s   | j |dS )Nrr   rY   rZ   r   r   r   r[     s    zTZDataTests.zone_from_keyN)r8   r9   r:   r;   r(   r)   r[   r   r   r   r   r     s
   

r   c                   @  s   e Zd ZeZdS )CTZDataTestsNr   r   r   r   r   r     s   r   c                   @  sR   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZdddZdS )WeirdZoneTestc              
   C  s  t dtdddd }t dtdd }ttddd	d
||g}d}| ||}| j|}tddd	d|d}tdddd|d}||f||ffD ]l\}	}
| jd|	dF | |		 |
j	 | |	
 |
j
 | |	 |
j W d    q1 s0    Y  qtddd	d|dtddd	dddtjdftdddd|dtddddtjdfg}|D ]h\}}| jd|d> ||}| || |tj}| || W d    n1 s0    Y  qRd S )NLMT      r   )r   Zminutesr   STDr   [  	      ZSTD6r	   r   
   local)rq   rH                 r   )
ZoneOffsetr   ZoneTransitionr   construct_zonerT   ri   rc   rd   r   r   r   r   r   r   )r'   r   r   transitionsafterzfrk   Zdt0Zdt1rH   r   dtsZdt_localr   Z	dt_actualZdt_utc_actualr   r   r   test_one_transition#  s6    2
z!WeirdZoneTest.test_one_transitionc              	   C  s   t dtt}ttddd||g}d}| ||}| j|}tdddtddd	tdddtd
ddtdddg}|D ]r}|j|d}| j|dF | 	|
 |j
 | 	| |j | 	| |j W d    qx1 s0    Y  qxd S )NDSTr   r	   zSTD0DST-1,0/0,J365/25l     i  r   r   r   r     r   rH   )r   ONE_Hr   r   r   rT   ri   rO   rc   rd   r   r   r   )r'   r   r   r   r   rk   r   rH   r   r   r   test_one_zone_dstL  s$    




zWeirdZoneTest.test_one_zone_dstc              	   C  s  t dtt}t ddt t}g }tddD ]<}|tt|ddd|| |tt|ddd|| q*d	}| ||}| j	|}td
dd|ftddd|ftddd|ftddd|fg}|D ]x\}	}
|	j
|d}	| j|	dF | |	 |
j | |	 |
j | |	 |
j W d    q1 s20    Y  qtd|d}| d@ | | d  | | d  | | d  W d    n1 s0    Y  d S )Nr   r   r       r   r	   r    i  r   i  r   r   r   zTesting datetime.time)r   r   r   ranger   r   r   r   rT   ri   rO   rc   rd   r   r   r   r   r   )r'   r   r   r   r@   r   r   rk   casesrH   r   r   r   r   r   test_no_tz_strf  s:    4zWeirdZoneTest.test_no_tz_strc           	   
   C  s   t dttt dttg}|D ]}td ||g}d}| ||}| j|}tdddtdddtdddg}|D ]t}|j|d}| j	||d	F | 
| |j | 
| |j | 
| |j W d    qp1 s0    Y  qpqd S )
Nr   r   r   r   r	   r   r   r   )r   rH   )r   r   r   r   r   rT   ri   r   rO   rc   rd   r   r   r   )	r'   offsetsr   r   r   r   rk   r   rH   r   r   r   test_tz_before_only  s&    





z!WeirdZoneTest.test_tz_before_onlyc                 C  sF   |  g d}| t | j| W d    n1 s80    Y  d S )Nr   )r   ry   r   rT   ri   )r'   r   r   r   r   test_empty_zone  s    zWeirdZoneTest.test_empty_zonec                 C  s  t dtdd}t dt}d||fttddd||d||fg}d	}| ||}| jj|d
d}tj|ftj	|ftddd|ftddd|fg}|D ]|\}}	|j
|d}
| jd|
|	dF | |
 |	j | |
 |	j | |
 |	j W d    q1 s0    Y  qtjtjtdd ftddddddtdddftdddddddtdddddddftddddddtddddddftdddtdddftj	tj	fg}|D ]B\}}|j
|d}
|j
tjd}| |||
 | |
| qd S ) Nr   8r   GMTl         x  r	   l            ZGMT0Africa/Abidjanrr   iw  r   r   r   r   r   )rq   rH   r   i  ij     +   4   ik  ;   ?B r      r      r   )r   r   r   r   r   r   rT   ri   minmaxrO   rc   rd   r   r   r   r   r   r   )r'   r   r   r   r   r   rk   Zoffset_casesdt_naiver   rH   Z	utc_casesZnaive_dtZnaive_dt_utcr   r   r   r   test_zone_very_large_timestamp  sD    
4"
z,WeirdZoneTest.test_zone_very_large_timestampc                 C  s$  t dtt}ttddd||g}d}| ||}| jj|dd}tddd|d}| dF | |	 |j	 | |
 |j
 | | |j W d    n1 s0    Y  td	|d}| d
F | |	 |j	 | |
 |j
 | | |j W d    n1 s0    Y  d S )Nr   r   r	   ZUTC0rr   r   r   zdatetime.datetimer   zdatetime.time)r   r   r   r   r   rT   ri   rc   rd   r   r   r   r   )r'   r   r   r   r   rk   rH   r   r   r   r   $test_fixed_offset_phantom_transition  s    0z2WeirdZoneTest.test_fixed_offset_phantom_transitionNr   c           (      C  s  g }g }g }g g g}g g g}g g g}	d}
d}|
|g}dd }t t||dd d}|D ]}|\}}}t|D ]\}\}}|| }|| }|	| }|d ur||  kr|ksql ql||vr|| ||vr|| |d url|| ||| qlqVt|}t|}t|}t }d}tt	|d	fD ]}|| }|| }|	| }|| }t
 }g }|D ]J} t| j }!t| j}"t|}#||!|"|#f || jd
d 7 }qbt|}t|}$t|}%t|}&|d |d|  |d |td||||%|$|& |tjd|% | g|R   |tjd|% dg|R   |D ]}'|tjdg|'R   qR|t| |tj| dg|R   |tj| dg|R   |tjd| dg|R   |dkr.|d ||d
 |d q.|d |S )N)i   r   )l         l            c                 S  s6   t | tr| S | jr$t| j }nd }|| j| jfS r!   )
isinstancetuplerL   intr   Z	timestampr   r   )rQ   
trans_timer   r   r   zt_as_tuple  s    
z1WeirdZoneTest.construct_zone.<locals>.zt_as_tuplec                 S  s   | d S r   r   )xr   r   r   <lambda>+  r   z.WeirdZoneTest.construct_zone.<locals>.<lambda>rr   )lqr   ascii       TZifs   %d                  >6l>Bz>lbbbr  r      
)sortedmap	enumerater   indexlenr   r   r   r  	bytearrayr  r   Ztotal_secondsboolr   r   encodebyteswritestructpackseek)(r'   r   r   versionZisutcZisstdZleap_secondsZoffset_listsZtrans_times_listsZtrans_idx_listsZv1_rangeZv2_rangeZrangesr  rQ   r  r   r   vZdt_minZdt_maxr   Ztrans_timesZ	trans_idxisutcntisstdcntleapcntzonefileZ
time_typesZ	time_typeZabbrstrZttinfosr   ZutcoffZisdstZabbrindtypecnttimecntcharcntZttinfor   r   r   r     s    






"  


zWeirdZoneTest.construct_zone)Nr   )r8   r9   r:   r   r   r   r   r   r   r   r
  r  r   r   r   r   r   r      s   )+$=r   c                   @  s   e Zd ZeZdS )CWeirdZoneTestNr   r   r   r   r   r4    s   r4  c                      sh   e Zd ZeZdZdZdZe fddZ	edd Z
dd	 Zd
d Zdd Zdd Zedd Z  ZS )	TZStrTestr   r	   r   c                   s   t    |   |   d S r!   )r2   r   _populate_test_casespopulate_tzstr_headerrG   r6   r   r   r     s    
zTZStrTest.setUpClassc                 C  sT   t  }tdD ]6}|d7 }|d7 }|d7 }|tddddddd7 }qt|| _d S )Nr   r     3r  r  r   )r#  r   r(  r)  r&  _tzif_header)rG   out_r   r   r   r7    s    zTZStrTest.populate_tzstr_headerc                 C  sV   t | j}|dd |d ||d |d |d | jj||dS )Nr   r   r  r  rr   )r   r   r:  r*  r'  r%  rT   ri   )r'   tzstrr0  r   r   r   zone_from_tzstr  s    


zTZStrTest.zone_from_tzstrc              
   C  s   | j  D ]\}}| j|d | |}W d    n1 s>0    Y  |D ]|\}}}|j|d}| j|||dF | | |j | | |j | | |j W d    qL1 s0    Y  qLq
d S )Nr=  r   )r=  rH   r   )	r   r   rc   r>  rO   rd   r   r   r   )r'   r=  r   rk   r	  r   r<  rH   r   r   r   test_tzstr_localized  s    (zTZStrTest.test_tzstr_localizedc           
   	   C  s   | j  D ]\}}| j|d | |}W d    n1 s>0    Y  |D ]\}}}|| jkrbqL||j jtjd}|	|}|j|d}	| 
||	 || jkr| 
|j|j| n| 
|jd |		tj}| 
|| qLq
d S )Nr?  r   r   )r   r   rc   r>  GAPr   rO   r   r   r   rd   FOLDr?   )
r'   r=  r   rk   r	  r   Zdt_typer   Zdt_actZdt_expr   r   r   test_tzstr_from_utc  s"    (



zTZStrTest.test_tzstr_from_utcc              
   C  s   g d}|D ]p}| j |dP t|}| t| | | W d    n1 sT0    Y  W d    q1 sr0    Y  qd S )N)ZPST8PDT+11zGMT,M3.2.0/2,M11.1.0/3zGMT0+11,M3.2.0/2,M11.1.0/3zPST8PDT,M3.2.0/2zSTD+25zSTD-25zSTD+374zSTD+374DST,M3.2.0/2,M11.1.0/3zSTD+23DST+25,M3.2.0/2,M11.1.0/3zSTD-23DST-25,M3.2.0/2,M11.1.0/3zAAA4BBB,M1443339,M11.1.0/3zAAA4BBB,M3.2.0/2,0349309483959czAAA4BBB,M13.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M13.1.1/2zAAA4BBB,M0.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M0.1.1/2zAAA4BBB,M1.6.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M1.6.1/2zAAA4BBB,M1.1.7/2,M2.1.1/2zAAA4BBB,M1.1.1/2,M2.1.7/2zAAA4BBB,-1/2,20/2zAAA4BBB,1/2,-1/2zAAA4BBB,367,20/2zAAA4BBB,1/2,367/2zAAA4BBB,J0/2,J20/2zAAA4BBB,J20/2,J366/2r?  )rc   reescapeZassertRaisesRegexr   r>  )r'   Zinvalid_tzstrsZinvalid_tzstrZtzstr_regexr   r   r   test_invalid_tzstr  s    %
zTZStrTest.test_invalid_tzstrc                   s   fdd}| j | j | ji | fdd}| fdd}| fdd}| fdd}|fdd}|fd	d}|fd
d}| fdd}| fdd}| fdd}| _d S )Nc                   s   t  }|   d S r!   )r"  )rn   Zprev_len)r   r   r   call  s    z,TZStrTest._populate_test_cases.<locals>.callc                    s  d} t dtddt}t dtddt}tddd	|ftddd
dd|ftddd
dddd|ftddd
dddd|ftddd
dddd|ftddd
dddd|ftddd|ftddddddd|ftddddddd| ftddddddd| ftddddd|ftddddddd|ftddddddd|ftddddddd|ftddddddd| ftddddddd| ff| < d S )Nz EST5EDT,M3.2.0/4:00,M11.1.0/3:00ESTr   EDTr   r   r   r   r  r   r   r?   r	   r   r   r   r  r   r   r   r   r   )r=  rI  rK  rB  rA  NORMALr   r   r   _add+  s(    z,TZStrTest._populate_test_cases.<locals>._addc                    s(  d} t dtt}t dtt}tddd|ftddddd	|ftdddd
d|ftddd|ftddddd	dd|ftddddddd|ftdddd
ddd|ftddddd	|ftdddd
d|ftddddd	dd|ftddddddd| ftdddd
ddd|ff| < d S )Nz"GMT0BST-1,M3.5.0/1:00,M10.5.0/2:00r   BSTr   r      r   r   r  r   r         r	   rM  r         r   r   r   r   )r=  r   rR  rO  r   r   rQ  G  s     c                    sj  d} t dtddt}t dtddt}tddd	|ftddd
dd|ftddd
dddd|ftddd
dddd| ftddd
dddd| ftddd
dddd| ftddd
dddd| ftddd
dddd|ftddd
dddd|ftdddd|ftddd	dd|ftddd	dddd|ftddd	dddd|ftddd	dd|ff| < d S )NzAEST-10AEDT,M10.1.0/2,M4.1.0/3AESTr   r   AEDTr   r   r   r   r   r	   r  rM  r   r   r      rN  )r=  rY  rZ  rO  r   r   rQ  _  s$    c                    sB  d} t dtt }t dtt}tddd|ftddddd	|ftdddd
d|ftddd|ftddddd	dd|ftddddddd| ftddddddd| ftdddd
ddd|ftddddd	|ftdddd
d|ftddddd	dd|ftddddddd| ftdddd
ddd|ff| < d S )NzIST-1GMT0,M10.5.0,M3.5.0/1r   ISTr   r   rS  r   r   r  r   r   rT  rU  r	   rM  r   rV  rW  rX  )r=  r   r\  )rB  rP  r   r   r   rQ  x  s"    c                    s,   d} t dddtdtdd ff| < d S )Nz<+11>-11r   r	   rD  r   r   )r   r   r   r?  rP  r   r   r   rQ    s    
c                    sR   d} t dtdd}t dtddt}tddd	| ftdd
d	| ff| < d S )Nz<-04>4<-03>,M9.1.6/24,M4.1.6/24-04rL  r   -03r   r[  r	   r   r   r   r   r   )r=  ZM04ZM03r]  r   r   rQ    s    c                    s   d} t dtddt}tddd| ftddd| ftddd	d
ddd| ftddd| ftddd| ftddd| ftddd	d
ddd| ftddd| ftddd| ftddd	d
ddd| ff
| < d S )NzEST5EDT,0/0,J365/25rK  rL  r   r   r	   r   r   r   r   r  r  r   r   i`	  ra  )r=  rK  r]  r   r   rQ    s    c                    s  d} t dtdd}t dtddt}tddd|ftdd	d
|ftddddd|ftdddddd|ftdddddd|ftdddd|ftddddd|ftdddddd| ftdddddd| ftdddd|ftddddddd|ftddd|ftdd	d|ftddddd|ftdddddd|ftdddddd|ftdddd|ftddddd|ftdddddd| ftdddddd| ftdddd|ftddddddd|ff| < d S )NzAAA3BBB,J60/12,J305/12AAAr`  r   BBBr   r	   r      r   r   r  r   r   rM     r   r   r   r  r   rV  ra  r=  rb  rc  rO  r   r   rQ    s4    c                    s   d} t dtdd}t dtddt}tddd	|ftddd
ddd|ftddd
ddd|ftddd
ddd|ftddd
d|ftdddd|ftdddddd| ftdddddd| ftdddd|ff	| < d S )Nz <-03>3<-02>,M3.5.0/-2,M10.5.0/-1r_  r`  r   z-02rd  r   r   rU  re     r     r   rM  r	   r   r      ra  )r=  N03ZN02rO  r   r   rQ    s    c                    s   d} t dtdd}t dtddt}tddd	d
d|ftddd	d
ddd|ftddd	d
dd
d|ftddd	dd|ftdd	dd
ddd|ftdd	dd
dddd| ftdd	dd
ddd
d| ftdd	dddd|ff| < d S )Nz%AAA3BBB,M3.2.0/01:30,M11.1.0/02:15:45rb  r`  r   rc  rd    r   r   r	   r   rS  rM  r   r   r   ,   r  -   ra  rg  rO  r   r   rQ    s    )rP  rB  rA  r   )rG   rH  rQ  r   rO  r   r6    s4     zTZStrTest._populate_test_cases)r8   r9   r:   r   r   rP  rB  rA  rJ   r   r7  r>  r@  rC  rG  r6  r<   r   r   r6   r   r5    s   
.r5  c                   @  s   e Zd ZeZdS )
CTZStrTestNr   r   r   r   r   ro    s   ro  c                      sp   e Zd ZeZ fddZedd Zedd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Z  ZS )ZoneInfoCacheTestc                   s   | j   t   d S r!   )rT   rU   r2   r3   r&   r6   r   r   r3     s    
zZoneInfoCacheTest.setUpc                 C  s   t S r!   rV   r&   r   r   r   rW     s    zZoneInfoCacheTest.zoneinfo_datac                 C  s
   | j jgS r!   rX   r&   r   r   r   r(     s    zZoneInfoCacheTest.tzpathc                 C  s   |  | d| d d S NAmerica/Los_Angeles)r   rT   r&   r   r   r   test_ephemeral_zones   s    z&ZoneInfoCacheTest.test_ephemeral_zonesc                 C  s$   |  d}|  d}| || d S )NAustralia/Sydney)rT   r   r'   Ztz0Ztz1r   r   r   test_strong_refs%  s    

z"ZoneInfoCacheTest.test_strong_refsc                 C  s&   |  d}| j d}| || d S )NEurope/Lisbon)rT   rx   r   ru  r   r   r   test_no_cache+  s    
zZoneInfoCacheTest.test_no_cachec                 C  sN   |  d}| g  |  d}W d    n1 s40    Y  | || d S rq  )rT   r.   r   )r'   Zzi0Zzi1r   r   r   test_cache_reset_tzpath2  s    
(z)ZoneInfoCacheTest.test_cache_reset_tzpathc                 C  s2   |  d}| j jd d |  d}| || d S )Nrr  Z	only_keys)rT   rU   r   )r'   la0la1r   r   r   test_clear_cache_explicit_none?  s    

z0ZoneInfoCacheTest.test_clear_cache_explicit_nonec                 C  sT   |  d}|  d}| j jdgd |  d}|  d}| || | || d S )Nrr  Europe/Dublinrz  rT   rU   r   r   )r'   r{  dub0r|  dub1r   r   r   test_clear_cache_one_keyF  s    



z*ZoneInfoCacheTest.test_clear_cache_one_keyc                 C  sv   |  d}|  d}|  d}| j jddgd |  d}|  d}|  d}| || | || | || d S )Nrr  r~  
Asia/Tokyorz  r  )r'   r{  r  Ztok0r|  r  Ztok1r   r   r   test_clear_cache_two_keysS  s    





z+ZoneInfoCacheTest.test_clear_cache_two_keys)r8   r9   r:   r   r   r3   r;   rW   r(   rs  rv  rx  ry  r}  r  r  r<   r   r   r6   r   rp    s   

rp  c                   @  s   e Zd ZeZdS )CZoneInfoCacheTestNr   r   r   r   r   r  e  s   r  c                      s`   e Zd ZeZ fddZedd Zedd Zdd Z	d	d
 Z
dd Zdd Zdd Z  ZS )ZoneInfoPickleTestc                   sb   | j   t 2}|t| j | |	 j
 W d    n1 sJ0    Y  t   d S r!   )rT   rU   r+   r,   r-   test_supportZset_zoneinfo_moduler   r/   r0   r1   r2   r3   r4   r6   r   r   r3   l  s
    

.zZoneInfoPickleTest.setUpc                 C  s   t S r!   rV   r&   r   r   r   rW   u  s    z ZoneInfoPickleTest.zoneinfo_datac                 C  s
   | j jgS r!   rX   r&   r   r   r   r(   y  s    zZoneInfoPickleTest.tzpathc              
   C  s   t tjd D ]}| j|d | d}tj||d}t|}| jdd | || W d    n1 sp0    Y  t|}| jdd | || W d    n1 s0    Y  W d    q1 s0    Y  qd S )Nr	   protor~  protocolzIs non-pickled ZoneInfotestzIs unpickled ZoneInfo)r   pickleHIGHEST_PROTOCOLrc   rT   dumpsloadsr   r'   r  Zzi_inpklzi_rtzi_rt2r   r   r   test_cache_hit}  s    

*
z!ZoneInfoPickleTest.test_cache_hitc              	   C  s   t tjd D ]t}| j|dT | d}tj||d}~| j  t|}t|}| || W d    q1 sx0    Y  qd S )Nr	   r  r~  r  )	r   r  r  rc   rT   r  rU   r  r   r  r   r   r   test_cache_miss  s    



z"ZoneInfoPickleTest.test_cache_missc              
   C  s(  t tjd D ]}| j|d | jd}tj||d}t|}| jdd | || W d    n1 st0    Y  t|}| jdd | || W d    n1 s0    Y  | d}| jdd | || W d    n1 s0    Y  W d    q1 s0    Y  qd S )	Nr	   r  r~  r  zNot the pickled objectr  zNot a second unpickled objectzNot a cached object)	r   r  r  rc   rT   rx   r  r  r   )r'   r  Zzi_no_cacher  r  r  Zzi_cacher   r   r   rx    s    
*
*
z ZoneInfoPickleTest.test_no_cachec           	      C  s   d}t | j|d6}| j|}|d | jj||d}W d    n1 sR0    Y  |df|dfg}|D ]\}}ttjd D ]l}| j	||dJ | 
tj tj||d	 W d    n1 s0    Y  W d    q1 s0    Y  qqpd S )
Nr~  r`   r   rr   zZoneInfo with keyzZoneInfo without keyr	   )ra   r  r  )rh   rW   rg   rT   ri   r*  r   r  r  rc   ry   PicklingErrorr  )	r'   rP   rn   Zzi_nokeyZzi_keyr   rk   ra   r  r   r   r   test_from_file  s    
.z!ZoneInfoPickleTest.test_from_filec              
   C  s@  t tjd D ]*}| j|d d}| |}tj||d}t|}| || t| j	
|d }| jj||d}W d    n1 s0    Y  tj||d}t|}	| ||	 | tj tj||d W d    n1 s0    Y  tj||d}
t|
}| || W d    q1 s00    Y  qd S )Nr	   r  r~  r  r`   rr   )r   r  r  rc   rT   r  r  r   rh   rW   rg   ri   ry   r  )r'   r  rP   rk   Zpkl_0Zzi_rt_0rn   ro   Zpkl_1Zzi_rt_1Zpkl_2Zzi_rt_2r   r   r   test_pickle_after_from_file  s"    

.
,
z.ZoneInfoPickleTest.test_pickle_after_from_file)r8   r9   r:   r   r   r3   r;   rW   r(   r  r  rx  r  r  r<   r   r   r6   r   r  i  s   	

r  c                   @  s   e Zd ZeZdS )CZoneInfoPickleTestNr   r   r   r   r   r    s   r  c                   @  s,   e Zd ZeZedd Zdd Zdd ZdS )CallingConventionTestc                 C  s   t S r!   rV   r&   r   r   r   rW     s    z#CallingConventionTest.zoneinfo_datac              	   C  sn   t | jddH}| t | jj|d W d    n1 sB0    Y  W d    n1 s`0    Y  d S )Nr   r`   )r   )rh   rW   rg   ry   r   rT   ri   )r'   rn   r   r   r   r    s    z$CallingConventionTest.test_from_filec                 C  s<   |  t | jdg W d    n1 s.0    Y  d S Nr   )ry   r   rT   rU   r&   r   r   r   test_clear_cache  s    z&CallingConventionTest.test_clear_cacheN)	r8   r9   r:   r   r   r;   rW   r  r  r   r   r   r   r    s
   
r  c                   @  s   e Zd ZeZdS )CCallingConventionTestNr   r   r   r   r   r    s   r  c                   @  sR   e Zd ZeZeejdd Zdd Z	dd Z
dd Zd	d
 Zdd Zdd ZdS )
TzPathTestc              	   c  s   d}zbt . tj|d }| tj|< d V  W d    n1 s>0    Y  W |d u r\tj|= q|tj|< n|d u rztj|= n
|tj|< 0 d S )NZPYTHONTZPATH)r   osenvironget)valuepath_varZold_envr   r   r   python_tzpath_context  s    
&

z TzPathTest.python_tzpath_contextc              
   C  s   dg fddgfdt j dddgfg}|D ]|\}}| |Z | j|d. | j  | jj}| || W d    n1 s~0    Y  W d    q*1 s0    Y  q*d S )Nr   z/etc/zoneinfo/a/b/cz/d/e/fr(   )r  pathsepr  rc   r   reset_tzpathTZPATHassertSequenceEqual)r'   Z	new_pathsZnew_path_varZexpected_resultr(   r   r   r   test_env_variable  s    
zTzPathTest.test_env_variablec                 C  s  ddgddgddgddgddgddgg}|D ]\}}t j|}| | | jd	|d
H | | jj | j  W d    n1 s0    Y  W d    n1 s0    Y  | jj	}| jd|d
 | 
|| W d    n1 s0    Y  W d    q,1 s
0    Y  q,d S )Npath/to/somewherer   /usr/share/zoneinfor  )r  ../relative/pathr  r  r  r  r  r  r  warning)r  Zfiltered)r  r  joinr  rc   ZassertWarnsr   ZInvalidTZPathWarningr  r  r  )r'   r   input_pathsZexpected_pathsr  r(   r   r   r    test_env_variable_relative_paths  s,    Fz+TzPathTest.test_env_variable_relative_pathsc                 C  s$   | j jdgd | | j jd d S )Nr  to)r  )r   r  r  r  r&   r   r   r   test_reset_tzpath_kwarg;  s    z"TzPathTest.test_reset_tzpath_kwargc              
   C  sz   g d}|D ]h}| j |dH | t | jj|d W d    n1 sL0    Y  W d    q1 sj0    Y  qd S )N)r  r  r  r  r  r  )r  r  )rc   ry   r   r   r  )r'   r   r  r   r   r    test_reset_tzpath_relative_paths@  s
    z+TzPathTest.test_reset_tzpath_relative_pathsc              
   C  sx   g d}|D ]f}| j |dF | t | j| W d    n1 sJ0    Y  W d    q1 sh0    Y  qd S )N)z!/etc/zoneinfo:/usr/share/zoneinfos!   /etc/zoneinfo:/usr/share/zoneinfor   )r  )rc   ry   r   r   r  )r'   r   Z	bad_valuer   r   r   test_tzpath_type_errorN  s
    z!TzPathTest.test_tzpath_type_errorc                 C  s   ddg}dg}|  | | jj}W d    n1 s60    Y  |  | | jj}W d    n1 sh0    Y  | || | || d S )Nz/onez/twoz/three)r.   r   r  r  )r'   Ztzpath_0Ztzpath_1Zquery_0Zquery_1r   r   r   test_tzpath_attributeZ  s    &&z TzPathTest.test_tzpath_attributeN)r8   r9   r:   r   r   staticmethodr+   contextmanagerr  r  r  r  r  r  r  r   r   r   r   r    s   $r  c                   @  s   e Zd ZeZdS )CTzPathTestNr   r   r   r   r   r  h  s   r  c                   @  sh   e Zd ZeZedd Zedd Zdd Z	dd Z
d	d
 Zdd Zdd Zdd Zdd Zdd ZdS )
TestModulec                 C  s   t S r!   rV   r&   r   r   r   rW   o  s    zTestModule.zoneinfo_datac                 C  sB   | j d}t|d}| W  d    S 1 s40    Y  d S )Nr   r`   )rW   rg   rh   read)r'   Z	zone_filern   r   r   r   
_UTC_bytess  s    zTestModule._UTC_bytesc                 C  s   t j|st| d|dd^}}|rFt jt j||dd t j||}t|d}|| j	 W d    n1 s0    Y  d S )Nz does not exist./r	   T)exist_okwb)
r  rb   existsFileNotFoundErrorrsplitmakedirsr  rh   r'  r  )r'   rP   tz_rootroot_dirtailZzonefile_pathrn   r   r   r   
touch_zoney  s    zTestModule.touch_zonec                 C  s6   |  t | jj W d    n1 s(0    Y  d S r!   )ry   rz   r   ZNOATTRIBUTEr&   r   r   r   test_getattr_error  s    zTestModule.test_getattr_errorc                 C  s0   t | jj}t t| j}|| }| | d S r!   )setr   __all__dirassertFalse)r'   Zmodule_all_setZmodule_dir_set
differencer   r   r   test_dir_contains_all  s    z TestModule.test_dir_contains_allc                 C  s"   t | j}t|}| || d S r!   )r  r   r  ZassertCountEqual)r'   Z
module_dirZmodule_uniquer   r   r   test_dir_unique  s    
zTestModule.test_dir_uniquec                 C  sl   |  | jjgH | | jj | j }t| jj}||@ }| || W d    n1 s^0    Y  d S r!   )	r.   rW   r(   
assertTruerf   r   available_timezonesr  rd   )r'   available_keysZzoneinfo_keysunionr   r   r   test_available_timezones  s    
z#TestModule.test_available_timezonesc              	   C  sz   t  ^}| d| | |g& | j }| d| W d    n1 sN0    Y  W d    n1 sl0    Y  d S )NzMars/Olympus_Mons)r   TemporaryDirectoryr  r.   r   r  ZassertIn)r'   tdr  r   r   r   "test_available_timezones_weirdzone  s
    

z-TestModule.test_available_timezones_weirdzonec                 C  s.  h d}t |}dd |D }dd |D }d|fd|| fd|| fd|| | fg}t }|D ]\}}tj||}	t|	 |D ]}
| |
|	 q| |	gP | 	|& | j
 }| || W d    n1 s0    Y  W d    qf1 s0    Y  qfW d    n1 s 0    Y  d S )	N>   r   rt  r   zAmerica/Indiana/Indianapolisr  zEurope/Parisrr  America/Santiagoc                 S  s   g | ]}d | qS )zposix/r   .0r  r   r   r   
<listcomp>  r   z5TestModule.test_folder_exclusions.<locals>.<listcomp>c                 S  s   g | ]}d | qS )zright/r   r  r   r   r   r    r   	base_treeZbase_and_posixZbase_and_rightZ	all_trees)listr   r  r  rb   r  mkdirr  r.   rc   r   r  rd   )r'   r}   r  Z
posix_treeZ
right_treer   r  Z	case_nametreer  rP   actualr   r   r   test_folder_exclusions  s&    




z!TestModule.test_folder_exclusionsc              	   C  s   ddh}t |dg }t h}|D ]}| || q$| |g& | j }| || W d    n1 sn0    Y  W d    n1 s0    Y  d S )NzAmerica/New_Yorkr   Z
posixrules)r  r   r  r  r.   r   r  rd   )r'   r}   r  r  rP   r  r   r   r   test_exclude_posixrules  s    

z"TestModule.test_exclude_posixrulesN)r8   r9   r:   r   r   r;   rW   r   r  r  r  r  r  r  r  r  r  r   r   r   r   r  l  s   

		$r  c                   @  s   e Zd ZeZdS )CTestModuleNr   r   r   r   r   r    s   r  c                   @  s   e Zd Zdd Zdd ZdS )ExtensionBuiltTestc                 C  s(   |  ttjd | ttjd d S )NZ_weak_cache)r  hasattrr   rS   r  r   r&   r   r   r   test_cache_location  s    z&ExtensionBuiltTest.test_cache_locationc                 C  s0   dd l }| |tj | |tj d S r   )gcr  Z
is_trackedr   rS   r  r   )r'   r  r   r   r   test_gc_tracked  s    z"ExtensionBuiltTest.test_gc_trackedN)r8   r9   r:   r  r  r   r   r   r   r    s   	r  )frozenc                   @  s*   e Zd ZU ded< ded< eZded< dS )r   re   r   r   r   r   N)r8   r9   r:   __annotations__r   r   r   r   r   r   r     s   
r   c                   @  sn   e Zd ZU ded< ded< ded< edd Zedd	 Zed
d Zedd Zedd Z	edd Z
dS )r   r   rL   r   r   r   c                 C  s   | j | jj jtjdS )Nr   )rL   r   r   rO   r   r   r&   r   r   r   r     s    zZoneTransition.transition_utcc                 C  s   | j j| jjkS r!   r   r   r   r&   r   r   r   r?     s    zZoneTransition.foldc                 C  s   | j j| jjk S r!   r  r&   r   r   r   r     s    zZoneTransition.gapc                 C  s   | j j| jj S r!   )r   r   r   r&   r   r   r   delta   s    zZoneTransition.deltac                 C  s   | j r| j| j S | jS d S r!   r?   rL   r  r&   r   r   r   r   $  s    zZoneTransition.anomaly_startc                 C  s   | j s| j| j S | jS d S r!   r  r&   r   r   r   r   +  s    zZoneTransition.anomaly_endN)r8   r9   r:   r  r;   r   r?   r   r  r   r   r   r   r   r   r   
  s   





r   c                   @  s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )r   Fc                 C  s&   t || _g | _|| _| | d S r!   )r   r   r(   rf   r   _populate_tzpath)r'   source_jsonr(   r   r   r   r   __init__4  s    zZoneInfoData.__init__c                 C  s
   | j | S r!   r  rZ   r   r   r   rg   :  s    zZoneInfoData.path_from_keyc           
   	   C  s   t |d}t|}W d    n1 s*0    Y  |d }| D ]\}}| j| | |}| jrt| |}n|}| 	|}	|	j
jddd t |	d}|| W d    qD1 s0    Y  qDd S )Nr`   r   T)r  parentsr  )rh   jsonloadr   rf   r   _decode_textr   _convert_to_v1rg   parentr  r'  )
r'   r  rn   Zzoneinfo_dictrW   rP   r  raw_datar   Zdestinationr   r   r   r  =  s    (

zZoneInfoData._populate_tzpathc                 C  s&   d ttj|}t|}t|S )Nr   )r  r  re   r%  base64Z	b85decoder   
decompress)r'   contentsr  Zdecodedr   r   r   r  Q  s    
zZoneInfoData._decode_textc                 C  s|   t |dd }d}|d }td||| \}}}}}	}
|d |	d  |
 |d  | | }||7 }d|d|  }|S )	Nr   r[     rj  r  r   r  s   TZif )r  r(  unpack)r'   r  r+  Zheader_startZ
header_endr-  r.  r/  r2  r1  r3  	file_sizer;  r   r   r   r  W  s*    zZoneInfoData._convert_to_v1N)F)r8   r9   r:   r  rg   r  r  r  r   r   r   r   r   3  s
   
r   c                   @  s\   e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	dZ
dZdS )r\   c                 C  s   |    S r!   )_get_zonedumprf   r8  r   r   r   r]   u  s    zZoneDumpData.transition_keysc                 C  s   |   | S r!   )r  )rG   rP   r   r   r   rM   y  s    z%ZoneDumpData.load_transition_examplesc                 C  s   | j s|   | j  S r!   )_FIXED_OFFSET_ZONES_populate_fixed_offsetsr   r8  r   r   r   r_   }  s    zZoneDumpData.fixed_offset_zonesc                 C  s   | j s|   | j S r!   )_ZONEDUMP_DATA_populate_zonedump_datar8  r   r   r   r    s    zZoneDumpData._get_zonedumpc                 C  s   dt dtti| _d S r  )r   r   r	  r8  r   r   r   r
    s    z$ZoneDumpData._populate_fixed_offsetsc                 C  s   dd }dd }dd }dd }d	d
 }dd }dd }dd }dd }	dd }
| | | | | | | | |	 |
 d
| _ d S )Nc                  S  s0   t dtdd} t dt}ttddd| |gS )Nr   r   r   r   r   r	   r   r   r   r   r   )r   r   r   r   r   _Africa_Abidjan  s    
z=ZoneDumpData._populate_zonedump_data.<locals>._Africa_Abidjanc                  S  s   t dtt} t dtt}t dtt }t dtt}ttdddd| |ttdddd|| ttdd	d
d| |ttdddd||ttdddd||ttdd	dd||gS )Nz+00z+01i  r   rW  r   r[  rf  r      r   re  r   r   )r   r   r   r   r   )ZP00_sZP01_dZP00_dZP01_sr   r   r   _Africa_Casablanca  s    z@ZoneDumpData._populate_zonedump_data.<locals>._Africa_Casablancac                  S  s>  t dtddt} t dtddt}t dtddt}t d	tddt}t d
tddt}ttdddddd| |ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttddd d||ttddd!d||gS )"Nr   i&r   PSTir   PDTiPWTPPTr   r   r   r   r   r   i~  r   r   r   rU  i  r   i  r  r   r  rS  i  r	   i	  rf  r   r   r   r   r   r   r   )r   r  r  r  r  r   r   r   _America_Los_Angeles  s"    zBZoneDumpData._populate_zonedump_data.<locals>._America_Los_Angelesc                  S  s   t dtddt} t dtddt}t dtddt}t dtddt}t d	td
dt}ttddd| |ttddd||ttddd||ttddd||ttddd||ttddd||ttddd||gS )Nr   ir   SMTz-05ir^  ir_  iib  r	   iv  r   |  r   i  r   rS  r   r   r   r  r   r   r  )r   r  ZN05ZN04rk  r   r   r   _America_Santiago  s    z?ZoneDumpData._populate_zonedump_data.<locals>._America_Santiagoc                  S  sb   t dtddt} t dtddt}ttddd| |ttdd	d
d|| ttdd	d	d|| gS )NJSTi~  r   JDT頌  i  r[  r   r   r   r	   i  r  )r  r  r   r   r   _Asia_Tokyo  s    z9ZoneDumpData._populate_zonedump_data.<locals>._Asia_Tokyoc                  S  s   t dtddt} t dtddt}t dtddt}ttdd	d
| |ttdd
d
dd
||ttdddd	||ttddd
d||ttdddd	||ttddd
d||ttdddd	||gS )Nr   ič  r   rY  r  rZ  i  ig  r   r	   }  r   r   rW  rl  r   r   r   r   r  )r   rY  rZ  r   r   r   _Australia_Sydney  s    z?ZoneDumpData._populate_zonedump_data.<locals>._Australia_Sydneyc                  S  s  t dtddt} t dtddt}t dtddt}t dtt}t d	tt}t dtt }t dtt}ttd
ddd| |ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||gS )Nr   i$r   DMTir\  i  r   rR  iX  r  r   r   r  r[  rh  r   r	   r   r  r   i  rU  rS  i	  rT  r  )r   r   ZIST_0ZGMT_0rR  ZGMT_1ZIST_1r   r   r   _Europe_Dublin  s     z<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Dublinc                  S  s   t dtt} t dtt}t dtt}t dtddt}ttddd	d
| |ttdddd||ttdddd||ttdddd||ttdddd||ttdddd|| gS )NWETWESTCETCESTi   r   i  r   rV  r	   r   rU  r   i  re  rT  r   r   r   )r   r   r   r   r   r   )r"  r#  r$  r%  r   r   r   _Europe_Lisbon  s    z<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Lisbonc               
   S  s   t dtddt} t dtt}t dtt}ttddd| |ttd	d
dd||ttd	ddd||ttdd
dd||ttdddd||gS )Nr   ir   r   rR  i7  r   r	   i  r   rU  r   rS  r   i  rV  rW  r  )r   r   rR  r   r   r   _Europe_London  s    z<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Londonc                  S  s   t dtddt} t dtddt}t dtddt}t dtd	dt}ttd
dd| |ttddd||ttddd||gS )Nr   ilr   z-1040i jz-10i`sz+14i  im  r	   i  r   i  r   r   r  )r   ZN1040ZN10ZP14r   r   r   _Pacific_Kiritimati!  s    zAZoneDumpData._populate_zonedump_data.<locals>._Pacific_Kiritimati)
r   zAfrica/Casablancarr  r  rt  r  r~  rw  r   zPacific/Kiritimati)r  )rG   r  r  r  r  r  r  r!  r&  r'  r(  r   r   r   r    s*    z$ZoneDumpData._populate_zonedump_dataN)r8   r9   r:   rJ   r]   rM   r_   r  r
  r  r  r	  r   r   r   r   r\   t  s   





 ,r\   )UZ
__future__r   r  r+   rN   importlib.metadata	importlibr   r  r  r   r  rE  r"   r(  r   Zunittestr   r   r   r   r   	functoolsr   r   r
   r  r   r   r   Ztest.supportr   r   Zget_modulesr   r   metadataZHAS_TZDATA_PKGZPackageNotFoundErrorr   r   r   r   __file__r   ZDATA_DIRr   r   r   r    r$   r%   r=   rR   r   r   r   r   r   r   r   ZskipIfr   r   r   r4  r5  ro  rp  r  r  r  r  r  r  r  r  r  ZTestCaser  Z	dataclassr   r   r   r\   r   r   r   r   <module>   s   


   6  f   Trr{

(A