[Python-checkins] distutils2: added additional check for the check command

tarek.ziade python-checkins at python.org
Sun Sep 19 10:20:22 CEST 2010


tarek.ziade pushed 4c1ee3125333 to distutils2:
http://hg.python.org/distutils2/rev/4c1ee3125333
changeset: 646:4c1ee3125333
user: Konrad Delong <konryd at gmail.com>
date: Mon Aug 16 17:11:19 2010 +0200
summary: added additional check for the check command
files: src/distutils2/command/check.py, src/distutils2/command/register.py, src/distutils2/tests/support.py, src/distutils2/tests/test_check.py, src/distutils2/tests/test_dist.py
diff --git a/src/distutils2/command/check.py b/src/distutils2/command/check.py
--- a/src/distutils2/command/check.py
+++ b/src/distutils2/command/check.py
@@ -6,23 +6,23 @@
 
 from distutils2.core import Command
 from distutils2.errors import DistutilsSetupError
+from distutils2.util import resolve_name
 
 class check(Command):
 """This command checks the metadata of the package.
 """
 description = ("perform some checks on the package")
 user_options = [('metadata', 'm', 'Verify metadata'),
- ('restructuredtext', 'r',
- ('Checks if long string metadata syntax '
- 'is reStructuredText-compliant')),
+ ('all', 'a',
+ ('runs extended set of checks')),
 ('strict', 's',
 'Will exit with an error if a check fails')]
 
- boolean_options = ['metadata', 'restructuredtext', 'strict']
+ boolean_options = ['metadata', 'all', 'strict']
 
 def initialize_options(self):
 """Sets default values for options."""
- self.restructuredtext = 0
+ self.all = 0
 self.metadata = 1
 self.strict = 0
 self._warnings = []
@@ -40,11 +40,9 @@
 # perform the various tests
 if self.metadata:
 self.check_metadata()
- if self.restructuredtext:
- if self.distribution.metadata.docutils_support:
- self.check_restructuredtext()
- elif self.strict:
- raise DistutilsSetupError('The docutils package is needed.')
+ if self.all:
+ self.check_restructuredtext()
+ self.check_hooks_resolvable()
 
 # let's raise an error in strict mode, if we have at least
 # one warning
@@ -67,11 +65,24 @@
 def check_restructuredtext(self):
 """Checks if the long string fields are reST-compliant."""
 missing, warnings = self.distribution.metadata.check()
- for warning in warnings:
- line = warning[-1].get('line')
- if line is None:
- warning = warning[1]
- else:
- warning = '%s (line %s)' % (warning[1], line)
- self.warn(warning)
+ if self.distribution.metadata.docutils_support:
+ for warning in warnings:
+ line = warning[-1].get('line')
+ if line is None:
+ warning = warning[1]
+ else:
+ warning = '%s (line %s)' % (warning[1], line)
+ self.warn(warning)
+ elif self.strict:
+ raise DistutilsSetupError('The docutils package is needed.')
 
+ def check_hooks_resolvable(self):
+ for options in self.distribution.command_options.values():
+ for hook_kind in ("pre_hook", "post_hook"):
+ if hook_kind not in options:
+ break
+ for hook_name in options[hook_kind][1].values():
+ try:
+ resolve_name(hook_name)
+ except ImportError:
+ self.warn("Name '%s' cannot be resolved." % hook_name)
diff --git a/src/distutils2/command/register.py b/src/distutils2/command/register.py
--- a/src/distutils2/command/register.py
+++ b/src/distutils2/command/register.py
@@ -50,7 +50,7 @@
 self.realm = DEFAULT_REALM
 # setting options for the `check` subcommand
 check_options = {'strict': ('register', self.strict),
- 'restructuredtext': ('register', 1)}
+ 'all': ('register', 1)}
 self.distribution.command_options['check'] = check_options
 
 def run(self):
@@ -74,7 +74,7 @@
 check = self.distribution.get_command_obj('check')
 check.ensure_finalized()
 check.strict = self.strict
- check.restructuredtext = 1
+ check.all = 1
 check.run()
 
 def _set_config(self):
diff --git a/src/distutils2/tests/support.py b/src/distutils2/tests/support.py
--- a/src/distutils2/tests/support.py
+++ b/src/distutils2/tests/support.py
@@ -35,6 +35,7 @@
 from copy import deepcopy
 
 from distutils2 import log
+from distutils2.dist import Distribution
 from distutils2.log import DEBUG, INFO, WARN, ERROR, FATAL
 
 if sys.version_info >= (3, 2):
@@ -210,3 +211,25 @@
 
 def ensure_finalized(self):
 pass
+
+
+class TestDistribution(Distribution):
+ """Distribution subclasses that avoids the default search for
+ configuration files.
+
+ The ._config_files attribute must be set before
+ .parse_config_files() is called.
+ """
+
+ def find_config_files(self):
+ return self._config_files
+
+
+def create_distribution(configfiles=()):
+ """Prepares a distribution with given config files parsed."""
+ d = TestDistribution()
+ d._config_files = configfiles
+ d.parse_config_files()
+ d.parse_command_line()
+ return d
+
diff --git a/src/distutils2/tests/test_check.py b/src/distutils2/tests/test_check.py
--- a/src/distutils2/tests/test_check.py
+++ b/src/distutils2/tests/test_check.py
@@ -47,9 +47,8 @@
 cmd = self._run(metadata, strict=1)
 self.assertEqual(len(cmd._warnings), 0)
 
+ @unittest.skipUnless(_HAS_DOCUTILS, "requires docutils")
 def test_check_restructuredtext(self):
- if not _HAS_DOCUTILS: # won't test without docutils
- return
 # let's see if it detects broken rest in long_description
 broken_rest = 'title\n===\n\ntest'
 pkg_info, dist = self.create_dist(description=broken_rest)
@@ -57,18 +56,9 @@
 cmd.check_restructuredtext()
 self.assertEqual(len(cmd._warnings), 1)
 
- # let's see if we have an error with strict=1
- metadata = {'home_page': 'xxx', 'author': 'xxx',
- 'author_email': 'xxx',
- 'name': 'xxx', 'version': 'xxx',
- 'description': broken_rest}
-
- self.assertRaises(DistutilsSetupError, self._run, metadata,
- **{'strict': 1, 'restructuredtext': 1})
-
- # and non-broken rest
- metadata['description'] = 'title\n=====\n\ntest'
- cmd = self._run(metadata, strict=1, restructuredtext=1)
+ pkg_info, dist = self.create_dist(description='title\n=====\n\ntest')
+ cmd = check(dist)
+ cmd.check_restructuredtext()
 self.assertEqual(len(cmd._warnings), 0)
 
 def test_check_all(self):
@@ -76,7 +66,17 @@
 metadata = {'home_page': 'xxx', 'author': 'xxx'}
 self.assertRaises(DistutilsSetupError, self._run,
 {}, **{'strict': 1,
- 'restructuredtext': 1})
+ 'all': 1})
+
+ def test_check_hooks(self):
+ pkg_info, dist = self.create_dist()
+ dist.command_options['install'] = {
+ 'pre_hook': ('file', {"a": 'some.nonextistant.hook.ghrrraarrhll'}),
+ }
+ cmd = check(dist)
+ cmd.check_hooks_resolvable()
+ self.assertEqual(len(cmd._warnings), 1)
+ 
 
 def test_suite():
 return unittest.makeSuite(CheckTestCase)
diff --git a/src/distutils2/tests/test_dist.py b/src/distutils2/tests/test_dist.py
--- a/src/distutils2/tests/test_dist.py
+++ b/src/distutils2/tests/test_dist.py
@@ -13,7 +13,7 @@
 from distutils2.errors import DistutilsModuleError, DistutilsOptionError
 from distutils2.tests import TESTFN, captured_stdout
 from distutils2.tests import support
-from distutils2.tests.support import unittest
+from distutils2.tests.support import unittest, create_distribution
 
 
 class test_dist(Command):
@@ -30,18 +30,6 @@
 pass
 
 
-class TestDistribution(Distribution):
- """Distribution subclasses that avoids the default search for
- configuration files.
-
- The ._config_files attribute must be set before
- .parse_config_files() is called.
- """
-
- def find_config_files(self):
- return self._config_files
-
-
 class DistributionTestCase(support.TempdirManager,
 support.LoggingCatcher,
 support.WarningsCatcher,
@@ -58,13 +46,6 @@
 sys.argv[:] = self.argv[1]
 super(DistributionTestCase, self).tearDown()
 
- def create_distribution(self, configfiles=()):
- d = TestDistribution()
- d._config_files = configfiles
- d.parse_config_files()
- d.parse_command_line()
- return d
-
 def test_debug_mode(self):
 f = open(TESTFN, "w")
 try:
@@ -76,18 +57,18 @@
 files = [TESTFN]
 sys.argv.append("build")
 
- __, stdout = captured_stdout(self.create_distribution, files)
+ __, stdout = captured_stdout(create_distribution, files)
 self.assertEqual(stdout, '')
 distutils2.dist.DEBUG = True
 try:
- __, stdout = captured_stdout(self.create_distribution, files)
+ __, stdout = captured_stdout(create_distribution, files)
 self.assertEqual(stdout, '')
 finally:
 distutils2.dist.DEBUG = False
 
 def test_command_packages_unspecified(self):
 sys.argv.append("build")
- d = self.create_distribution()
+ d = create_distribution()
 self.assertEqual(d.get_command_packages(), ["distutils2.command"])
 
 def test_command_packages_cmdline(self):
@@ -97,7 +78,7 @@
 "test_dist",
 "-Ssometext",
 ])
- d = self.create_distribution()
+ d = create_distribution()
 # let's actually try to load our test command:
 self.assertEqual(d.get_command_packages(),
 ["distutils2.command", "foo.bar", "distutils2.tests"])
@@ -112,20 +93,20 @@
 print >> f, "[global]"
 print >> f, "command_packages = foo.bar, splat"
 f.close()
- d = self.create_distribution([TESTFN])
+ d = create_distribution([TESTFN])
 self.assertEqual(d.get_command_packages(),
 ["distutils2.command", "foo.bar", "splat"])
 
 # ensure command line overrides config:
 sys.argv[1:] = ["--command-packages", "spork", "build"]
- d = self.create_distribution([TESTFN])
+ d = create_distribution([TESTFN])
 self.assertEqual(d.get_command_packages(),
 ["distutils2.command", "spork"])
 
 # Setting --command-packages to '' should cause the default to
 # be used even if a config file specified something else:
 sys.argv[1:] = ["--command-packages", "", "build"]
- d = self.create_distribution([TESTFN])
+ d = create_distribution([TESTFN])
 self.assertEqual(d.get_command_packages(), ["distutils2.command"])
 
 finally:
@@ -276,7 +257,7 @@
 sys.argv.extend(["--command-packages",
 "distutils2.tests",
 "test_dist"])
- dist = self.create_distribution(config_files)
+ dist = create_distribution(config_files)
 cmd = dist.get_command_obj("test_dist")
 
 self.assertEqual(cmd.pre_hook, {"a": 'type', "b": 'type'})
@@ -306,7 +287,7 @@
 "distutils2.tests",
 "test_dist"])
 
- d = self.create_distribution([config_file])
+ d = create_distribution([config_file])
 cmd = d.get_command_obj("test_dist")
 
 # prepare the call recorders
@@ -339,7 +320,7 @@
 "distutils2.tests",
 "test_dist"])
 
- d = self.create_distribution([config_file])
+ d = create_distribution([config_file])
 cmd = d.get_command_obj("test_dist")
 cmd.ensure_finalized()
 
@@ -357,7 +338,7 @@
 "distutils2.tests",
 "test_dist"])
 
- d = self.create_distribution([config_file])
+ d = create_distribution([config_file])
 cmd = d.get_command_obj("test_dist")
 cmd.ensure_finalized()
 
--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /