\bgzVddlZddlZddlZddlZddlZddlZddlmZddlZddlm Z m Z m Z m Z m Z mZmZmZmZdZGddejZej jZGddZGd d ZGd d ZGd dZGddZGddZdS)N) SpecifierSet) Distribution EntryPoint RequirementVersionConflict WorkingSetparse_requirements parse_version safe_name safe_versioncptj|\}}t|dt||S)z$s -> (s0,s1), (s1,s2), (s2, s3), ...N) itertoolsteenextzip)iterableabs s/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pkg_resources/tests/test_resources.pypairwisers0 = " "DAqDMMM q!99c2eZdZdZddZdefdZdZdZdS) MetadatazAMock object to return metadata as if from an on-disk distributionreturnNc.t||_dSN)dictmetadata)selfpairss r__init__zMetadata.__init__#sU  rc||jvSrrrnames r has_metadatazMetadata.has_metadata&st}$$rc|j|Srr#r$s r get_metadatazMetadata.get_metadata)s}T""rcPtj||Sr) pkg_resources yield_linesr(r$s rget_metadata_lineszMetadata.get_metadata_lines,s!():):4)@)@AAAr)rN) __name__ __module__ __qualname____doc__r!boolr&r(r,rrrr slKK$$$$%D%%%%###BBBBBrrc|eZdZdZdZdZdZdZdZddZ d Z e j eed  d Zd ZedZedZdZdZdZdZdZdZdZdZe j ejdddkoejjdkd dZ dS) TestDistroctjgdd}t|gksJ|dgksJ|t d|t d|t d|dsJt|dgksJgd}d|dD|ksJ||dd d |dDd d gksJ|t d d|dDgdksJt g}t d}t d}td\}|||j dksJ|||||j d ksJt g}||||tj t5|||dddn #1swxYwYt g}|||||||||j d ksJdS)N)platformpythonFooPkgFooPkg-1.3_1.eggzFooPkg-1.4-py2.4-win32.eggFooPkg-1.2-py2.4.eggfoopkg)1.41.3-11.2cg|] }|j Sr2version.0dists r z-TestDistro.testCollection..D666 666rcg|] }|j Sr2r@rBs rrEz-TestDistro.testCollection..HrFrr<r>zFooPkg-1.9.eggcg|] }|j Sr2r@rBs rrEz-TestDistro.testCollection..LrFr)1.9r<r>z FooPkg>=1.3rJ) r* Environmentlistadd dist_from_fnremoverr best_matchrApytestraisesr)radexpectedwsfoo12foo14reqs rtestCollectionzTestDistro.testCollection4s  &rD F F FBxx2~~~~(|r!!!! |.//000 |899::: |233444(||BxxH:%%%%+**66H666(BBBB "X,q/"""66H6665%.HHHH |,--...66H666:O:O:OOOOO ^^3449::#M22}}S"%%-6666 u }}S"%%-6666^^ u  u ]? + + # # MM#r " " " # # # # # # # # # # # # # # #^^ u  u  u }}S"%%-666666s;II"%I"c|jdksJ|jdksJ|jdksJ|jdksJ|jdksJ|jt dksJdS)Nr8r;z 1.3.post12.4win32r=) project_namekeyrA py_versionr6parsed_versionr rds r checkFooPkgzTestDistro.checkFooPkggs~))))u    yK''''|u$$$$zW$$$$=#9#9999999rctddddd}||td}|jtjjdtjjksJ|jJdS)N /some/pathr8r=r[r\)r]rAr_r6.)rrcr_sys version_infomajorminorr6ras rtestDistroBasicszTestDistro.testDistroBasicsos  !       & &|#"2"8SS3;K;QSSSSSSz!!!!!rctd}||td}||dS)Nz FooPkg-1.3.post1-py2.4-win32.eggz%FooPkg-1.3.post1-py2.4-win32.egg-info)rNrcras rtestDistroParsezTestDistro.testDistroParse}sL ; < <  @ A A rc rtddddtd}||dS)Nrer8r[r\)zPKG-INFOz%Metadata-Version: 1.0 Version: 1.3-1 )r]r_r6r)rrrcras rtestDistroMetadatazTestDistro.testDistroMetadatasJ  !UVV     rcBtdtd|fS)Nz/foo depends.txtr#)rr)rtxts r distRequireszTestDistro.distRequiress"FX}c6J-K-KLLLLrr2ct||tt|ksJdSr)rLrequiresr )rrDrrextrass r checkRequireszTestDistro.checkRequiress>DMM&))**d3Ec3J3J.K.KKKKKKKrcbdD]+}||||,dS)N) Twisted>=1.5zTwisted>=1.5 ZConfig>=2.0)rwrs)rvs rtestDistroDependsSimplez"TestDistro.testDistroDependsSimplesB= 8 8A   t0033Q 7 7 7 7 8 8r__dir__z8object.__dir__ necessary for self.__dir__ implementationreasoncJtj}t|dSr)r*rdirras rtest_distribution_dirz TestDistro.test_distribution_dirs  & ( ( Arctj}|}d|vsJd|j_|}t |t |dzksJd|vsJdS)N test_attrrG)r*rr| _providerrlenrrbbeforeafters r+test_distribution_dir_includes_provider_dirz6TestDistro.test_distribution_dir_includes_provider_dirs}  & ( (&(((( $  5zzS[[1_,,,,e######rctj}|}d|vsJd|j_|}t |t |ksJd|vsJdS)N _test_attr)r*rr|rrrrs r=test_distribution_dir_ignores_provider_dir_leading_underscorezHTestDistro.test_distribution_dir_ignores_provider_dir_leading_underscoresy  & ( (6))))!%  5zzS[[((((5((((((rc*tjg}tg}t|g|gksJt jtj5|td|dddn #1swxYwYtj dtd}| || tj dtdD]]}t|td|}||gksJtt|j |^t jt5|td|dddn #1swxYwYtg}t jtj5|td|dddn #1swxYwYtj d td }| |t|td|||gksJt jt5}|td |dddn #1swxYwYd }|j|ksJdS) NFoo/foo_dir/Foo-1.2.egg)rqz[bar] Baz>=2.0r#z Foo-0.9.eggzFoo==0.9zFoo[bar]z/foo_dir/Baz-2.1.egg)rqrzFoo==1.2 Foo!=1.2z-Foo 0.9 is installed but Foo==1.2 is required)r*rKrrLresolverQrRDistributionNotFoundr r from_filenamerrMrangemaprvaluereport) rrSrUritargetsBazvcmsgs r testResolvezTestDistro.testResolves  &r * * ^^BJJr2&&''2---- ]== > > 6 6 JJ)%00" 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6( "@AA    s  |)-88999q ' 'A2::&8&?&?DDEEGse#### RVW%% & & & & ]? + + ; ; JJ)*55r : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ^^]== > > ; ; JJ)*55r : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;( "X6L-M-M    s BJJ1*==rBBCCSzQQQQ ]? + + Er JJ)*>?? D D D E E E E E E E E E E E E E E E>x  C''''''sH+$BB"B $F;;F?F?3$H##H'*H'7$K''K+.K+ctjg}tg}|t d|}t |gksJdS)z5Environment markers are evaluated at resolution time.zFoo;python_version<'2'N)r*rKrrr rL)rrSrUress r+test_environment_marker_evaluation_negativez6TestDistro.test_environment_marker_evaluation_negativesQ  &r * * ^^jj+,DEErJJCyyBrctjg}tg}tjd}|||td|}t||gksJdS)N/foo_dir/Foo-1.2.dist-infozFoo;python_version>='2') r*rKrrrrMrr rL)rrSrUrrs r+test_environment_marker_evaluation_positivez6TestDistro.test_environment_marker_evaluation_positivesy  &r * * ^^()EFF s jj+,EFFKKCyySE!!!!!!rcVtd\}td\}tj||ji}||sJtd\}td\}tj||ji}||sJdS)zy If one package foo requires bar without any extras, markers should pass for bar without extras. foozbar;python_version>='2'zfoo[]N)r r* _ReqExtrasrv markers_pass)r parent_reqrX req_extrass r)test_environment_marker_evaluation_calledz4TestDistro.test_environment_marker_evaluation_calleds +511 #$=>>"-sJ4E.FGG &&s+++++*733 #$=>>"-sJ4E.FGG &&s+++++++rctjg}tg}tjdt d}||t|td||gksJtjd}||t|td|}|||gksJdS)8Extras are also evaluated as markers at resolution time.r)METADATAz5Provides-Extra: baz Requires-Dist: quux; extra=='baz'r#r/foo_dir/quux-1.0.dist-infozFoo[baz]N r*rKrrrrrMrLrr rrSrUrquuxrs r"test_marker_evaluation_with_extrasz-TestDistro.test_marker_evaluation_with_extrass  &r * * ^^( (    s BJJ1%88"==>>3%GGGG)*GHH t 2::0<>3%GGGG)*GHH t 2::01EFFKKLLsDk!!!!!!rctjg}tg}tjdt d}||tjd}||tjd}||t|td|}t||||gksJdS)Nr)rzlProvides-Extra: baz Requires-Dist: quux; extra=='baz' Provides-Extra: bar Requires-Dist: fred; extra=='bar' r#rz/foo_dir/fred-0.1.dist-infoz Foo[baz,bar]) r*rKrrrrrMrLrr sorted)rrSrUrrfredrs r+test_marker_evaluation_with_multiple_extrasz6TestDistro.test_marker_evaluation_with_multiple_extras!s  &r * * ^^( (     s )*GHH t )*GHH t 2::0@@"EEFFc{{tT3///////rctjg}tg}tjdt d}tjdt d}tjdt d}tjd}||||fD]}||t|td |}|||||gksJdS) Nz/foo_dir/a-0.2.dist-info)rzRequires-Dist: c[a]r#z/foo_dir/b-0.3.dist-info)rzRequires-Dist: c[b]z/foo_dir/c-1.0.dist-info)rz]Provides-Extra: a Requires-Dist: b;extra=='a' Provides-Extra: b Requires-Dist: foo;extra=='b'z/foo_dir/foo-0.1.dist-inforr) rrSrUrrcrrDrs r'test_marker_evaluation_with_extras_loopz2TestDistro.test_marker_evaluation_with_extras_loop6s  &r * * ^^  & &ABB     & &ABB     & & ()EFF1cN  D FF4LLLL2::055r::;;q!Qn$$$$$$rN)r finalz/https://github.com/python/cpython/issues/103632cJ|d}||d||ddg||ddg||dddg||dddgtjt j5|d gddddS#1swxYwYdS) Nz Twisted>=1.5 [docgen] ZConfig>=2.0 docutils>=0.3 [fastcgi] fcgiapp>=0.1ryz'Twisted>=1.5 ZConfig>=2.0 docutils>=0.3docgenzTwisted>=1.5 fcgiapp>=0.1fastcgiz4Twisted>=1.5 ZConfig>=2.0 docutils>=0.3 fcgiapp>=0.1z4Twisted>=1.5 fcgiapp>=0.1 ZConfig>=2.0 docutils>=0.3r)rsrwsplitrQrRr* UnknownExtraruras rtestDistroDependsOptionsz#TestDistro.testDistroDependsOptionsQs       1n---  8>>@@8*    19??AAI;OOO  B H H J J y !    B H H J J  !   ]=5 6 6  JJw                     s4DDD)r2)!r-r.r/rYrcrkrmrorsrwr{rQmarkskipifhasattrobjectneeds_object_dirrrrrrrrrrrrxfailrgrh releaselevelrr2rrr4r43s171717f::: " " " MMMLLLL888{)) GFI & &&I* $$$)))((((((T""" , , ,"""$"""&000*%%%6 [ !'TC,<,IW,T@     rr4ceZdZdZdZdS)TestWorkingSetc|tg}tjd}||t t d}t jt5}| |dddn #1swxYwYd}|j |ksJdS)NrzFoo<1.2z,Foo 1.2 is installed but Foo<1.2 is required) rrrrMrr rQrRrfindrr)rrUrrXrrs rtest_find_conflictingz$TestWorkingSet.test_find_conflictingss ^^()?@@ s %i0011 ]? + + r GGCLLL               =x  C''''''s.BBBctg}td}tjd|}||td}tjd|}||tjd}||tjd}||t jt5}|tdd d d n #1swxYwYd }|ttd gz }|j |ksJd S) z A ContextualVersionConflict should be raised when a requirement conflicts with a prior requirement for a different package. )rqzBaz==1.0z/foo_dir/Foo-1.0.eggr#)rqzBaz==2.0z/foo_dir/Bar-1.0.eggz/foo_dir/Baz-1.0.eggz/foo_dir/Baz-2.0.eggzFoo Bar Nz1Baz 1.0 is installed but Baz==2.0 is required by Bar)rrrrrMrQrRrrr reprsetrr)rrUmdrrrrrs r!test_resolve_conflicts_with_priorz0TestWorkingSet.test_resolve_conflicts_with_priorsw^^ 1 2 2()?"MMM s 1 2 2()?"MMM s ()?@@ s ()?@@ s ]? + + 9r JJ),77 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9B tCLL!!!x  C''''''s/#DD"%D"N)r-r.r/rrr2rrrrrs2 ( ( ((((((rrc eZdZdZdZdZdZdZej dedZ dZ d Z eed d d ged ddgddgedddgZdZdZdZdZdS)TestEntryPointsc|jdksJ|jdksJ|jdksJ|jdksJ|t usJd}t ||ksJdS)Nr"pkg_resources.tests.test_resources)r)x2 reject_specctjt5tj|ddddS#1swxYwYdSr)rQrR ValueErrorrr)rrs rtest_reject_specz TestEntryPoints.test_reject_specs ]: & & * *  [ ) ) ) * * * * * * * * * * * * * * * * * *s<AActj}djdit }t j|}|j|ksJdS)z< Allow any printable character in the name. z{name} = module:attrNr2)string printablestripformatlocalsrrr%)rr%rrs rtest_printable_namez#TestEntryPoints.test_printable_namesX %%'',%,88vxx88  d # #w$rc"t|t|jksJ|jD]\}}||j|jksJ||j|jksJt ||jt |jksJt ||jt |jksJdSr) r submap_expectitemsgetr%rrrrv)rmr^rs r checkSubMapzTestEntryPoints.checkSubMaps1vvT/000000)//11 B BGC55::?bg----55::)R^;;;;!%%***++vbh/?/?????!%%**+,,ry0A0AAAAAA  B Brfeature1 somemodule somefunctionfeature2zanother.module SomeClassextra1extra2feature3z this.module something)rv)rrr z # define features for blah blah feature1 = somemodule:somefunction feature2 = another.module:SomeClass [extra1,extra2] feature3 = this.module [something] c~|tjd|jt jt 5tjdddddn #1swxYwYt jt 5tjdddgddddS#1swxYwYdS)Nxyzzx azfoo=barrzfoo=baz)rr parse_group submap_strrQrRrrs r testParseListzTestEntryPoints.testParseLists= /tGGHHH ]: & & 5 5  "5) 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 ]: & & @ @  "3I(> ? ? ? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s$A))A-0A- B22B69B6ctjd|ji}||dt |dgksJtjd|jz}||dt |dgksJt jt5tjddgdddn #1swxYwYt jt5tj|jddddS#1swxYwYdS)Nrz[xyz] z[xyz]) r parse_maprrrLkeysrQrRr)rrs r testParseMapzTestEntryPoints.testParseMaps  %!9 : : 5"""AFFHH~~%((((  T_!< = = 5"""AFFHH~~%(((( ]: & & 5 5  '7!3 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 ]: & & 2 2   1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s$C::C>C>EE  E ctdddgdg}tjtj5|dddddS#1swxYwYdS)NrrrrF)require)rrQwarnsr*PkgResourcesDeprecationWarningrrs rtestDeprecationWarningsz'TestEntryPoints.testDeprecationWarningss  7:K9Lse  \-F G G # # GGEG " " " # # # # # # # # # # # # # # # # # #sAAAN)r-r.r/rrrr reject_specsrQr parametrizerrrrrrrrrrr2rrrrs@!!!   &&&,ML []L99**:9*BBBDJ ~6FGG (;-(H9M  J {mLLL MJ@@@ 2 2 2#####rrc2eZdZdZdZdZdZdZdZdS)TestRequirementsc~tjd}t|dksJt|dksJ|tdksJ|tdksJ|tdksJ|tdksJ|tdksJ|tdksJdS)N Twisted>=1.2z!Requirement.parse('Twisted>=1.2')z twisTed>=1.2z Twisted>=2.0z Zope>=1.2z Zope>=3.0zTwisted[extras]>=1.2)rrrr)rrs rrzTestRequirements.testBasicss  n - -1vv''''Aww=====K//////K//////K//////K ,,,,,,K ,,,,,,K 677777777rctd}td}||ksJt|t|ksJt|dksJtdtdksJdS)NzTwisted==1.2c1,>=1.2zTwisted>=1.2,==1.2c1Twisted'Twisted @ https://localhost/twisted.zip)rrrr1r2s r testOrderingzTestRequirements.testOrderings / 0 0 / 0 0Rxxxx2ww#b''!!!!2ww000009%% 5* *       rc$td}tjd}tjd}tjd}td|vsJtd|vsJd|vsJd|vsJ||vsJ||vsJ||vsJdS)Nr!r9zTwisted-1.1.eggzTwisted-1.2.eggr>1.1)rrrr )rr"foo_disttwist11twist12s rtestBasicContainsz"TestRequirements.testBasicContains#s  ' '-.@AA,->??,->??U##q((((U##1,,,,zzzzA~~~~q    a!||||||rc ntjd}tjd}||ksJt|jtdksJt|jtdksJt |t |ksJt |t ddt dt ddgdfksJt tjdt dd t t dfksJdS) NzTwisted[foo,bar]>=1.2zTwisted[bar,FOO]>=1.2)rbartwistedz>=1.2rr1r%zhttps://localhost/twisted.zip)rrrrvhashr frozensetr&s rtestOptionsAndHashingz&TestRequirements.testOptionsAndHashing0sF  6 7 7  6 7 7Rxxxx29~~^!4!4444429~~^!4!44444Bxx488####Bxx4    ! ! uen % %  !         G H H    + NN KK           rc@tjd}tjd}tj}|d|vsJ|d|vsJ|d|vsJ|d|vsJ|d|vsJ|d|vsJ|d|vsJdS)Nz foo==0.3a2z foo!=0.3a4z foo-0.3a4.eggz foo-0.3a1.eggz foo-0.3a2.eggz foo-0.3a3.eggz foo-0.3a5.egg)rrrr)rr'r(rbs rtestVersionEqualityz$TestRequirements.testVersionEqualityHs  | , ,  | , ,  &q!!++++q!!++++q!!++++q!!R''''q!!R''''q!!R''''q!!R''''''rctjdjdksJtjdjdksJtjdjdksJtjdjdksJdS)zQ The setuptools project should implement the setuptools package. setuptoolszsetuptools == 0.7zsetuptools == 0.7a1zsetuptools >= 0.7N)rrr]rs rtestSetuptoolsProjectNamez*TestRequirements.testSetuptoolsProjectNameVs  ..;|KKKK !455BlRRRR !677D TTTT !455BlRRRRRRrN) r-r.r/rr)r/r5r7r:r2rrrr ss 8 8 8         0 ( ( ( S S S S Srrc FeZdZdZdZdZdZdZdZdZ dZ d Z e j d gd d Zd Ze j d gdeeeezdZdZdS) TestParsingcJttdgksJdS)N)rLr rs rtestEmptyParsezTestParsing.testEmptyParsecs*&r**++r111111rcggfddgfgggfdddgfddgddgffD],\}}ttj||ksJ-dS)Nrz x yyzx )rLr*r+)rinpouts r testYieldingzTestParsing.testYieldingfs H 3%LT2J Sz "s^c3Z (   ? ?HC 1#66773>>>>> ? ?rc&d}ttj|ddgfdddgfddgfdgfd d gfgksJtjt 5ttjd ddddS#1swxYwYdS) Na x [Y] z a [b ] # foo c [ d] [q] v rYzrrrrbqrzz[foo)rLr*split_sectionsrQrRr)rsamples r testSplittingzTestParsing.testSplittingps M08899 C5M 3*  3%L "I 3%L >     ]: & & 7 7 -f55 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s"BB  B ctddksJtddksJtddksJtddksJtddksJdS) Nz adns-pythonz WSGI Utilsz WSGI-Utilsz WSGI Utils Money$$$Maker Money-Makerpeak.webzpeak-web)r rs r testSafeNamezTestParsing.testSafeNames''=8888&&,6666''<7777))]::::$$ 222222rctddksJtddksJtddksJtddksJtd d ksJdS) Nz1.2-1z 1.2.post1z 1.2 alphaz 1.2.alphaz2.3.4 20050521z2.3.4.20050521rMrNrO)r rs rtestSafeVersionzTestParsing.testSafeVersionsG$$ 3333K((K7777,--1AAAAAO,, ====J'':555555rcttdtdgksJttdtdgksJtjdtdksJt jt 5tjddddn #1swxYwYt jt 5tjddddn #1swxYwYt jt 5tjddddn #1swxYwYt jt 5tjddddn #1swxYwYt jt 5tjd ddddS#1swxYwYdS) NzTwis-Ted>=1.2-1zTwisted >=1.2, \ # more <2.0zTwisted>=1.2,<2.0zFooBar==1.99a3z>=2.3zx\zx==2 qz X==1 Y==2#)rLr rrrQrRrrs rtestSimpleRequirementsz"TestParsing.testSimpleRequirementss&'899:: ) * *?     &'GHHII + , ,N      !122kBR6S6SSSSS ]: & & ' '  g & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ]: & & % %  e $ $ $ % % % % % % % % % % % % % % % ]: & & ( (  h ' ' ' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ]: & & , ,  l + + + , , , , , , , , , , , , , , , ]: & & # #  c " " " # # # # # # # # # # # # # # # # # #sZ!CC C&DD D +E  EE0FFF5GGGcftjdtjdksJtjdtjdksJtjdtjdksJtjdtjdksJdS)Nzfoobar;os_name=='a'zname==1.1;python_version=='2.7'zname==1.1;python_version=='3.6'zname==1.0;python_version=='2.7'zname==1.2;python_version=='2.7'z$name[foo]==1.0;python_version=='3.6'z(name[foo,bar]==1.0;python_version=='3.6')rrrs rtest_requirements_with_markersz*TestParsing.test_requirements_with_markerss !677;;L !< <      -   @ A ABBBB -   @ A ABBBB 2   I J JKKKKKKrc$tddS)Nz foo==1.0+org1r rs rtest_local_versionzTestParsing.test_local_versions?+++++rcBtdtddS)Nz foo>=1.0, <3zfoo >= 1.0, < 3rYrs r%test_spaces_between_multiple_versionsz1TestParsing.test_spaces_between_multiple_versionss%>***,-----r)lowerupper) )z1.2-rc1z1.2rc1)0.40.4.0)z0.4.0.0r`)z0.4.0-0z0.4-0)0post1z0.0post1)0pre10.0c1)z 0.0.0preview10c1)rcz0-rc1)z1.2a1z1.2.a.1)z1.2.az1.2acJt|t|ksJdSrr rr]r^s rr7zTestParsing.testVersionEqualitys+ U##}U';';;;;;;;rz 0.80.1-3 0.80.1-2 0.80.1-1 0.79.9999+0.80.0pre4-1 0.79.9999+0.80.0pre2-3 0.79.9999+0.80.0pre2-2 0.77.2-1 0.77.1-1 0.77.0-1 ))2.12.1.1)2a12b0)rjrh)z2.3a1z2.3)2.1-1z2.1-2)rlri)rhz2.1post4)z2.1a0-20040501rh)r+z02.1)z3.2z 3.2.post0)z3.2post1z3.2post2)r_z4.0)z0.0.4r`)raz0.4post1)z 2.1.0-rc1z2.1.0)z2.1devz2.1a0cJt|t|ksJdSrrfrgs rtestVersionOrderingzTestParsing.testVersionOrderings+.U##mE&:&:::::::rc~ttdttdksJdS)z Ensure that our versions stay hashable even though we've subclassed them and added some shim code to them. z1.0N)r3r rs rtestVersionHashablezTestParsing.testVersionHashables; M%(())T-2F2F-G-GGGGGGGrN)r-r.r/r?rDrKrPrRrUrWrZr\rQrrr7torturerLrreversedrrnrpr2rrr<r<bsm222???7770333666###& K K K,,,... [ <<< G  [   $ $xx1122 3 3% 4,;;-,;HHHHHrr<ceZdZdZejdZejddZej e j dkdZ e d Z e d Zd S) TestNamespacesz8__import__('pkg_resources').declare_namespace(__name__) c#RKttdst|VdSt|dz}tjt|| t ||Vtj|dS#tj|wxYw)z Where available, return the tempdir as a symlink, which as revealed in #231 is more fragile than a natural tempdir. symlinkNz-linked)rosrrvtypeunlink)rtmpdir link_names rsymlinked_tmpdirzTestNamespaces.symlinked_tmpdirsr9%% f++    FKK)+  3v;; *** !$v,,y)) ) ) ) Ii BIi s BB&T)autousec#dKtj}tjdd}|d}tjt| dV|t_|t_dS#|t_|t_wxYw)z Patch sys.path to include the 'site-pkgs' dir. Also restore pkg_resources._namespace_packages to its former state. N site-pkgs)r*_namespace_packagescopyrgpathmkdirappendr)rrz saved_ns_pkgssaved_sys_path site_pkgss r patched_pathzTestNamespaces.patched_path s&9>>@@ !!!LL--  I''' & EEE0=M -%CHHH1>M -%CH % % % %s 7BB/Windowsz#591r}c8|}|}tjt |dz |dz |dz f}|D]^}|dz }|dz }||dz |jd|dz |jd_tj td 5d d l }d d d n #1swxYwYdtj vsJtj td 5d d l}d d d n #1swxYwYd tj vsJtj dd gksJt |dz dz dz t |dz dz dz g}|jj|ksJd S) a Test nested namespace packages Create namespace packages in the following tree : site-packages-1/pkg1/pkg2 site-packages-2/pkg1/pkg2 Check both are in the _namespace_packages dict and that their __path__ is correct site-pkgs2rpkg1pkg2 __init__.pyutf-8encodingpkg_resources.declare_namespacematchrNz pkg1.pkg2)realpathrgrrr ensure_dir write_textns_strrQrDeprecationWarningrr*r pkg1.pkg2r__path__) rr| real_tmpdirrz site_dirssiterrrTs rtest_two_levels_deepz#TestNamespaces.test_two_levels_deepsR'//11 ! F\122333[(&<*??  M MD&=D&=D OO    M ! - -dkG - L L L M ! - -dkG - L L L L \,4U V V V   KKK               ::::: \,4U V V V                     m?????08[MIIII  k)F2V; < <  l*V3f< = = y!X------s$ CC!$C!D$$D(+D(c:|}|dz |dz |dz f}d}t|dD]\}}|dkr,tjt ||dz }|dz }||dz |jd |dz ||zd tj td 5d dl }d dl }dddn #1swxYwYd|D} |j | ksJ|jjdksJdS)aV Test that if multiple versions of the same namespace package subpackage are on different sys.path entries, that only the one earliest on sys.path is imported, and that the namespace package's __path__ is in the correct order. Regression test for https://github.com/pypa/setuptools/issues/207 rrz site-pkgs3z__version__ = %rrGnspkgsubpkgrrrrrrNcVg|]&}t|dz 'S)r)rr)rCrs rrEz2TestNamespaces.test_path_order..cs-IIItC '122IIIr) enumeratergrrrrrrrQrrr nspkg.subpkgrr __version__) rr|rzrvers_strnumberrrrrTs rtest_path_orderzTestNamespaces.test_path_orderCs" [ \ ! \ ! &%i33 U ULFDzzD ***7NEX%F       ] " . .t{W . M M M m # / /60AG / T T T T \,4U V V V  LLL                   JIyIII~))))|'1,,,,,,s C%%C),C)N)r-r.r/rrQfixturer|rrrr6systemissue591rrr2rrrtrts HF ^!!^!"V^D!!!&&"!& {  !2!2i!? OOH !.!.X!.F!-!-X!-!-!-rrt)rrwr6rrgrQpackaging.specifiersrr*rrrrrr r r r r EmptyProviderrrrNr4rrrr<rtr2rrrsT  ------                       B B B B B}* B B B )7 | | | | | | | | ~ '('('('('('('('(Tn#n#n#n#n#n#n#n#bRSRSRSRSRSRSRSRSjRHRHRHRHRHRHRHRHjn-n-n-n-n-n-n-n-n-n-r