[Python-checkins] distutils2: fixed #11038. Add strict parameter to metadata.check() and use the strict mode
tarek.ziade
python-checkins at python.org
Fri Jan 28 16:31:11 CET 2011
tarek.ziade pushed da2f3527ef02 to distutils2:
http://hg.python.org/distutils2/rev/da2f3527ef02
changeset: 897:da2f3527ef02
user: Gael Pasgrimaud <gael at gawel.org>
date: Fri Jan 28 12:37:44 2011 +0100
summary:
fixed #11038. Add strict parameter to metadata.check() and use the strict mode in check command
files:
distutils2/command/check.py
distutils2/errors.py
distutils2/metadata.py
distutils2/tests/test_command_check.py
distutils2/tests/test_command_sdist.py
diff --git a/distutils2/command/check.py b/distutils2/command/check.py
--- a/distutils2/command/check.py
+++ b/distutils2/command/check.py
@@ -57,7 +57,7 @@
Warns if any are missing.
"""
- missing, __ = self.distribution.metadata.check()
+ missing, __ = self.distribution.metadata.check(strict=True)
if missing != []:
self.warn("missing required metadata: %s" % ', '.join(missing))
diff --git a/distutils2/errors.py b/distutils2/errors.py
--- a/distutils2/errors.py
+++ b/distutils2/errors.py
@@ -110,6 +110,10 @@
"""Attempt to process an unknown file type."""
+class MetadataMissingError(DistutilsError):
+ """A required metadata is missing"""
+
+
class MetadataConflictError(DistutilsError):
"""Attempt to read or write metadata fields that are conflictual."""
diff --git a/distutils2/metadata.py b/distutils2/metadata.py
--- a/distutils2/metadata.py
+++ b/distutils2/metadata.py
@@ -14,7 +14,8 @@
from distutils2 import logger
from distutils2.version import (is_valid_predicate, is_valid_version,
is_valid_versions)
-from distutils2.errors import (MetadataConflictError,
+from distutils2.errors import (MetadataMissingError,
+ MetadataConflictError,
MetadataUnrecognizedVersionError)
try:
@@ -82,6 +83,7 @@
_ALL_FIELDS.update(_314_FIELDS)
_ALL_FIELDS.update(_345_FIELDS)
+_345_REQUIRED = ('Name', 'Version')
def _version2fieldlist(version):
if version == '1.0':
@@ -451,11 +453,20 @@
return None
return value
- def check(self):
+ def check(self, strict=False):
"""Check if the metadata is compliant."""
# XXX should check the versions (if the file was loaded)
missing, warnings = [], []
- for attr in ('Name', 'Version', 'Home-page'):
+
+ for attr in ('Name', 'Version'):
+ if attr not in self:
+ missing.append(attr)
+
+ if strict and missing != []:
+ msg = "missing required metadata: %s" % ', '.join(missing)
+ raise MetadataMissingError(msg)
+
+ for attr in ('Home-page',):
if attr not in self:
missing.append(attr)
diff --git a/distutils2/tests/test_command_check.py b/distutils2/tests/test_command_check.py
--- a/distutils2/tests/test_command_check.py
+++ b/distutils2/tests/test_command_check.py
@@ -4,6 +4,7 @@
from distutils2.metadata import _HAS_DOCUTILS
from distutils2.tests import unittest, support
from distutils2.errors import DistutilsSetupError
+from distutils2.errors import MetadataMissingError
class CheckTestCase(support.LoggingCatcher,
support.TempdirManager,
@@ -11,7 +12,7 @@
def _run(self, metadata=None, **options):
if metadata is None:
- metadata = {}
+ metadata = {'name':'xxx', 'version':'xxx'}
pkg_info, dist = self.create_dist(**metadata)
cmd = check(dist)
cmd.initialize_options()
@@ -40,7 +41,8 @@
# now with the strict mode, we should
# get an error if there are missing metadata
- self.assertRaises(DistutilsSetupError, self._run, {}, **{'strict': 1})
+ self.assertRaises(MetadataMissingError, self._run, {}, **{'strict': 1})
+ self.assertRaises(DistutilsSetupError, self._run, {'name':'xxx', 'version':'xxx'}, **{'strict': 1})
# and of course, no error when all metadata fields are present
cmd = self._run(metadata, strict=1)
@@ -63,6 +65,9 @@
def test_check_all(self):
self.assertRaises(DistutilsSetupError, self._run,
+ {'name':'xxx', 'version':'xxx'}, **{'strict': 1,
+ 'all': 1})
+ self.assertRaises(MetadataMissingError, self._run,
{}, **{'strict': 1,
'all': 1})
diff --git a/distutils2/tests/test_command_sdist.py b/distutils2/tests/test_command_sdist.py
--- a/distutils2/tests/test_command_sdist.py
+++ b/distutils2/tests/test_command_sdist.py
@@ -245,7 +245,7 @@
@unittest.skipUnless(zlib, "requires zlib")
def test_metadata_check_option(self):
# testing the `check-metadata` option
- dist, cmd = self.get_cmd(metadata={})
+ dist, cmd = self.get_cmd(metadata={'name':'xxx', 'version':'xxx'})
# this should raise some warnings !
# with the `check` subcommand
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list