[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