a  ze#@sddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZmZmZmZddlmZddlmZddlmZmZmZddlmZed Z e!\Z"Z#zej$$d d Z%Wnej$j&yd Z%Yn0da'da(da)e *e+j,d Z-e-dZ.edZ/eddZ0ddZ1ddZ2GdddZ3GdddZ4Gddde3eZ5Gddde5Z6Gddde4e5Z7Gddde4e6Z8Gd d!d!e5Z9Gd"d#d#e9Z:Gd$d%d%e5Z;Gd&d'd'e;Ze=e% d(Gd+d,d,e>Z?Gd-d.d.eZ@Gd/d0d0e@ZAGd1d2d2eZBGd3d4d4eBZCGd5d6d6e3eZDGd7d8d8eDZEGd9d:d:e3eZFGd;d<dd>eZHGd?d@d@eHZIGdAdBdBe3eZJGdCdDdDeJZKGdEdFdFeZLGdGdHdHeLZMGdIdJdJejNZOejPd dKGdLdMdMZQejPd dKGdNdOdOZRGdPdQdQZSGdRdSdSZTdS)T) annotationsN)datedatetimetime timedeltatimezone)cached_property)_support) OS_ENV_LOCKTZPATH_TEST_LOCKZoneInfoTestBase) import_modulelzmaZtzdataTFdatazzoneinfo_data.jsonhourscCs6ttjddatttdatttdddadS)NZzoneinfo)prefixZv2v1T)r) pathlibPathtempfilemkdtempTEMP_DIR ZoneInfoData ZONEINFO_JSON ZONEINFO_DATAZONEINFO_DATA_V1rrT/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_zoneinfo/test_zoneinfo.py setUpModule,sr cCsttdSN)shutilrmtreerrrrrtearDownModule6sr$cs8eZdZdZeddZeddZfddZZS)TzPathUserMixinaH Adds a setUp() and tearDown() to make TZPATH manipulations thread-safe. Any tests that require manipulation of the TZPATH global are necessarily thread unsafe, so we will acquire a lock and reset the TZPATH variable to the default state before each test and release the lock after the test is through. cCsdSr!rselfrrrtzpathDszTzPathUserMixin.tzpathcCsdS)NTrr&rrr block_tzdataHszTzPathUserMixin.block_tzdatacs`t:}||j|j|jtd||j Wdn1sH0Yt dS)N)r)lock) contextlib ExitStack enter_contexttzpath_contextr(r)r addCleanuppop_allclosesupersetUpr'stack __class__rrr3Ls .zTzPathUserMixin.setUp) __name__ __module__ __qualname____doc__propertyr(r)r3 __classcell__rrr6rr%:s    r%cs0eZdZdZGdddeZfddZZS)DatetimeSubclassMixinzP Replaces all ZoneTransition transition dates with a datetime subclass. c@seZdZeddZdS)z&DatetimeSubclassMixin.DatetimeSubclassc Cs,||j|j|j|j|j|j|j|j|jd S)N)tzinfofold) yearmonthdayhourminutesecond microsecondr?r@)clsdtrrr from_datetime`sz4DatetimeSubclassMixin.DatetimeSubclass.from_datetimeN)r8r9r: classmethodrJrrrrDatetimeSubclass_srLc#s@t|}|D]*}|j}|j|}tj||d}|VqdS)N) transition)r2load_transition_examplesrMrLrJ dataclassesreplace)r'keyZtransition_examplesztrIZnew_dtZnew_ztr6rrrNns   z.DatetimeSubclassMixin.load_transition_examples)r8r9r:r;rrLrNr=rrr6rr>Zsr>cseZdZeZdZfddZeddZeddZ dd Z d d Z d d Z ddZ ddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)ZZS)* ZoneInfoTestZoneInfocst|jdSr!)r2r3klass clear_cacher&r6rrr3{s zZoneInfoTest.setUpcCstSr!rr&rrr zoneinfo_dataszZoneInfoTest.zoneinfo_datacCs |jjgSr!rXr(r&rrrr(szZoneInfoTest.tzpathcCs ||Sr!rUr'rQrrr zone_from_keyszZoneInfoTest.zone_from_keycCstSr!) ZoneDumpDatatransition_keysr&rrrzonesszZoneInfoTest.zonescCstSr!)r]fixed_offset_zonesr&rrrr`szZoneInfoTest.fixed_offset_zonescCs t|Sr!)r]rNr[rrrrNsz%ZoneInfoTest.load_transition_examplesc Cs|D]H}||*||}|t||Wdq1sF0Yq|jjd}|j|}t|d^}|jd|d0|j |}|t|t |Wdn1s0YWdn1s0YdS)Nrrbz Repr test) test_namepath) r_subTestr\ assertEqualstrrXkeys path_from_keyopenrU from_filerepr)r'rQzifile_key file_pathfzi_ffrrrtest_strs   0    zZoneInfoTest.test_strc Csdtt|}||}|j}|jdd |t||Wdn1sR0Y|jj d}|j |}t |d }|jj ||d}Wdn1s0Y|jdd |t||Wdn1s0Yt |d}|j |}Wdn1s0Y|jdd |t||Wdn1sV0YdS)Nzfrom key)namerrarQzfrom file with keyzfrom file without key) nextiterr_rU class_namerdZ assertRegexrkrXrgrhrirj) r'rQrlrvrmrnrorpZzi_ff_nkrrr test_reprs .   .. ,zZoneInfoTest.test_reprc stt}fdd}dj|fdjj|fd|dff}|D]\}}}||}||j|Wdn1s0Y|d@t d|_Wdn1s0YWdqB1s0YqBdS)NcsBtj|d}j|WdS1s40YdS)Nra)rirXrhrUrj)rQror&rrfrom_file_nokeysz8ZoneInfoTest.test_key_attribute..from_file_nokeyzPrimary constructorno_cacherjz : readonlyz Some/Value) rtrur_rUryrdrerQ assertRaisesAttributeError)r'rQrxZ constructorsmsg constructorexpectedrlrr&rtest_key_attributes    , zZoneInfoTest.test_key_attributec CsNgd}|D]<}||jj||Wdq 1s>0Yq dS)N)zEurasia/BadzoneZBZQzAmerica.Los_Angelesu🇨🇦uAmerica/NewYork)rzmoduleZZoneInfoNotFoundErrorrUr'Zbad_keysZbad_keyrrr test_bad_keysszZoneInfoTest.test_bad_keysc CsJgd}|D]8}|t||Wdq 1s:0Yq dS)N)z/America/Los_AngeleszAmerica/Los_Angeles/z../zoneinfo/America/Los_AngeleszAmerica/../America/Los_AngeleszAmerica/./Los_Angeles)rz ValueErrorrUrrrrtest_bad_keys_pathss z ZoneInfoTest.test_bad_keys_pathsc CsVddg}|D]D}t|}|t|j|Wdq 1sF0Yq dS)NsAAAA3 )ioBytesIOrzrrUrj)r'Z bad_zonesZbad_zonefobjrrrtest_bad_zoness  zZoneInfoTest.test_bad_zonesc Cstt|}||}tdddtjdtftdddtftdddt ft dt fdt fdt fg}|D]h\}}|j |dD| || |Wdn1s0YWdqh1s0YqhdS)Nr r?rz 2019-01-01)val)rtrur_r\rrutcrr TypeErrorrrdrzfromutc)r'rQzone bad_valuesrexc_typerrrtest_fromutc_errorss    z ZoneInfoTest.test_fromutc_errorscCsN|d}tddd|d}||t||t||ddS)NUTCr r)rUrre utcoffsetZEROdsttzname)r'rlrIrrrtest_utcs  zZoneInfoTest.test_utcc Csg}|D]P}||D]@}|||jtdd|jf|||jtdd|jfqq |D]\}}}|j|||db||}|j |d}| | |j || | |j || | |j |Wdqb1s0YqbdS)N)Zdays)rQrIoffsetr)r_rNappendrMr offset_before offset_afterrdr\rPrerrr)r' test_casesrQZzone_transitionrIrtzirrrtest_unambiguouss,   zZoneInfoTest.test_unambiguousc CsNg}|D]}ggd}||D]N}|jr<|d}n|jrL|d}nd}q&|jtdd}||d|jf||d|jf|j}||d|jf||d|jf|jtdd}||d|jf||d|jf|j tdd}||d|jf||d|jf|j }||d|jf||d|jf|j tdd}||d|jf||d|jfq&| D]\}}|||f|fqq |D]\\}}}|j ||dv| |} |D]V\}} } |j | | d}||| j|||| j|||| j|qWdn1s<0YqdS) N)foldsgapsrrr secondsr)rQgrpr@r?)r_rNr@gap anomaly_startrrrr anomaly_enditemsrdr\rPrerrr) r'rrQZtestsrRZ test_groupZno_peephole_optrIrrr@rrrrtest_folds_and_gaps4sL    z ZoneInfoTest.test_folds_and_gapsc Cs|D]}||}|j|d||D]j}|js:q.|j}|tdd}|tdd}||}||jd||f||}||jd||fq.Wdq1s0YqdS)Nrsr rr) r_r\rdrNr@transition_utcr astimezonere) r'rQrlrRdt_utcZ dt_before_utcZ dt_after_utcZ dt_beforeZdt_afterrrrtest_folds_from_utcks    z ZoneInfoTest.test_folds_from_utcc Cs|D]|}||}tdddd|d}|j|d@||d||d||dWdq1sz0YqdSN r irrs)r_r\rrdassertIsrrr)r'rQrltrrrtest_time_variable_offset}s  z&ZoneInfoTest.test_time_variable_offsetc Cs|D]\}}||}tdddd|d}|j|dF|||j|||j|||jWdq1s0YqdSr)r`r\rrdrerrr)r'rQrrlrrrrtest_time_fixed_offsets z#ZoneInfoTest.test_time_fixed_offset)r8r9r: py_zoneinforrvr3r<rXr(r\r_r`rNrqrwrrrrrrrrrrrr=rrr6rrSws0      7 rSc@seZdZeZddZdS) CZoneInfoTestc Csdd}ddg}d}||}||D](}|jr(|jjtkr(|jj|d}qRq(dD]h}|rh||}n|}|j|d6| |}| |jd | |jd Wd qV1s0YqVd S) a:Test that fold isn't mutated when no change is necessary. The underlying C API is capable of mutating datetime objects, and may rely on the fact that addition of a datetime object returns a new datetime; this test ensures that the input datetime to fromutc is not mutated. c Ss@Gdddt|}||j|j|j|j|j|j|j|j|j d S)NcseZdZfddZZS)zLCZoneInfoTest.test_fold_mutate..to_subclass..SameAddSubclasscs|tdkr|St|SNr)rr2__add__)r'otherr6rrrs zTCZoneInfoTest.test_fold_mutate..to_subclass..SameAddSubclass.__add__)r8r9r:rr=rrr6rSameAddSubclasssrr) typerArBrCrDrErFrGr@r?)rIrrrr to_subclasssz3CZoneInfoTest.test_fold_mutate..to_subclassFT Europe/Londonr)FT)subclassr rN) r\rNr@rrrrrPrdrre) r'rrrQrlrRZexamplerIZ dt_fromutcrrrtest_fold_mutates    zCZoneInfoTest.test_fold_mutateN)r8r9r: c_zoneinforrrrrrrsrc@s eZdZdS)ZoneInfoDatetimeSubclassTestNr8r9r:rrrrrsrc@s eZdZdS)CZoneInfoDatetimeSubclassTestNrrrrrrsrcs(eZdZefddZddZZS)ZoneInfoSubclassTestcs4tGddd|j}d|_|j|_||_dS)Nc@s eZdZdS)z3ZoneInfoSubclassTest.setUpClass..ZISubclassNrrrrr ZISubclasssr)r2 setUpClassrUrv parent_klass)rHrr6rrrs  zZoneInfoSubclassTest.setUpClasscCs@|d}|d}||||||j|||jdS)Nr)rrU assertIsNotZassertIsInstance)r'Zbase_objZsub_objrrrtest_subclass_own_caches    z,ZoneInfoSubclassTest.test_subclass_own_cache)r8r9r:rKrrr=rrr6rrs rc@seZdZeZdS)CZoneInfoSubclassTestNr8r9r:rrrrrrrsrc@s eZdZeddZddZdS)ZoneInfoV1TestcCstSr!)rr&rrrrXszZoneInfoV1Test.zoneinfo_dataccsZtddd}tdd}||}||}t|D]$}||jkrJ|kr0nq0|Vq0dS)Nr r)rrr]rNrM)r'rQZepochZ max_offset_32Zmin_dtZmax_dtrRrrrrNs  z'ZoneInfoV1Test.load_transition_examplesN)r8r9r:r<rXrNrrrrrs rc@seZdZeZdS)CZoneInfoV1TestNrrrrrrsrz4Skipping tzdata-specific tests: tzdata not installedc@s0eZdZdZeddZeddZddZdS) TZDataTestsa5 Runs all the ZoneInfoTest tests, but against the tzdata package NOTE: The ZoneDumpData has frozen test data, but tzdata will update, so some of the tests (particularly those related to the far future) may break in the event that the time zone policies in the relevant time zones change. cCsgSr!rr&rrrr( szTZDataTests.tzpathcCsdS)NFrr&rrrr)szTZDataTests.block_tzdatacCs |j|dS)NrsrZr[rrrr\szTZDataTests.zone_from_keyN)r8r9r:r;r<r(r)r\rrrrrs   rc@seZdZeZdS) CTZDataTestsNrrrrrrsrc@sReZdZeZddZddZddZddZd d Z d d Z d dZ dddZ dS) WeirdZoneTestc Cstdtdddd }tdtdd }ttddd d ||g}d }|||}|j|}tddd d |d }tdddd |d }||f||ffD]l\} } |jd| dF|| | j || | j || | j Wdq1s0Yqtddd d |d tddd dddt j d ftddd d|d tddd dt j d fg} | D]h\} } |jd| d>| |}||| | t j }||| Wdn1s0YqRdS)NLMTr)rZminutesrSTDr[ ZSTD6r r local)rrrI r) ZoneOffsetrZoneTransitionrconstruct_zonerUrjrdrerrrrrr)r'rr transitionsafterzfrlZdt0Zdt1rIrdtsZdt_localrZ dt_actualZ dt_utc_actualrrrtest_one_transition#s6  2    z!WeirdZoneTest.test_one_transitionc Cstdtt}ttddd||g}d}|||}|j|}tdddtddd tdddtd d dtd ddg}|D]r}|j|d }|j|dF| | |j | | |j | | |j Wdqx1s0YqxdS)NDSTrr zSTD0DST-1,0/0,J365/25lirrrrrrI) rONE_HrrrrUrjrPrdrerrr)r'rrrrrlrrIrrrtest_one_zone_dstLs$         zWeirdZoneTest.test_one_zone_dstc Cstdtt}tddtt}g}tddD]<}|tt|ddd|||tt|ddd||q*d }|||}|j |}td dd|ftdd d|ftddd|ftd dd|fg}|D]x\} } | j |d } |j | dF| | | j | | | j| | | jWdq1s20Yqtd|d } | d@|| d|| d|| dWdn1s0YdS)Nrrrrr ririrrrzTesting datetime.time)rrrrangerrrrrUrjrPrdrerrrrr) r'rrrrArrrlcasesrIrrrrrtest_no_tz_strfs:     4  zWeirdZoneTest.test_no_tz_strc Cstdtttdttg}|D]}td||g}d}|||}|j|}tdddtdddtdddg}|D]t}|j|d}|j ||d F| | |j | | |j | | |j Wdqp1s0YqpqdS) Nrrrrr rrr)rrI)rrrrrrUrjrrPrdrerrr) r'offsetsrrrrrlrrIrrrtest_tz_before_onlys&         z!WeirdZoneTest.test_tz_before_onlycCsF|gd}|t|j|Wdn1s80YdS)Nr)rrzrrUrj)r'rrrrtest_empty_zones  zWeirdZoneTest.test_empty_zonec Cstdtdd}tdt}d||fttddd||d||fg}d }|||}|jj|d d }tj|ftj |ftd d d|ftddd|fg}|D]|\}} |j |d} |j d| | dF| | | j | | | j| | | jWdq1s0Yqtjtjtddftdd ddddtdddftd d dddddtdddddddftddddddtddddddftd ddtd ddftj tj fg} | D]B\} } | j |d} | j tjd}| ||| | | |qdS)!aTest when a transition is in the far past or future. Particularly, this is a concern if something: 1. Attempts to call ``datetime.timestamp`` for a datetime outside of ``[datetime.min, datetime.max]``. 2. Attempts to construct a timedelta outside of ``[timedelta.min, timedelta.max]``. This actually occurs "in the wild", as some time zones on Ubuntu (at least as of 2020) have an initial transition added at ``-2**58``. r8rGMTlxr lZGMT0Africa/Abidjanrsiwrrrrr)rrrIrNiij+4ik;?Brrr)rrrrrrrUrjminmaxrPrdrerrrrrr)r'rrrrrrlZ offset_casesdt_naiverrIZ utc_casesZnaive_dtZ naive_dt_utcrrrrtest_zone_very_large_timestampsD    4"   z,WeirdZoneTest.test_zone_very_large_timestampcCs$tdtt}ttddd||g}d}|||}|jj|dd}tddd|d}|dF|| |j || |j || |j Wdn1s0Yt d |d}|d F|| |j || |j || |j Wdn1s0YdS) Nrrr ZUTC0rsrrzdatetime.datetimerz datetime.time) rrrrrrUrjrdrerrrr)r'rrrrrlrIrrrr$test_fixed_offset_phantom_transitions   0  z2WeirdZoneTest.test_fixed_offset_phantom_transitionNrc( Csg}g}g}ggg}ggg}ggg} d} d} | | g} dd} tt| |ddd}|D]}|\}}}t| D]\}\}}||}||}| |}|dur||kr|ksqlql||vr||||vr|||durl|||||qlqVt|}t|}t|}t}d}tt |d fD]}||}||}| |}||}t }g}|D]J} t | j }!t| j}"t|}#||!|"|#f|| jd d 7}qbt|}t|}$t|}%t|}&|d |d ||d|td||||%|$|&|tjd|%|g|R|tjd|%dg|R|D]}'|tjdg|'RqR|t||tj|dg|R|tj|dg|R|tjd|dg|R|dkr.|d||d |dq.|d|S)N)ir)llcSs6t|tr|S|jr$t|j}nd}||j|jfSr!) isinstancetuplerMintrZ timestamprr)rR trans_timerrr zt_as_tuples  z1WeirdZoneTest.construct_zone..zt_as_tuplecSs|dSrr)xrrr+rz.WeirdZoneTest.construct_zone..rs)lqrasciiTZifs%d >6l>Bz>lbbbrr )sortedmap enumeraterindexlenrrrr bytearrayrrZ total_secondsboolrrencodebyteswritestructpackseek)(r'rrversionZisutcZisstdZ leap_secondsZ offset_listsZtrans_times_listsZtrans_idx_listsZv1_rangeZv2_rangeZrangesrrRrrrvZdt_minZdt_maxrZ trans_timesZ trans_idxisutcntisstdcntleapcntzonefileZ time_typesZ time_typeZabbrstrZttinfosrZutcoffZisdstZabbrindtypecnttimecntcharcntZttinforrrr s       "     zWeirdZoneTest.construct_zone)Nr) r8r9r:rrrrrrrr r rrrrrr s)+$=rc@seZdZeZdS)CWeirdZoneTestNrrrrrr5sr5csheZdZeZdZdZdZefddZ eddZ dd Z d d Z d d Z ddZeddZZS) TZStrTestrr rcst||dSr!)r2r_populate_test_casespopulate_tzstr_headerrHr6rrrs zTZStrTest.setUpClassc CsTt}tdD]6}|d7}|d7}|d7}|tddddddd7}qt||_dS)Nrr3rrr)r$rr)r*r' _tzif_header)rHout_rrrr8s zTZStrTest.populate_tzstr_headercCsVt|j}|dd|d||d|d|d|jj||dS)z/Creates a zoneinfo file following a POSIX rule.rrrrrs)rrr;r+r(r&rUrj)r'tzstrr1rrrzone_from_tzstrs     zTZStrTest.zone_from_tzstrc Cs|jD]\}}|j|d||}Wdn1s>0Y|D]|\}}}|j|d}|j|||dF|||j|||j|||jWdqL1s0YqLq dS)Nr>r)r>rIr) rrrdr?rPrerrr)r'r>rrlr rr=rIrrrtest_tzstr_localizeds( zTZStrTest.test_tzstr_localizedc Cs|jD]\}}|j|d||}Wdn1s>0Y|D]\}}}||jkrbqL||jjtjd}| |}|j|d} | || ||j kr| |j |j |n| |j d| tj}| ||qLq dS)Nr@rr) rrrdr?GAPrrPrrrreFOLDr@) r'r>rrlr rZdt_typerZdt_actZdt_exprrrtest_tzstr_from_utcs"(       zTZStrTest.test_tzstr_from_utcc Csgd}|D]p}|j|dPt|}|t|||Wdn1sT0YWdq 1sr0Yq dS)N)ZPST8PDT+11zGMT,M3.2.0/2,M11.1.0/3zGMT0+11,M3.2.0/2,M11.1.0/3zPST8PDT,M3.2.0/2zSTD+25zSTD-25zSTD+374zSTD+374DST,M3.2.0/2,M11.1.0/3zSTD+23DST+25,M3.2.0/2,M11.1.0/3zSTD-23DST-25,M3.2.0/2,M11.1.0/3zAAA4BBB,M1443339,M11.1.0/3zAAA4BBB,M3.2.0/2,0349309483959czAAA4BBB,M13.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M13.1.1/2zAAA4BBB,M0.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M0.1.1/2zAAA4BBB,M1.6.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M1.6.1/2zAAA4BBB,M1.1.7/2,M2.1.1/2zAAA4BBB,M1.1.1/2,M2.1.7/2zAAA4BBB,-1/2,20/2zAAA4BBB,1/2,-1/2zAAA4BBB,367,20/2zAAA4BBB,1/2,367/2zAAA4BBB,J0/2,J20/2zAAA4BBB,J20/2,J366/2r@)rdreescapeZassertRaisesRegexrr?)r'Zinvalid_tzstrsZ invalid_tzstrZ tzstr_regexrrrtest_invalid_tzstrs % zTZStrTest.test_invalid_tzstrcsfdd}|j|j|ji|fdd}|fdd}|fdd}|fdd}|fdd}|fd d}|fd d}|fd d}|fd d}|fd d}|_dS)Ncst}|dS)zDecorator to call the addition methods. This will call a function which adds at least one new entry into the `cases` dictionary. The decorator will also assert that something was added to the dictionary. N)r#)roZprev_len)rrrcallsz,TZStrTest._populate_test_cases..callcsd}tdtddt}tdtddt}tddd |ftddd dd |ftddd d d d d|ftddd d d dd|ftddd d dd d|ftddd d ddd|ftddd|ftddddd dd|ftddddd d d|ftddddd dd|ftddddd |ftdddd d d d|ftdddd d dd|ftddddd dd|ftddddd d d|ftddddd dd|ff|<dS)Nz EST5EDT,M3.2.0/4:00,M11.1.0/3:00ESTrEDTrrrrrrrr@r rrrrrrrrr)r>rJrLrCrBNORMALrrr_add+s(z,TZStrTest._populate_test_cases.._addcs(d}tdtt}tdtt}tddd|ftddddd |ftdddd d|ftdd d |ftdd d dd dd|ftdd d dddd|ftdd d d ddd|ftddddd |ftdddd d|ftdd ddd dd|ftdd ddddd|ftdd dd ddd|ff |<dS)Nz"GMT0BST-1,M3.5.0/1:00,M10.5.0/2:00rBSTrrrrrrrr rNrrrrr)r>rrSrPrrrRGs   csjd}tdtddt}tdtddt}tddd |ftddd d d |ftddd d d d d |ftddd dddd |ftddd dd dd |ftddd ddd d |ftddd dd d d |ftddd dddd |ftddd ddd d |ftdddd|ftddd d d |ftddd dddd |ftddd ddd d |ftddd dd|ff|<dS)NzAEST-10AEDT,M10.1.0/2,M4.1.0/3AESTrrAEDTrrrrrr rrNrrrrO)r>rZr[rPrrrR_s$csBd}tdtt }tdtt}tddd|ftddddd |ftdddd d|ftdd d |ftdd d dd dd|ftdd d dddd|ftdd d dddd|ftdd d d ddd|ftddddd |ftdddd d|ftdd ddd dd|ftdd ddddd|ftdd dd ddd|ff |<dS)NzIST-1GMT0,M10.5.0,M3.5.0/1rISTrrrTrrrrrrUrVr rNrrWrXrY)r>rr])rCrQrrrrRxs" cs,d}tdddtdtddff|<dS)Nz<+11>-11rr rErr)rrrr@rQrrrrRs  csRd}tdtdd}tdtddt}tddd |ftdd d |ff|<dS) Nz<-04>4<-03>,M9.1.6/24,M4.1.6/24-04rMr-03rr\r rrrrr)r>ZM04ZM03r^rrrRs csd}tdtddt}tddd|ftddd|ftddd d d d d |ftd dd|ftd dd|ftd dd|ftd dd d d d d |ftddd|ftddd|ftddd d d d d |ff |<dS)NzEST5EDT,0/0,J365/25rLrMrrr rrrrrrrri` rb)r>rLr^rrrRscsd}tdtdd}tdtddt}tddd|ftdd d |ftdd dd d |ftdd dddd|ftdd dddd|ftdd dd|ftdd ddd |ftdd dd dd|ftdd dd dd|ftdd dd|ftddddd d d|ftddd|ftdd d|ftdd dd d |ftdd dddd|ftdd dddd|ftdd dd|ftdd ddd |ftdd dd dd|ftdd dd dd|ftdd dd|ftddddd d d|ff|<dS)NzAAA3BBB,J60/12,J305/12AAArarBBBrr rrrrrrrN rrrrrrWrbr>rcrdrPrrrRs4csd}tdtdd}tdtddt}tddd |ftddd d d d |ftddd d dd|ftddd d dd|ftddd d|ftdddd |ftdddd dd|ftdddd dd|ftdddd|ff |<dS)Nz <-03>3<-02>,M3.5.0/-2,M10.5.0/-1r`rarz-02rerrrVrfrrrNr rrrb)r>N03ZN02rPrrrRscsd}tdtdd}tdtddt}tddd d d |ftddd d d d d |ftddd d d d d |ftddd dd |ftdd dd ddd|ftdd dd ddd d |ftdd dd ddd d |ftdd dddd|ff|<dS)Nz%AAA3BBB,M3.2.0/01:30,M11.1.0/02:15:45rcrarrdrerrr rrTrNrrr,r-rbrhrPrrrRs)rQrCrBr)rHrIrRrrPrr7 s4    zTZStrTest._populate_test_cases)r8r9r:rrrQrCrBrKrr8r?rArDrHr7r=rrr6rr6s  .r6c@seZdZeZdS) CTZStrTestNrrrrrrp srpcspeZdZeZfddZeddZeddZddZ d d Z d d Z d dZ ddZ ddZddZZS)ZoneInfoCacheTestcs|jtdSr!)rUrVr2r3r&r6rrr3s zZoneInfoCacheTest.setUpcCstSr!rWr&rrrrXszZoneInfoCacheTest.zoneinfo_datacCs |jjgSr!rYr&rrrr(szZoneInfoCacheTest.tzpathcCs||d|ddS)NAmerica/Los_Angeles)rrUr&rrrtest_ephemeral_zones sz&ZoneInfoCacheTest.test_ephemeral_zonescCs$|d}|d}|||dS)NAustralia/Sydney)rUrr'Ztz0Ztz1rrrtest_strong_refs%s  z"ZoneInfoCacheTest.test_strong_refscCs&|d}|jd}|||dS)N Europe/Lisbon)rUryrrurrr test_no_cache+s  zZoneInfoCacheTest.test_no_cachecCsN|d}|g|d}Wdn1s40Y|||dS)zTest that the cache persists when tzpath has been changed. The PEP specifies that as long as a reference exists to one zone with a given key, the primary constructor must continue to return the same object. rrN)rUr.r)r'Zzi0Zzi1rrrtest_cache_reset_tzpath2s  (z)ZoneInfoCacheTest.test_cache_reset_tzpathcCs2|d}|jjdd|d}|||dS)NrrZ only_keys)rUrVr)r'la0la1rrrtest_clear_cache_explicit_none?s  z0ZoneInfoCacheTest.test_clear_cache_explicit_nonecCsT|d}|d}|jjdgd|d}|d}||||||dS)z5Tests that you can clear a single key from the cache.rr Europe/DublinrzNrUrVrr)r'r{dub0r|dub1rrrtest_clear_cache_one_keyFs     z*ZoneInfoCacheTest.test_clear_cache_one_keycCsv|d}|d}|d}|jjddgd|d}|d}|d}|||||||||dS)Nrrr~ Asia/Tokyorzr)r'r{rZtok0r|rZtok1rrrtest_clear_cache_two_keysSs        z+ZoneInfoCacheTest.test_clear_cache_two_keys)r8r9r:rrr3r<rXr(rsrvrxryr}rrr=rrr6rrqs     rqc@seZdZeZdS)CZoneInfoCacheTestNrrrrrresrcs`eZdZeZfddZeddZeddZddZ d d Z d d Z d dZ ddZ ZS)ZoneInfoPickleTestcsb|jt2}|t|j|| j Wdn1sJ0Yt dSr!) rUrVr+r,r- test_supportZset_zoneinfo_modulerr/r0r1r2r3r4r6rrr3ls   .zZoneInfoPickleTest.setUpcCstSr!rWr&rrrrXusz ZoneInfoPickleTest.zoneinfo_datacCs |jjgSr!rYr&rrrr(yszZoneInfoPickleTest.tzpathc CsttjdD]}|j|d|d}tj||d}t|}|jdd|||Wdn1sp0Yt|}|jdd|||Wdn1s0YWdq1s0YqdS)Nr protor~protocolzIs non-pickled ZoneInfotestzIs unpickled ZoneInfo)rpickleHIGHEST_PROTOCOLrdrUdumpsloadsrr'rZzi_inpklzi_rtzi_rt2rrrtest_cache_hit}s  * z!ZoneInfoPickleTest.test_cache_hitc CsttjdD]t}|j|dT|d}tj||d}~|jt|}t|}|||Wdq1sx0YqdS)Nr rr~r) rrrrdrUrrVrrrrrrtest_cache_misss    z"ZoneInfoPickleTest.test_cache_missc Cs(ttjdD]}|j|d|jd}tj||d}t|}|jdd|||Wdn1st0Yt|}|jdd|||Wdn1s0Y|d}|jdd|||Wdn1s0YWdq1s0YqdS) Nr rr~rzNot the pickled objectrzNot a second unpickled objectzNot a cached object) rrrrdrUryrrr)r'rZ zi_no_cacherrrZzi_cacherrrrxs  * * z ZoneInfoPickleTest.test_no_cachec Csd}t|j|d6}|j|}|d|jj||d}Wdn1sR0Y|df|dfg}|D]\}}ttjdD]l}|j ||dJ| tj tj ||d Wdn1s0YWdq1s0YqqpdS) Nr~rarrszZoneInfo with keyzZoneInfo without keyr )rbrr) rirXrhrUrjr+rrrrdrz PicklingErrorr) r'rQroZzi_nokeyZzi_keyrrlrbrrrrtest_from_files  . z!ZoneInfoPickleTest.test_from_filec Cs@ttjdD]*}|j|dd}||}tj||d}t|}|||t|j |d }|jj ||d}Wdn1s0Ytj||d}t|} ||| | tj tj||dWdn1s0Ytj||d} t| } ||| Wdq1s00YqdS)Nr rr~rrars)rrrrdrUrrrrirXrhrjrzr) r'rrQrlZpkl_0Zzi_rt_0rorpZpkl_1Zzi_rt_1Zpkl_2Zzi_rt_2rrrtest_pickle_after_from_files"   .  , z.ZoneInfoPickleTest.test_pickle_after_from_file)r8r9r:rrr3r<rXr(rrrxrrr=rrr6rris    rc@seZdZeZdS)CZoneInfoPickleTestNrrrrrrsrc@s0eZdZdZeZeddZddZddZ dS) CallingConventionTestz8Tests for functions with restricted calling conventions.cCstSr!rWr&rrrrXsz#CallingConventionTest.zoneinfo_datac Csnt|jddH}|t|jj|dWdn1sB0YWdn1s`0YdS)Nrra)r)rirXrhrzrrUrj)r'rorrrrs z$CallingConventionTest.test_from_filecCs<|t|jdgWdn1s.0YdSNr)rzrrUrVr&rrrtest_clear_caches z&CallingConventionTest.test_clear_cacheN) r8r9r:r;rrr<rXrrrrrrrs  rc@seZdZeZdS)CCallingConventionTestNrrrrrrsrc@sReZdZeZeejddZddZ ddZ ddZ d d Z d d Z d dZdS) TzPathTestc csd}zbt.tj|d}|tj|<dVWdn1s>0YW|dur\tj|=q|tj|<n|durztj|=n |tj|<0dS)NZ PYTHONTZPATH)r osenvironget)valuepath_varZold_envrrrpython_tzpath_contexts &   z TzPathTest.python_tzpath_contextc Csdgfddgfdtjdddgfg}|D]|\}}||Z|j|d.|j|jj}|||Wdn1s~0YWdq*1s0Yq*dS)zzAmerica/Indiana/IndianapolisrAmerica/Santiagorz Europe/ParisrtrrrcSsg|]}d|qS)zposix/r.0rrrr rz5TestModule.test_folder_exclusions..cSsg|]}d|qS)zright/rrrrrrr base_treeZbase_and_posixZbase_and_rightZ all_trees) listrrrrcrmkdirrr.rdrrre) r'r~rZ posix_treeZ right_treerrZ case_nametreerrQactualrrrtest_folder_exclusionss&        z!TestModule.test_folder_exclusionsc Csddh}t|dg}th}|D]}|||q$||g&|j}|||Wdn1sn0YWdn1s0YdS)NzAmerica/New_YorkrZ posixrules)rrrrr.rrre)r'r~rrrQrrrrtest_exclude_posixruless  z"TestModule.test_exclude_posixrulesN)r8r9r:rrr<rXrrrrrrrrrrrrrrrls     $rc@seZdZeZdS) CTestModuleNrrrrrrsrc@s eZdZdZddZddZdS)ExtensionBuiltTestaSmoke test to ensure that the C and Python extensions are both tested. Because the intention is for the Python and C versions of ZoneInfo to behave identically, these tests necessarily rely on implementation details, so the tests may need to be adjusted if the implementations change. Do not rely on these tests as an indication of stable properties of these classes. cCs(|ttjd|ttjddS)NZ _weak_cache)rhasattrrrTrrr&rrrtest_cache_locationsz&ExtensionBuiltTest.test_cache_locationcCs0ddl}||tj||tjdSr)gcrZ is_trackedrrTrr)r'rrrrtest_gc_trackedsz"ExtensionBuiltTest.test_gc_trackedN)r8r9r:r;rrrrrrrsr)frozenc@s*eZdZUded<ded<eZded<dS)rrfrrrrN)r8r9r:__annotations__rrrrrrrs rc@sneZdZUded<ded<ded<eddZedd Zed d Zed d ZeddZ eddZ dS)rrrMrrrcCs|j|jjjtjdS)Nr)rMrrrPrrr&rrrrszZoneTransition.transition_utccCs|jj|jjkS)zWhether this introduces a foldrrrr&rrrr@szZoneTransition.foldcCs|jj|jjkS)zWhether this introduces a gaprr&rrrrszZoneTransition.gapcCs|jj|jjSr!)rrrr&rrrdelta szZoneTransition.deltacCs|jr|j|jS|jSdSr!r@rMrr&rrrr$s zZoneTransition.anomaly_startcCs|js|j|jS|jSdSr!rr&rrrr+s zZoneTransition.anomaly_endN) r8r9r:rr<rr@rrrrrrrrr s      rc@s6eZdZd ddZddZddZdd Zd d Zd S)rFcCs&t||_g|_||_||dSr!)rrr(rgr_populate_tzpath)r' source_jsonr(rrrr__init__4s zZoneInfoData.__init__cCs |j|Sr!rr[rrrrh:szZoneInfoData.path_from_keyc Cst|d}t|}Wdn1s*0Y|d}|D]\}}|j|||}|jrt||}n|}| |} | j j dddt| d}| |WdqD1s0YqDdS)NrarT)rparentsr) rijsonloadrrgr _decode_textr_convert_to_v1rhparentrr() r'rroZ zoneinfo_dictrXrQrraw_datarZ destinationrrrr=s (     zZoneInfoData._populate_tzpathcCs&dttj|}t|}t|S)Nr)rr rfr&base64Z b85decoder decompress)r'contentsrZdecodedrrrrQs zZoneInfoData._decode_textc Cs|t|dd}d}|d}td|||\}}}}} } |d| d| |d||} | |7} d|d| } | S) Nrr\rkrrrsTZif)rr)unpack) r'rr,Z header_startZ header_endr.r/r0r3r2r4 file_sizer<rrrrWs* zZoneInfoData._convert_to_v1N)F)r8r9r:rrhrrrrrrrr3s  rc@s\eZdZeddZeddZeddZeddZed d Zed d Z d Z d Z d S)r]cCs |Sr!) _get_zonedumprgr9rrrr^uszZoneDumpData.transition_keyscCs ||Sr!)r)rHrQrrrrNysz%ZoneDumpData.load_transition_examplescCs|js||jSr!)_FIXED_OFFSET_ZONES_populate_fixed_offsetsrr9rrrr`}szZoneDumpData.fixed_offset_zonescCs|js||jSr!)_ZONEDUMP_DATA_populate_zonedump_datar9rrrrszZoneDumpData._get_zonedumpcCsdtdtti|_dSr)rrr r9rrrr s z$ZoneDumpData._populate_fixed_offsetsc Csdd}dd}dd}dd}d d }d d }d d}dd}dd} dd} ||||||||| | d |_dS)NcSs0tdtdd}tdt}ttddd||gS)Nrrrrrr rrrrr)rrrrr_Africa_Abidjans z=ZoneDumpData._populate_zonedump_data.._Africa_Abidjanc Sstdtt}tdtt}tdtt }tdtt}ttdddd||ttdddd||ttdd d d||ttdd d d||ttd ddd||ttd d dd||gS)Nz+00z+01irrXrr\rgrrrfrr)rrrrr)ZP00_sZP01_dZP00_dZP01_srrr_Africa_Casablancas   z@ZoneDumpData._populate_zonedump_data.._Africa_CasablancacSs>tdtddt}tdtddt}tdtddt}td tddt}td tddt}ttd d d ddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdddd||ttdd dd||ttddd d||ttdd d!d||g S)"Nri&rPSTirPDTiPWTPPTrrrrrri~rrrrVirirrrrTir i rgrrrrrrr)rrrrrrrr_America_Los_Angeless"zBZoneDumpData._populate_zonedump_data.._America_Los_Angelesc Sstdtddt}tdtddt}tdtddt}tdtddt}td td dt}ttd d d ||ttd d d||ttddd ||ttddd||ttddd||ttddd||ttddd||gS)NrirSMTz-05ir_ir`iibr ivr|rirrTrrrrrrr)rrZN05ZN04rlrrr_America_Santiagosz?ZoneDumpData._populate_zonedump_data.._America_SantiagocSsbtdtddt}tdtddt}ttddd||ttdd d d ||ttd d d d ||gS) NJSTi~rJDT頌ir\rrrr ir)rrrrr _Asia_Tokyos z9ZoneDumpData._populate_zonedump_data.._Asia_Tokyoc Sstdtddt}tdtddt}tdtddt}ttdd d ||ttd d d d d ||ttd d dd ||ttddd d ||ttdddd ||ttddd d ||ttdddd ||gS)NričrrZrr[iigrr }rrrXrmrrrrr)rrZr[rrr_Australia_Sydneysz?ZoneDumpData._populate_zonedump_data.._Australia_Sydneyc Ss tdtddt}tdtddt}tdtddt}tdtt}td tt}tdtt }tdtt}ttd d d d ||ttdddd ||ttdddd||ttddd d ||ttdddd||ttdddd ||ttdddd||ttdddd ||gS)Nri$rDMTir]irrSiXrrrrr\rirr rrrirVrTi rUr)rr ZIST_0ZGMT_0rSZGMT_1ZIST_1rrr_Europe_Dublins    z._Europe_Dublinc Sstdtt}tdtt}tdtt}tdtddt}ttddd d ||ttdd d d ||ttdddd ||ttdd dd||ttdddd ||ttddd d ||gS)NWETWESTCETCESTi rirrWr rrVrirfrUrrr)rrrrrr)r"r#r$r%rrr_Europe_Lisbons   z._Europe_Lisbonc Sstdtddt}tdtt}tdtt}ttddd||ttd d d d||ttd d d d||ttdd dd||ttdd dd||gS)NrirrrSi7rr irrVrrTrirWrXr)rrrSrrr_Europe_Londons  z._Europe_LondoncSstdtddt}tdtddt}tdtddt}tdtd dt}ttd d d ||ttd d d ||ttddd||gS)Nrilrz-1040ijz-10i`sz+14iimr irirrr )rZN1040ZN10ZP14rrr_Pacific_Kiritimati!szAZoneDumpData._populate_zonedump_data.._Pacific_Kiritimati) rzAfrica/Casablancarrrrtrr~rwrzPacific/Kiritimati)r ) rHrrrrrrr!r&r'r(rrrr s*  z$ZoneDumpData._populate_zonedump_dataN) r8r9r:rKr^rNr`rr r r r rrrrr]ts      ,r])UZ __future__rrr+rOimportlib.metadata importlibrrrrrrFr"r)rZunittestrrrrr functoolsrrr rr r r Z test.supportrrZ get_modulesrrmetadataZHAS_TZDATA_PKGZPackageNotFoundErrorrrrr__file__rZDATA_DIRrrrr r$r%r>rSrrrrrrrZskipIfrrrr5r6rprqrrrrrrrrrZTestCaserZ dataclassrrrr]rrrrs          6fTrr{  (A