test_dist_info.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. """Test .dist-info style distributions.
  2. """
  3. import os
  4. import shutil
  5. import tempfile
  6. import pytest
  7. import pkg_resources
  8. from .textwrap import DALS
  9. class TestDistInfo:
  10. def test_distinfo(self):
  11. dists = dict(
  12. (d.project_name, d)
  13. for d in pkg_resources.find_distributions(self.tmpdir)
  14. )
  15. assert len(dists) == 2, dists
  16. unversioned = dists['UnversionedDistribution']
  17. versioned = dists['VersionedDistribution']
  18. assert versioned.version == '2.718' # from filename
  19. assert unversioned.version == '0.3' # from METADATA
  20. @pytest.mark.importorskip('ast')
  21. def test_conditional_dependencies(self):
  22. specs = 'splort==4', 'quux>=1.1'
  23. requires = list(map(pkg_resources.Requirement.parse, specs))
  24. for d in pkg_resources.find_distributions(self.tmpdir):
  25. assert d.requires() == requires[:1]
  26. assert d.requires(extras=('baz',)) == requires
  27. assert d.extras == ['baz']
  28. metadata_template = DALS("""
  29. Metadata-Version: 1.2
  30. Name: {name}
  31. {version}
  32. Requires-Dist: splort (==4)
  33. Provides-Extra: baz
  34. Requires-Dist: quux (>=1.1); extra == 'baz'
  35. """)
  36. def setup_method(self, method):
  37. self.tmpdir = tempfile.mkdtemp()
  38. dist_info_name = 'VersionedDistribution-2.718.dist-info'
  39. versioned = os.path.join(self.tmpdir, dist_info_name)
  40. os.mkdir(versioned)
  41. with open(os.path.join(versioned, 'METADATA'), 'w+') as metadata_file:
  42. metadata = self.metadata_template.format(
  43. name='VersionedDistribution',
  44. version='',
  45. ).replace('\n\n', '\n')
  46. metadata_file.write(metadata)
  47. dist_info_name = 'UnversionedDistribution.dist-info'
  48. unversioned = os.path.join(self.tmpdir, dist_info_name)
  49. os.mkdir(unversioned)
  50. with open(os.path.join(unversioned, 'METADATA'), 'w+') as metadata_file:
  51. metadata = self.metadata_template.format(
  52. name='UnversionedDistribution',
  53. version='Version: 0.3',
  54. )
  55. metadata_file.write(metadata)
  56. def teardown_method(self, method):
  57. shutil.rmtree(self.tmpdir)