[Python-checkins] r74108 - in python/branches/release31-maint: Lib/importlib/abc.py Lib/importlib/test/test_abc.py Misc/NEWS
brett.cannon
python-checkins at python.org
Mon Jul 20 05:22:43 CEST 2009
Author: brett.cannon
Date: Mon Jul 20 05:22:43 2009
New Revision: 74108
Log:
Merged revisions 74107 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r74107 | brett.cannon | 2009-07-19 20:19:18 -0700 (Sun, 19 Jul 2009) | 8 lines
Importlib's documentation said that importlib.abc.PyLoader inherited from
importlib.abc.ResourceLoader, when in fact it did not. Fixed the ABC to inherit
as documented.
This does in introduce an backwards-incompatiblity as the code in PyLoader
already required the single method ResourceLoader defined as an abstract
method.
........
Modified:
python/branches/release31-maint/ (props changed)
python/branches/release31-maint/Lib/importlib/abc.py
python/branches/release31-maint/Lib/importlib/test/test_abc.py
python/branches/release31-maint/Misc/NEWS
Modified: python/branches/release31-maint/Lib/importlib/abc.py
==============================================================================
--- python/branches/release31-maint/Lib/importlib/abc.py (original)
+++ python/branches/release31-maint/Lib/importlib/abc.py Mon Jul 20 05:22:43 2009
@@ -76,7 +76,7 @@
InspectLoader.register(machinery.FrozenImporter)
-class PyLoader(_bootstrap.PyLoader, InspectLoader):
+class PyLoader(_bootstrap.PyLoader, ResourceLoader, InspectLoader):
"""Abstract base class to assist in loading source code by requiring only
back-end storage methods to be implemented.
Modified: python/branches/release31-maint/Lib/importlib/test/test_abc.py
==============================================================================
--- python/branches/release31-maint/Lib/importlib/test/test_abc.py (original)
+++ python/branches/release31-maint/Lib/importlib/test/test_abc.py Mon Jul 20 05:22:43 2009
@@ -1,30 +1,77 @@
from importlib import abc
from importlib import machinery
+import inspect
import unittest
-class SubclassTests(unittest.TestCase):
+class InheritanceTests:
- """Test that the various classes in importlib are subclasses of the
- expected ABCS."""
+ """Test that the specified class is a subclass/superclass of the expected
+ classes."""
- def verify(self, ABC, *classes):
- """Verify the classes are subclasses of the ABC."""
- for cls in classes:
- self.assert_(issubclass(cls, ABC))
-
- def test_Finder(self):
- self.verify(abc.Finder, machinery.BuiltinImporter,
- machinery.FrozenImporter, machinery.PathFinder)
-
- def test_Loader(self):
- self.verify(abc.Loader, machinery.BuiltinImporter,
- machinery.FrozenImporter)
+ subclasses = []
+ superclasses = []
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ assert self.subclasses or self.superclasses, self.__class__
+ self.__test = getattr(abc, self.__class__.__name__)
+
+ def test_subclasses(self):
+ # Test that the expected subclasses inherit.
+ for subclass in self.subclasses:
+ self.assertTrue(issubclass(subclass, self.__test),
+ "{0} is not a subclass of {1}".format(subclass, self.__test))
+
+ def test_superclasses(self):
+ # Test that the class inherits from the expected superclasses.
+ for superclass in self.superclasses:
+ self.assertTrue(issubclass(self.__test, superclass),
+ "{0} is not a superclass of {1}".format(superclass, self.__test))
+
+
+class Finder(InheritanceTests, unittest.TestCase):
+
+ subclasses = [machinery.BuiltinImporter, machinery.FrozenImporter,
+ machinery.PathFinder]
+
+
+class Loader(InheritanceTests, unittest.TestCase):
+
+ subclasses = [abc.PyLoader]
+
+
+class ResourceLoader(InheritanceTests, unittest.TestCase):
+
+ superclasses = [abc.Loader]
+
+
+class InspectLoader(InheritanceTests, unittest.TestCase):
+
+ superclasses = [abc.Loader]
+ subclasses = [abc.PyLoader, machinery.BuiltinImporter,
+ machinery.FrozenImporter]
+
+
+class PyLoader(InheritanceTests, unittest.TestCase):
+
+ superclasses = [abc.Loader, abc.ResourceLoader, abc.InspectLoader]
+
+
+class PyPycLoader(InheritanceTests, unittest.TestCase):
+
+ superclasses = [abc.PyLoader]
def test_main():
from test.support import run_unittest
- run_unittest(SubclassTests)
+ classes = []
+ for class_ in globals().values():
+ if (inspect.isclass(class_) and
+ issubclass(class_, unittest.TestCase) and
+ issubclass(class_, InheritanceTests)):
+ classes.append(class_)
+ run_unittest(*classes)
if __name__ == '__main__':
Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS (original)
+++ python/branches/release31-maint/Misc/NEWS Mon Jul 20 05:22:43 2009
@@ -37,6 +37,10 @@
Library
-------
+- importlib.abc.PyLoader did not inherit from importlib.abc.ResourceLoader like
+ the documentation said it did even though the code in PyLoader relied on the
+ abstract method required by ResourceLoader.
+
- Issue #6431: Make Fraction type return NotImplemented when it doesn't
know how to handle a comparison without loss of precision. Also add
correct handling of infinities and nans for comparisons with float.
More information about the Python-checkins
mailing list