[Python-checkins] distutils2: Merge from Konrad, minus trailing spaces and plus renaming
tarek.ziade
python-checkins at python.org
Thu Aug 19 08:34:13 CEST 2010
tarek.ziade pushed e71d39135e23 to distutils2:
http://hg.python.org/distutils2/rev/e71d39135e23
changeset: 552:e71d39135e23
parent: 549:6640d8916744
parent: 551:6eea7e7a79da
user: ?ric Araujo <merwok at netwok.org>
date: Thu Aug 12 19:13:25 2010 +0200
summary: Merge from Konrad, minus trailing spaces and plus renaming
files: src/distutils2/dist.py, src/distutils2/tests/test_util.py, src/distutils2/util.py
diff --git a/src/distutils2/dist.py b/src/distutils2/dist.py
--- a/src/distutils2/dist.py
+++ b/src/distutils2/dist.py
@@ -16,7 +16,7 @@
from distutils2.errors import (DistutilsOptionError, DistutilsArgError,
DistutilsModuleError, DistutilsClassError)
from distutils2.fancy_getopt import FancyGetopt, translate_longopt
-from distutils2.util import check_environ, strtobool, resolve_dotted_name
+from distutils2.util import check_environ, strtobool, resolve_name
from distutils2 import log
from distutils2.metadata import DistributionMetadata
@@ -967,7 +967,7 @@
if hooks is None:
return
for hook in hooks.values():
- hook_func = resolve_dotted_name(hook)
+ hook_func = resolve_name(hook)
hook_func(cmd_obj)
# -- Distribution query methods ------------------------------------
diff --git a/src/distutils2/tests/test_util.py b/src/distutils2/tests/test_util.py
--- a/src/distutils2/tests/test_util.py
+++ b/src/distutils2/tests/test_util.py
@@ -18,7 +18,7 @@
_find_exe_version, _MAC_OS_X_LD_VERSION,
byte_compile, find_packages, spawn, find_executable,
_nt_quote_args, get_pypirc_path, generate_pypirc,
- read_pypirc, resolve_dotted_name)
+ read_pypirc, resolve_name)
from distutils2 import util
from distutils2.tests import support
@@ -342,16 +342,30 @@
res = find_packages([root], ['pkg1.pkg2'])
self.assertEqual(set(res), set(['pkg1', 'pkg5', 'pkg1.pkg3', 'pkg1.pkg3.pkg6']))
- def test_resolve_dotted_name(self):
- self.assertEqual(UtilTestCase, resolve_dotted_name("distutils2.tests.test_util.UtilTestCase"))
- self.assertEqual(UtilTestCase.test_resolve_dotted_name,
- resolve_dotted_name("distutils2.tests.test_util.UtilTestCase.test_resolve_dotted_name"))
+ def test_resolve_name(self):
+ self.assertEqual(UtilTestCase, resolve_name("distutils2.tests.test_util.UtilTestCase"))
+ self.assertEqual(UtilTestCase.test_resolve_name,
+ resolve_name("distutils2.tests.test_util.UtilTestCase.test_resolve_name"))
- self.assertRaises(ImportError, resolve_dotted_name,
+ self.assertRaises(ImportError, resolve_name,
"distutils2.tests.test_util.UtilTestCaseNot")
- self.assertRaises(ImportError, resolve_dotted_name,
+ self.assertRaises(ImportError, resolve_name,
"distutils2.tests.test_util.UtilTestCase.nonexistent_attribute")
+ def test_import_nested_first_time(self):
+ tmp_dir = self.mkdtemp()
+ os.makedirs(os.path.join(tmp_dir, 'a', 'b'))
+ self.write_file(os.path.join(tmp_dir, 'a', '__init__.py'), '')
+ self.write_file(os.path.join(tmp_dir, 'a', 'b', '__init__.py'), '')
+ self.write_file(os.path.join(tmp_dir, 'a', 'b', 'c.py'), 'class Foo: pass')
+
+ try:
+ sys.path.append(tmp_dir)
+ resolve_name("a.b.c.Foo")
+ # assert nothing raised
+ finally:
+ sys.path.remove(tmp_dir)
+
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_run_2to3_on_code(self):
content = "print 'test'"
diff --git a/src/distutils2/util.py b/src/distutils2/util.py
--- a/src/distutils2/util.py
+++ b/src/distutils2/util.py
@@ -636,21 +636,26 @@
packages.append(package_name)
return packages
+def resolve_name(name):
+ """Resolve a name like ``module.object`` to an object and return it."""
+ parts = name.split('.')
+ cursor = len(parts)
+ module_name, rest = parts[:cursor], parts[cursor:]
-def resolve_dotted_name(dotted_name):
- module_name, rest = dotted_name.split('.')[0], dotted_name.split('.')[1:]
- while len(rest) > 0:
+ while cursor > 0:
try:
- ret = __import__(module_name)
+ ret = __import__('.'.join(module_name))
break
except ImportError:
- if rest == []:
+ if cursor == 0:
raise
- module_name += ('.' + rest[0])
- rest = rest[1:]
- while len(rest) > 0:
+ cursor -= 1
+ module_name = parts[:cursor]
+ rest = parts[cursor:]
+
+ for part in parts[1:]:
try:
- ret = getattr(ret, rest.pop(0))
+ ret = getattr(ret, part)
except AttributeError:
raise ImportError
return ret
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list