1"""Test .dist-info style distributions. 2""" 3 4import pytest 5 6import pkg_resources 7from .textwrap import DALS 8 9 10class TestDistInfo: 11 12 metadata_base = DALS(""" 13 Metadata-Version: 1.2 14 Requires-Dist: splort (==4) 15 Provides-Extra: baz 16 Requires-Dist: quux (>=1.1); extra == 'baz' 17 """) 18 19 @classmethod 20 def build_metadata(cls, **kwargs): 21 lines = ( 22 '{key}: {value}\n'.format(**locals()) 23 for key, value in kwargs.items() 24 ) 25 return cls.metadata_base + ''.join(lines) 26 27 @pytest.fixture 28 def metadata(self, tmpdir): 29 dist_info_name = 'VersionedDistribution-2.718.dist-info' 30 versioned = tmpdir / dist_info_name 31 versioned.mkdir() 32 filename = versioned / 'METADATA' 33 content = self.build_metadata( 34 Name='VersionedDistribution', 35 ) 36 filename.write_text(content, encoding='utf-8') 37 38 dist_info_name = 'UnversionedDistribution.dist-info' 39 unversioned = tmpdir / dist_info_name 40 unversioned.mkdir() 41 filename = unversioned / 'METADATA' 42 content = self.build_metadata( 43 Name='UnversionedDistribution', 44 Version='0.3', 45 ) 46 filename.write_text(content, encoding='utf-8') 47 48 return str(tmpdir) 49 50 def test_distinfo(self, metadata): 51 dists = dict( 52 (d.project_name, d) 53 for d in pkg_resources.find_distributions(metadata) 54 ) 55 56 assert len(dists) == 2, dists 57 58 unversioned = dists['UnversionedDistribution'] 59 versioned = dists['VersionedDistribution'] 60 61 assert versioned.version == '2.718' # from filename 62 assert unversioned.version == '0.3' # from METADATA 63 64 def test_conditional_dependencies(self, metadata): 65 specs = 'splort==4', 'quux>=1.1' 66 requires = list(map(pkg_resources.Requirement.parse, specs)) 67 68 for d in pkg_resources.find_distributions(metadata): 69 assert d.requires() == requires[:1] 70 assert d.requires(extras=('baz',)) == [ 71 requires[0], 72 pkg_resources.Requirement.parse('quux>=1.1;extra=="baz"'), 73 ] 74 assert d.extras == ['baz'] 75