K izHddlZddlZddlZddlZddlZddlZddlmZddlZddlm Z m Z m Z m Z m Z mZmZmZmZdZGddej&Zejj*ZGddZGd d ZGd d ZGd dZGddZGddZy)N) SpecifierSet) Distribution EntryPoint RequirementVersionConflict WorkingSetparse_requirements parse_version safe_name safe_versioncbtj|\}}t|dt||S)z$s -> (s0,s1), (s1,s2), (s2, s3), ...N) itertoolsteenextzip)iterableabs h/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pkg_resources/tests/test_resources.pypairwisers) == "DAqDM q!9c0eZdZdZddZdefdZdZdZy) MetadatazAMock object to return metadata as if from an on-disk distributionreturnNc$t||_yN)dictmetadata)selfpairss r__init__zMetadata.__init__#s U  rc||jvSrrrnames r has_metadatazMetadata.has_metadata&st}}$$rc |j|Srr#r$s r get_metadatazMetadata.get_metadata)s}}T""rcJtj|j|Sr) pkg_resources yield_linesr(r$s rget_metadata_lineszMetadata.get_metadata_lines,s(():):4)@AAr)rN) __name__ __module__ __qualname____doc__r!boolr&r(r,rrrr s!K$%D%#BrrczeZdZdZdZdZdZdZdZddZ dZ e jjeed  d Zd Zed ZedZdZdZdZdZdZdZdZdZe jj9ej<dddk(xrej<j>dk7d dZ y) TestDistroc*tjgdd}t|gk(sJ|dgk(sJ|jt d|jt d|jt d|dsJt|dgk(sJgd}|dDcgc]}|j c}|k(sJ|j |dd|dDcgc]}|j c}d d gk(sJ|jt d |dDcgc]}|j c}gd k(sJtg}t d}t d}td \}|j||j dk(sJ|j||j||j d k(sJtg}|j||j|tjt5|j||dddtg}|j||j||j||j||j d k(sJycc}wcc}wcc}w#1swYxxYw)N)platformpythonFooPkgFooPkg-1.3_1.eggzFooPkg-1.4-py2.4-win32.eggFooPkg-1.2-py2.4.eggfoopkg)1.41.3-11.2r<r>zFooPkg-1.9.egg)1.9r<r>z FooPkg>=1.3r@) r* Environmentlistadd dist_from_fnversionremoverr best_matchpytestraisesr)radexpecteddistwsfoo12foo14reqs rtestCollectionzTestDistro.testCollection4sJ  & &rD FBx2~~(|r!!! |./0 |89: |234(||BxH:%%%+)+H6 6(BBB "X,q/")+H6 65%.HHH |,-.)+H6 6:OOOO ^349:#M2}}S"%--666 u }}S"%--666^ u  u ]]? + # MM#r " #^ u  u  u }}S"%--666C777" # #s$I:I?J?J  Jc|jdk(sJ|jdk(sJ|jdk(sJ|jdk(sJ|jdk(sJ|j t dk(sJy)Nr8r;z 1.3.post12.4win32r=) project_namekeyrE py_versionr6parsed_versionr rds r checkFooPkgzTestDistro.checkFooPkggsu~~)))uu   yyK'''||u$$$zzW$$$=#9999rctddddd}|j|td}|jtjj dtjj k(sJ|jJy)N /some/pathr8r=rSrT)rUrErWr6.)rr[rWsys version_infomajorminorr6rYs rtestDistroBasicszTestDistro.testDistroBasicsos|  !     &||#"2"2"8"8!93;K;K;Q;Q:RSSSSzz!!!rcttd}|j|td}|j|y)Nz FooPkg-1.3.post1-py2.4-win32.eggz%FooPkg-1.3.post1-py2.4-win32.egg-info)rDr[rYs rtestDistroParsezTestDistro.testDistroParse}s4 ; <  @ A rc Xtddddtd}|j|y)Nr]r8rSrT)zPKG-INFOz%Metadata-Version: 1.0 Version: 1.3-1 )rUrWr6r)rrr[rYs rtestDistroMetadatazTestDistro.testDistroMetadatas1  !UV   rc2tdtd|fS)Nz/foo depends.txtr#)rr)rtxts r distRequireszTestDistro.distRequiressFX}c6J-KLLrcft|j|tt|k(sJyr)rBrequiresr )rrLrjextrass r checkRequireszTestDistro.checkRequiress)DMM&)*d3Ec3J.KKKKrcTdD]#}|j|j||%y)N) Twisted>=1.5zTwisted>=1.5 ZConfig>=2.0)rork)rvs rtestDistroDependsSimplez"TestDistro.testDistroDependsSimples,= 8A   t003Q 7 8r__dir__z8object.__dir__ necessary for self.__dir__ implementationreasoncBtj}t|yr)r*rdirrYs rtest_distribution_dirz TestDistro.test_distribution_dirs  & & ( Arctj}|j}d|vsJd|j_|j}t |t |dzk(sJd|vsJy)N test_attrr?)r*rrt _providerr{lenrrZbeforeafters r+test_distribution_dir_includes_provider_dirz6TestDistro.test_distribution_dir_includes_provider_dirsh  & & (&((( $  5zS[1_,,,e###rctj}|j}d|vsJd|j_|j}t |t |k(sJd|vsJy)N _test_attr)r*rrtr|rr}r~s r=test_distribution_dir_ignores_provider_dir_leading_underscorezHTestDistro.test_distribution_dir_ignores_provider_dir_leading_underscoresd  & & (6)))!%  5zS[(((5(((rchtjg}tg}t|j g|gk(sJt j tj5|j td|dddtjdtd}|j||jtjdtdD]M}t|j td|}||gk(sJtt|j|Ot j t5|j td|dddtg}t j tj5|j td|dddtjd td }|j|t|j td|||gk(sJt j t5}|j td |dddd }j j#|k(sJy#1swYxYw#1swY$xYw#1swYxYw#1swYQxYw) NFoo/foo_dir/Foo-1.2.egg)riz[bar] Baz>=2.0r#z Foo-0.9.eggzFoo==0.9zFoo[bar]z/foo_dir/Baz-2.1.egg)rirzFoo==1.2 Foo!=1.2z-Foo 0.9 is installed but Foo==1.2 is required)r*rArrBresolverHrIDistributionNotFoundr r from_filenamerrCrangemaprvaluereport) rrJrMritargetsBazvcmsgs r testResolvezTestDistro.testResolves5  & &r * ^BJJr2&'2--- ]]=== > 6 JJ)%0" 5 6(( "@A  s  |))-89q 'A2::&8&?DEGse# ## RVVW% & ']]? + ; JJ)*5r : ; ^]]=== > ; JJ)*5r : ;(( "X6L-M  s BJJ1*=rBCSzQQQ ]]? + Er JJ)*>? D E>xx C'''E 6 6 ; ;  ; ; E Es0$JJ#J<J(J JJ%(J1ctjg}tg}|jt d|}t |gk(sJy)z5Environment markers are evaluated at resolution time.zFoo;python_version<'2'N)r*rArrr rB)rrJrMress r+test_environment_marker_evaluation_negativez6TestDistro.test_environment_marker_evaluation_negativesB  & &r * ^jj+,DErJCyBrctjg}tg}tjd}|j ||j td|}t||gk(sJy)N/foo_dir/Foo-1.2.dist-infozFoo;python_version>='2') r*rArrrrCrr rB)rrJrMrrs r+test_environment_marker_evaluation_positivez6TestDistro.test_environment_marker_evaluation_positivesb  & &r * ^(()EF s jj+,EFKCySE!!!rc<td\}td\}tj||ji}|j |sJtd\}td\}tj||ji}|j |sJy)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* _ReqExtrasrn markers_pass)r parent_reqrP req_extrass r)test_environment_marker_evaluation_calledz4TestDistro.test_environment_marker_evaluation_calleds +51 #$=>"--sJ4E4E.FG &&s+++*73 #$=>"--sJ4E4E.FG &&s+++rctjg}tg}tjdt d}|j |t|jtd||gk(sJtjd}|j |t|jtd|}|||gk(sJy)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*rArrrrrCrBrr rrJrMrquuxrs r"test_marker_evaluation_with_extrasz-TestDistro.test_marker_evaluation_with_extrass  & &r * ^(( (  s BJJ1%8"=>3%GGG))*GH t 2::03%GGG))*GH t 2::01EFKLsDk!!!rctjg}tg}tjdt d}|j |tjd}|j |tjd}|j |t|jtd|}t||||gk(sJy)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*rArrrrrCrBrr sorted)rrJrMrrfredrs r+test_marker_evaluation_with_multiple_extrasz6TestDistro.test_marker_evaluation_with_multiple_extras!s  & &r * ^(( (   s ))*GH t ))*GH t 2::0@"EFc{tT3////rctjg}tg}tjdt d}tjdt d}tjdt d}tjd}||||fD]}|j |t|jtd |}|||||gk(sJy) 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) rrJrMrrcrrLrs r'test_marker_evaluation_with_extras_loopz2TestDistro.test_marker_evaluation_with_extras_loop6s  & &r * ^  & & &AB   & & &AB   & & & (()EF1cN D FF4L 2::05r:;q!Qn$$$rN)r finalz/https://github.com/python/cpython/issues/103632c|jd}|j|d|j|djdg|j|djdg|j|djddg|j|djddgtjt j 5|jd gdddy#1swYyxYw) Nz Twisted>=1.5 [docgen] ZConfig>=2.0 docutils>=0.3 [fastcgi] fcgiapp>=0.1rqz'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)rkrosplitrHrIr* UnknownExtrarmrYs rtestDistroDependsOptionsz#TestDistro.testDistroDependsOptionsQs      1n-  8>>@8*  19??AI;O  B H H J y !  B H H J  ! ]]=55 6 JJw    s C--C6)r2)!r-r.r/rQr[rcrergrkrorsrHmarkskipifhasattrobjectneeds_object_dirryrrrrrrrrrrxfailr_r` releaselevelrr2rrr4r43s17f: " ML8{{)) FI &&I* $$))((T" ,"$"&0*%6 [[ !'TC,<,<,I,IW,T@  rr4ceZdZdZdZy)TestWorkingSetcNtg}tjd}|j|t t d}t jt5}|j|dddd}jj|k(sJy#1swY+xYw)NrzFoo<1.2z,Foo 1.2 is installed but Foo<1.2 is required) rrrrCrr rHrIrfindrr)rrMrrPrrs rtest_find_conflictingz$TestWorkingSet.test_find_conflictingss ^(()?@ s %i01 ]]? + r GGCL =xx C'''   s BB$ctg}td}tjd|}|j |td}tjd|}|j |tjd}|j |tjd}|j |t j t5}|jtdd d d d }|ttd gz }jj|k(sJy #1swYCxYw) z A ContextualVersionConflict should be raised when a requirement conflicts with a prior requirement for a different package. )rizBaz==1.0z/foo_dir/Foo-1.0.eggr#)rizBaz==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)rrrrrCrHrIrrr reprsetrr)rrMmdrrrrrs r!test_resolve_conflicts_with_priorz0TestWorkingSet.test_resolve_conflicts_with_priors^ 1 2(()?"M s 1 2(()?"M s (()?@ s (()?@ s ]]? + 9r JJ),7 8 9B tCL!!xx C'''  9 9s D44D=N)r-r.r/rrr2rrrrrs  ((rrc eZdZdZdZdZdZdZejjdedZ dZ d Z eed d d ged ddgddgedddgZdZdZdZdZy)TestEntryPointsc|jdk(sJ|jdk(sJ|jdk(sJ|jdk(sJ|j t usJd}t ||k(sJy)Nr"pkg_resources.tests.test_resources)r)x2 reject_specctjt5tj|dddy#1swYyxYwr)rHrI ValueErrorrr)rrs rtest_reject_specz TestEntryPoints.test_reject_specs1 ]]: & *   [ ) * * *s 9Actjj}djdit }t j |}|j|k(sJy)z< Allow any printable character in the name. z{name} = module:attrNr2)string printablestripformatlocalsrrr%)rr%rrs rtest_printable_namez#TestEntryPoints.test_printable_namesP %%',%,,8vx8   d #ww$rc&t|t|jk(sJ|jjD]\}}|j|j|jk(sJ|j|j |j k(sJt |j|jt |jk(sJt |j|jt |jk(rJyr) r} submap_expectitemsgetr%rrrrn)rmrVrs r checkSubMapzTestEntryPoints.checkSubMaps1vT//0000))//1 BGC55:??bgg- --55:))R^^; ;;!%%***+vbhh/?? ??!%%*++,ryy0AA AA  Brfeature1 somemodule somefunctionfeature2zanother.module SomeClassextra1extra2feature3z this.module something)rn)rrrz # define features for blah blah feature1 = somemodule:somefunction feature2 = another.module:SomeClass [extra1,extra2] feature3 = this.module [something] cv|jtjd|jt j t 5tjdddddt j t 5tjdddgdddy#1swYDxYw#1swYyxYw)Nxyzzx azfoo=barrzfoo=baz)rr parse_group submap_strrHrIrrs r testParseListzTestEntryPoints.testParseLists //tGH ]]: & 5  " "5) 4 5 ]]: & @  " "3I(> ? @ @ 5 5 @ @s B#B/#B,/B8cztjd|ji}|j|dt |j dgk(sJtjd|jz}|j|dt |j dgk(sJt jt5tjddgdddt jt5tj|jdddy#1swYKxYw#1swYyxYw)Nrz[xyz] z[xyz]) r parse_maprrrBkeysrHrIr)rrs r testParseMapzTestEntryPoints.testParseMaps  %!9 : 5"AFFH~%(((  T__!< = 5"AFFH~%((( ]]: & 5  '7!3 4 5 ]]: & 2   1 2 2 5 5 2 2sD%< D1%D.1D:ctdddgdg}tjtj5|j ddddy#1swYyxYw)NrrrrF)require)rrHwarnsr*PkgResourcesDeprecationWarningrrs rtestDeprecationWarningsz'TestEntryPoints.testDeprecationWarningssS  7:K9Lse \\-FF G # GGEG " # # #s AAN)r-r.r/rrrr reject_specsrHr parametrizerrrrrrrr rrr2rrrrs! &,ML [[]L9*:*BJ ~6FG (;-(H9M J {mL MJ@ 2#rrc0eZdZdZdZdZdZdZdZy)TestRequirementsc.tjd}t|dk(sJt|dk(sJ|tdk(sJ|tdk(sJ|tdk7sJ|tdk7sJ|tdk7sJ|tdk7sJy)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 -1v'''Aw====K////K////K////K ,,,,K ,,,,K 67777rctd}td}||k(sJt|t|k(sJt|dk(sJtdtdk7sJy)NzTwisted==1.2c1,>=1.2zTwisted>=1.2,==1.2c1Twisted'Twisted @ https://localhost/twisted.zip)rrrr1r2s r testOrderingzTestRequirements.testOrderingsm / 0 / 0Rxx2w#b'!!!2w00009% 5*    rctd}tjd}tjd}tjd}td|vsJtd|vsJd|vsJd|vsJ||vsJ||vsJ||vsJy)Nrr9zTwisted-1.1.eggzTwisted-1.2.eggr>1.1)rrrr )rrfoo_disttwist11twist12s rtestBasicContainsz"TestRequirements.testBasicContains#s  '--.@A,,->?,,->?U#q(((U#1,,,zzA~~q   a!||rc  tjd}tjd}||k(sJt|jtdk(sJt|jtdk(sJt |t |k(sJt |t ddt dt ddgdfk(sJt tjdt dd t t dfk(sJy) NzTwisted[foo,bar]>=1.2zTwisted[bar,FOO]>=1.2)rbartwistedz>=1.2rr)rzhttps://localhost/twisted.zip)rrrrnhashr frozensetrs rtestOptionsAndHashingz&TestRequirements.testOptionsAndHashing0s   6 7   6 7Rxx299~^!4444299~^!4444Bx48###Bx4    ! uen %  !        G H   + N K       rc tjd}tjd}tj}|d|vsJ|d|vsJ|d|vsJ|d|vsJ|d|vsJ|d|vsJ|d|vsJy)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)rrr rZs rtestVersionEqualityz$TestRequirements.testVersionEqualityHs   | ,   | ,  & &!+++!+++!+++!R'''!R'''!R'''!R'''rc$tjdjdk(sJtjdjdk(sJtjdjdk(sJtjdjdk(sJy)zQ The setuptools project should implement the setuptools package. setuptoolszsetuptools == 0.7zsetuptools == 0.7a1zsetuptools >= 0.7N)rrrUr s rtestSetuptoolsProjectNamez*TestRequirements.testSetuptoolsProjectNameVs   .;;|KKK  !45BBlRRR  !67DD TTT  !45BBlRRRrN) r-r.r/rr!r'r-r/r2r2rrrr s! 8   0 ( Srrc "eZdZdZdZdZdZdZdZdZ dZ d Z e jjd gd d Zd Ze jjd gdeeeej)zdZdZy) TestParsingc6ttdgk(sJy)N)rBr r s rtestEmptyParsezTestParsing.testEmptyParsecs&r*+r111rcggfddgfgggfdddgfddgddgffD](\}}ttj||k(r(Jy)Nrz x yyzx )rBr*r+)rinpouts r testYieldingzTestParsing.testYieldingfsl H 3%LT2J Sz "s^c3Z (   ?HC 11#673> >> ?rcd}ttj|ddgfdddgfddgfdgfd d gfgk(sJtjt 5ttjd dddy#1swYyxYw) Na x [Y] z a [b ] # foo c [ d] [q] v rYzrrrrZqrrz[foo)rBr*split_sectionsrHrIr)rsamples r testSplittingzTestParsing.testSplittingps M0089 C5M 3*  3%L "I 3%L >    ]]: & 7 --f5 6 7 7 7s A;;Bctddk(sJtddk(sJtddk(sJtddk(sJtddk7sJy) Nz adns-pythonz WSGI Utilsz WSGI-Utilsz WSGI Utils Money$$$Maker Money-Makerpeak.webzpeak-web)r r s r testSafeNamezTestParsing.testSafeNamesa'=888&,666'<777)]:::$ 222rctddk(sJtddk(sJtddk(sJtddk(sJtd d k(sJy) Nz1.2-1z 1.2.post1z 1.2 alphaz 1.2.alphaz2.3.4 20050521z2.3.4.20050521rErFrG)r r s rtestSafeVersionzTestParsing.testSafeVersionscG$ 333K(K777,-1AAAAO, ===J':555rctttdtdgk(sJttdtdgk(sJtjdtdk(sJt j t 5tjddddt j t 5tjddddt j t 5tjddddt j t 5tjddddt j t 5tjd dddy#1swYxYw#1swYxYw#1swYxYw#1swYexYw#1swYyxYw) 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#)rBr rrrHrIrr s rtestSimpleRequirementsz"TestParsing.testSimpleRequirementsso&'89: ) *?    &'GHI + ,N      !12kBR6SSSS ]]: & '   g & ' ]]: & %   e $ % ]]: & (   h ' ( ]]: & ,   l + , ]]: & #   c " # # ' ' % % ( ( , , # #s<E>:F 1F(F"F.>F FF"F+.F7cltjdtjdk(sJtjdtjdk7sJtjdtjdk7sJtjdtjdk7sJy)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')rrr s rtest_requirements_with_markersz*TestParsing.test_requirements_with_markerss  !67;;L;L !<      -   @ AB BB  -   @ AB BB  2   I JK KKrctdy)Nz foo==1.0+org1r r s rtest_local_versionzTestParsing.test_local_versions ?+rc0tdtdy)Nz foo>=1.0, <3zfoo >= 1.0, < 3rQr s r%test_spaces_between_multiple_versionsz1TestParsing.test_spaces_between_multiple_versionss>*,-r)lowerupper) )z1.2-rc1z1.2rc1)0.40.4.0)z0.4.0.0rX)z0.4.0-0z0.4-0)0post1z0.0post1)0pre10.0c1)z 0.0.0preview10c1)r[z0-rc1)z1.2a1z1.2.a.1)z1.2.az1.2ac6t|t|k(sJyrr rrUrVs rr/zTestParsing.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)rbr`)z2.3a1z2.3)2.1-1z2.1-2)rdra)r`z2.1post4)z2.1a0-20040501r`)r#z02.1)z3.2z 3.2.post0)z3.2post1z3.2post2)rWz4.0)z0.0.4rX)rYz0.4post1)z 2.1.0-rc1z2.1.0)z2.1devz2.1a0c6t|t|ksJyrr^r_s rtestVersionOrderingzTestParsing.testVersionOrderings.U#mE&::::rcZttdttdk(sJy)z Ensure that our versions stay hashable even though we've subclassed them and added some shim code to them. z1.0N)r+r r s rtestVersionHashablezTestParsing.testVersionHashables& M%()T-2F-GGGGrN)r-r.r/r7r<rCrHrJrMrOrRrTrHrrr/torturerBrreversedrrfrhr2rrr4r4bs2?7036#& K,. [[ << G  [[ $ x12 3% 4,;-,;Hrr4ceZdZdZej dZej ddZejje jdk(dZ e d Z e d Zy ) TestNamespacesz8__import__('pkg_resources').declare_namespace(__name__) c#(Kttdst|yt|dz}tjt|| t ||tj |y#tj |wxYww)z Where available, return the tempdir as a symlink, which as revealed in #231 is more fragile than a natural tempdir. symlinkNz-linked)rosrrntypeunlink)rtmpdir link_names rsymlinked_tmpdirzTestNamespaces.symlinked_tmpdirsmr9%f+  K)+  3v; * !$v,y) ) IIi BIIi sA BA8"B8BBT)autousec#LKtjj}tjdd}|j d}tjj t| d|t_|t_y#|t_|t_wxYww)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_packagescopyr_pathmkdirappendr)rrr saved_ns_pkgssaved_sys_path site_pkgss r patched_pathzTestNamespaces.patched_path st&99>>@ !LL-  I' & 0=M -%CH1>M -%CHsA+B$.B 2B$ B!!B$Windowsz#591ruc,|j}|}tjjt |dz |dz |dz f}|D]\}|dz }|dz }|j |dz j |jd|dz j |jd^tjtd 5d d l }d d d dtjvsJtjtd 5d d l}d d d d tjvsJtjdd gk(sJt |dz dz dz t |dz dz dz g}jj |k(sJy #1swYxYw#1swYxYw) 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-pkgs2rwpkg1pkg2 __init__.pyutf-8encodingpkg_resources.declare_namespacematchrNz pkg1.pkg2)realpathr_rzr|r ensure_dir write_textns_strrHrDeprecationWarningrr*rx pkg1.pkg2r__path__) rrt real_tmpdirrr site_dirssiterrrKs rtest_two_levels_deepz#TestNamespaces.test_two_levels_deeps'//1 ! F\123[(&<*??  MD&=D&=D OO  M ! - -dkkG - L M ! - -dkkG - L  M \\,4U V   ::::: \\,4U V   m?????008[MIII  k)F2V; <  l*V3f< = yy!!X---    sE>F >F Fct|}|dz |dz |dz f}d}t|dD]\}}|dkDr(tjjt ||dz }|dz }|j |dz j |jd |dz j ||zd tjtd 5d dl }d dl }ddd|Dcgc]}t |jdz  } }j| k(sJ|jj dk(sJy#1swY_xYwcc}w)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 rwrz site-pkgs3z__version__ = %rr?nspkgsubpkgrrrrrrN) enumerater_rzr|rrrrrHrrr nspkg.subpkgrrr __version__) rrtrrrvers_strnumberrrrrKs rtest_path_orderzTestNamespaces.test_path_orderCsA" [ \ ! \ ! &%i3 ULFDzD *7NEX%F     ] " . .t{{W . M m # / /60AG / T U\\,4U V   @IItC '12II~~)))||''1,,,   Js D)#D5)D2N)r-r.r/rrHfixturertrrrr6systemissue591rrr2rrrlrls HF ^^!!"V^^D!&"& {{  !2i!? OH !.!.F!-!-rrl)rror6rr_rHpackaging.specifiersrr*rrrrrr r r r r EmptyProviderrrrDr4rrrr4rlr2rrrs  -    B}** B ))77 | | ~ '('(Tn#n#bRSRSjRHRHjn-n-r