From c1db0d3858424ccaaab2e9dd0ee14fcbb4b91558 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Sun, 2 Jun 2019 13:08:44 +0100 Subject: [PATCH] issue #590: move example modules to module_finder/, fix/add tests --- .../module_finder_testmod/__init__.py | 0 .../module_finder_testmod/empty_mod.py | 0 .../module_finder_testmod/regular_mod.py | 0 .../sibling_dep_mod_abs_import.py | 0 .../sibling_dep_mod_py2_import.py | 0 .../sibling_dep_mod_rel_import.py | 0 .../pkg_like_plumbum/__init__.py | 0 .../pkg_like_plumbum/colors.py | 0 .../simple_pkg/__init__.py | 0 .../data/{ => module_finder}/simple_pkg/a.py | 0 .../data/{ => module_finder}/simple_pkg/b.py | 0 .../simple_pkg/imports_replaces_self.py | 0 .../{ => module_finder}/simple_pkg/ping.py | 0 .../simple_pkg/replaces_self.py | 0 .../six_brokenpkg/__init__.py | 0 .../{ => module_finder}/six_brokenpkg/_six.py | 0 .../{ => module_finder}/webproject/manage.py | 0 .../webproject/serve_django_app.py | 0 .../webproject/webapp/__init__.py | 0 .../webproject/webapp/admin.py | 0 .../webproject/webapp/apps.py | 0 .../webproject/webapp/migrations/__init__.py | 0 .../webproject/webapp/models.py | 0 .../webproject/webapp/tests.py | 0 .../webproject/webapp/views.py | 0 .../webproject/webproject/__init__.py | 0 .../webproject/webproject/settings.py | 0 .../webproject/webproject/urls.py | 0 .../webproject/webproject/wsgi.py | 0 tests/module_finder_test.py | 54 ++++++++++++------- tests/testlib.py | 1 - 31 files changed, 36 insertions(+), 19 deletions(-) rename tests/data/{ => module_finder}/module_finder_testmod/__init__.py (100%) rename tests/data/{ => module_finder}/module_finder_testmod/empty_mod.py (100%) rename tests/data/{ => module_finder}/module_finder_testmod/regular_mod.py (100%) rename tests/data/{ => module_finder}/module_finder_testmod/sibling_dep_mod_abs_import.py (100%) rename tests/data/{ => module_finder}/module_finder_testmod/sibling_dep_mod_py2_import.py (100%) rename tests/data/{ => module_finder}/module_finder_testmod/sibling_dep_mod_rel_import.py (100%) rename tests/data/{ => module_finder}/pkg_like_plumbum/__init__.py (100%) rename tests/data/{ => module_finder}/pkg_like_plumbum/colors.py (100%) rename tests/data/{ => module_finder}/simple_pkg/__init__.py (100%) rename tests/data/{ => module_finder}/simple_pkg/a.py (100%) rename tests/data/{ => module_finder}/simple_pkg/b.py (100%) rename tests/data/{ => module_finder}/simple_pkg/imports_replaces_self.py (100%) rename tests/data/{ => module_finder}/simple_pkg/ping.py (100%) rename tests/data/{ => module_finder}/simple_pkg/replaces_self.py (100%) rename tests/data/{ => module_finder}/six_brokenpkg/__init__.py (100%) rename tests/data/{ => module_finder}/six_brokenpkg/_six.py (100%) rename tests/data/{ => module_finder}/webproject/manage.py (100%) rename tests/data/{ => module_finder}/webproject/serve_django_app.py (100%) rename tests/data/{ => module_finder}/webproject/webapp/__init__.py (100%) rename tests/data/{ => module_finder}/webproject/webapp/admin.py (100%) rename tests/data/{ => module_finder}/webproject/webapp/apps.py (100%) rename tests/data/{ => module_finder}/webproject/webapp/migrations/__init__.py (100%) rename tests/data/{ => module_finder}/webproject/webapp/models.py (100%) rename tests/data/{ => module_finder}/webproject/webapp/tests.py (100%) rename tests/data/{ => module_finder}/webproject/webapp/views.py (100%) rename tests/data/{ => module_finder}/webproject/webproject/__init__.py (100%) rename tests/data/{ => module_finder}/webproject/webproject/settings.py (100%) rename tests/data/{ => module_finder}/webproject/webproject/urls.py (100%) rename tests/data/{ => module_finder}/webproject/webproject/wsgi.py (100%) diff --git a/tests/data/module_finder_testmod/__init__.py b/tests/data/module_finder/module_finder_testmod/__init__.py similarity index 100% rename from tests/data/module_finder_testmod/__init__.py rename to tests/data/module_finder/module_finder_testmod/__init__.py diff --git a/tests/data/module_finder_testmod/empty_mod.py b/tests/data/module_finder/module_finder_testmod/empty_mod.py similarity index 100% rename from tests/data/module_finder_testmod/empty_mod.py rename to tests/data/module_finder/module_finder_testmod/empty_mod.py diff --git a/tests/data/module_finder_testmod/regular_mod.py b/tests/data/module_finder/module_finder_testmod/regular_mod.py similarity index 100% rename from tests/data/module_finder_testmod/regular_mod.py rename to tests/data/module_finder/module_finder_testmod/regular_mod.py diff --git a/tests/data/module_finder_testmod/sibling_dep_mod_abs_import.py b/tests/data/module_finder/module_finder_testmod/sibling_dep_mod_abs_import.py similarity index 100% rename from tests/data/module_finder_testmod/sibling_dep_mod_abs_import.py rename to tests/data/module_finder/module_finder_testmod/sibling_dep_mod_abs_import.py diff --git a/tests/data/module_finder_testmod/sibling_dep_mod_py2_import.py b/tests/data/module_finder/module_finder_testmod/sibling_dep_mod_py2_import.py similarity index 100% rename from tests/data/module_finder_testmod/sibling_dep_mod_py2_import.py rename to tests/data/module_finder/module_finder_testmod/sibling_dep_mod_py2_import.py diff --git a/tests/data/module_finder_testmod/sibling_dep_mod_rel_import.py b/tests/data/module_finder/module_finder_testmod/sibling_dep_mod_rel_import.py similarity index 100% rename from tests/data/module_finder_testmod/sibling_dep_mod_rel_import.py rename to tests/data/module_finder/module_finder_testmod/sibling_dep_mod_rel_import.py diff --git a/tests/data/pkg_like_plumbum/__init__.py b/tests/data/module_finder/pkg_like_plumbum/__init__.py similarity index 100% rename from tests/data/pkg_like_plumbum/__init__.py rename to tests/data/module_finder/pkg_like_plumbum/__init__.py diff --git a/tests/data/pkg_like_plumbum/colors.py b/tests/data/module_finder/pkg_like_plumbum/colors.py similarity index 100% rename from tests/data/pkg_like_plumbum/colors.py rename to tests/data/module_finder/pkg_like_plumbum/colors.py diff --git a/tests/data/simple_pkg/__init__.py b/tests/data/module_finder/simple_pkg/__init__.py similarity index 100% rename from tests/data/simple_pkg/__init__.py rename to tests/data/module_finder/simple_pkg/__init__.py diff --git a/tests/data/simple_pkg/a.py b/tests/data/module_finder/simple_pkg/a.py similarity index 100% rename from tests/data/simple_pkg/a.py rename to tests/data/module_finder/simple_pkg/a.py diff --git a/tests/data/simple_pkg/b.py b/tests/data/module_finder/simple_pkg/b.py similarity index 100% rename from tests/data/simple_pkg/b.py rename to tests/data/module_finder/simple_pkg/b.py diff --git a/tests/data/simple_pkg/imports_replaces_self.py b/tests/data/module_finder/simple_pkg/imports_replaces_self.py similarity index 100% rename from tests/data/simple_pkg/imports_replaces_self.py rename to tests/data/module_finder/simple_pkg/imports_replaces_self.py diff --git a/tests/data/simple_pkg/ping.py b/tests/data/module_finder/simple_pkg/ping.py similarity index 100% rename from tests/data/simple_pkg/ping.py rename to tests/data/module_finder/simple_pkg/ping.py diff --git a/tests/data/simple_pkg/replaces_self.py b/tests/data/module_finder/simple_pkg/replaces_self.py similarity index 100% rename from tests/data/simple_pkg/replaces_self.py rename to tests/data/module_finder/simple_pkg/replaces_self.py diff --git a/tests/data/six_brokenpkg/__init__.py b/tests/data/module_finder/six_brokenpkg/__init__.py similarity index 100% rename from tests/data/six_brokenpkg/__init__.py rename to tests/data/module_finder/six_brokenpkg/__init__.py diff --git a/tests/data/six_brokenpkg/_six.py b/tests/data/module_finder/six_brokenpkg/_six.py similarity index 100% rename from tests/data/six_brokenpkg/_six.py rename to tests/data/module_finder/six_brokenpkg/_six.py diff --git a/tests/data/webproject/manage.py b/tests/data/module_finder/webproject/manage.py similarity index 100% rename from tests/data/webproject/manage.py rename to tests/data/module_finder/webproject/manage.py diff --git a/tests/data/webproject/serve_django_app.py b/tests/data/module_finder/webproject/serve_django_app.py similarity index 100% rename from tests/data/webproject/serve_django_app.py rename to tests/data/module_finder/webproject/serve_django_app.py diff --git a/tests/data/webproject/webapp/__init__.py b/tests/data/module_finder/webproject/webapp/__init__.py similarity index 100% rename from tests/data/webproject/webapp/__init__.py rename to tests/data/module_finder/webproject/webapp/__init__.py diff --git a/tests/data/webproject/webapp/admin.py b/tests/data/module_finder/webproject/webapp/admin.py similarity index 100% rename from tests/data/webproject/webapp/admin.py rename to tests/data/module_finder/webproject/webapp/admin.py diff --git a/tests/data/webproject/webapp/apps.py b/tests/data/module_finder/webproject/webapp/apps.py similarity index 100% rename from tests/data/webproject/webapp/apps.py rename to tests/data/module_finder/webproject/webapp/apps.py diff --git a/tests/data/webproject/webapp/migrations/__init__.py b/tests/data/module_finder/webproject/webapp/migrations/__init__.py similarity index 100% rename from tests/data/webproject/webapp/migrations/__init__.py rename to tests/data/module_finder/webproject/webapp/migrations/__init__.py diff --git a/tests/data/webproject/webapp/models.py b/tests/data/module_finder/webproject/webapp/models.py similarity index 100% rename from tests/data/webproject/webapp/models.py rename to tests/data/module_finder/webproject/webapp/models.py diff --git a/tests/data/webproject/webapp/tests.py b/tests/data/module_finder/webproject/webapp/tests.py similarity index 100% rename from tests/data/webproject/webapp/tests.py rename to tests/data/module_finder/webproject/webapp/tests.py diff --git a/tests/data/webproject/webapp/views.py b/tests/data/module_finder/webproject/webapp/views.py similarity index 100% rename from tests/data/webproject/webapp/views.py rename to tests/data/module_finder/webproject/webapp/views.py diff --git a/tests/data/webproject/webproject/__init__.py b/tests/data/module_finder/webproject/webproject/__init__.py similarity index 100% rename from tests/data/webproject/webproject/__init__.py rename to tests/data/module_finder/webproject/webproject/__init__.py diff --git a/tests/data/webproject/webproject/settings.py b/tests/data/module_finder/webproject/webproject/settings.py similarity index 100% rename from tests/data/webproject/webproject/settings.py rename to tests/data/module_finder/webproject/webproject/settings.py diff --git a/tests/data/webproject/webproject/urls.py b/tests/data/module_finder/webproject/webproject/urls.py similarity index 100% rename from tests/data/webproject/webproject/urls.py rename to tests/data/module_finder/webproject/webproject/urls.py diff --git a/tests/data/webproject/webproject/wsgi.py b/tests/data/module_finder/webproject/webproject/wsgi.py similarity index 100% rename from tests/data/webproject/webproject/wsgi.py rename to tests/data/module_finder/webproject/webproject/wsgi.py diff --git a/tests/module_finder_test.py b/tests/module_finder_test.py index 409adc6d..93755aa0 100644 --- a/tests/module_finder_test.py +++ b/tests/module_finder_test.py @@ -8,6 +8,9 @@ import mitogen.master import testlib +MODS_PATH = testlib.data_path('module_finder') +sys.path.append(MODS_PATH) + class ConstructorTest(testlib.TestCase): klass = mitogen.master.ModuleFinder @@ -51,10 +54,10 @@ class IsStdlibNameTest(testlib.TestCase): class GetMainModuleDefectivePython3x(testlib.TestCase): - klass = mitogen.master.ModuleFinder + klass = mitogen.master.DefectivePython3xMainMethod def call(self, fullname): - return self.klass()._get_main_module_defective_python_3x(fullname) + return self.klass().find(fullname) def test_builtin(self): self.assertEquals(None, self.call('sys')) @@ -77,23 +80,23 @@ class GetMainModuleDefectivePython3x(testlib.TestCase): self.assertFalse(is_pkg) -class GetModuleViaPkgutilTest(testlib.TestCase): - klass = mitogen.master.ModuleFinder +class PkgutilMethodTest(testlib.TestCase): + klass = mitogen.master.PkgutilMethod def call(self, fullname): - return self.klass()._get_module_via_pkgutil(fullname) + return self.klass().find(fullname) def test_empty_source_pkg(self): path, src, is_pkg = self.call('module_finder_testmod') self.assertEquals(path, - testlib.data_path('module_finder_testmod/__init__.py')) + os.path.join(MODS_PATH, 'module_finder_testmod/__init__.py')) self.assertEquals(mitogen.core.b(''), src) self.assertTrue(is_pkg) def test_empty_source_module(self): path, src, is_pkg = self.call('module_finder_testmod.empty_mod') self.assertEquals(path, - testlib.data_path('module_finder_testmod/empty_mod.py')) + os.path.join(MODS_PATH, 'module_finder_testmod/empty_mod.py')) self.assertEquals(mitogen.core.b(''), src) self.assertFalse(is_pkg) @@ -101,17 +104,17 @@ class GetModuleViaPkgutilTest(testlib.TestCase): from module_finder_testmod import regular_mod path, src, is_pkg = self.call('module_finder_testmod.regular_mod') self.assertEquals(path, - testlib.data_path('module_finder_testmod/regular_mod.py')) + os.path.join(MODS_PATH, 'module_finder_testmod/regular_mod.py')) self.assertEquals(mitogen.core.to_text(src), inspect.getsource(regular_mod)) self.assertFalse(is_pkg) -class GetModuleViaSysModulesTest(testlib.TestCase): - klass = mitogen.master.ModuleFinder +class SysModulesMethodTest(testlib.TestCase): + klass = mitogen.master.SysModulesMethod def call(self, fullname): - return self.klass()._get_module_via_sys_modules(fullname) + return self.klass().find(fullname) def test_main(self): import __main__ @@ -133,10 +136,10 @@ class GetModuleViaSysModulesTest(testlib.TestCase): class GetModuleViaParentEnumerationTest(testlib.TestCase): - klass = mitogen.master.ModuleFinder + klass = mitogen.master.ParentEnumerationMethod def call(self, fullname): - return self.klass()._get_module_via_parent_enumeration(fullname) + return self.klass().find(fullname) def test_main_fails(self): import __main__ @@ -157,13 +160,28 @@ class GetModuleViaParentEnumerationTest(testlib.TestCase): # plumbum has been eating too many rainbow-colored pills import pkg_like_plumbum.colors path, src, is_pkg = self.call('pkg_like_plumbum.colors') - self.assertEquals(path, - testlib.data_path('pkg_like_plumbum/colors.py')) + modpath = os.path.join(MODS_PATH, 'pkg_like_plumbum/colors.py') + self.assertEquals(path, modpath) - s = open(testlib.data_path('pkg_like_plumbum/colors.py'), 'rb').read() - self.assertEquals(src, s) + self.assertEquals(src, open(modpath, 'rb').read()) self.assertFalse(is_pkg) + def test_ansible_module_utils_distro_succeeds(self): + # #590: a package that turns itself into a module. + import pkg_like_ansible.module_utils.distro as d + self.assertEquals(d.I_AM, "the module that replaced the package") + self.assertEquals( + sys.modules['pkg_like_ansible.module_utils.distro'].__name__, + 'pkg_like_ansible.module_utils.distro._distro' + ) + + path, src, is_pkg = self.call('pkg_like_ansible.module_utils.distro') + modpath = os.path.join(MODS_PATH, + 'pkg_like_ansible/module_utils/distro/__init__.py') + self.assertEquals(path, modpath) + self.assertEquals(src, open(modpath, 'rb').read()) + self.assertEquals(is_pkg, True) + class ResolveRelPathTest(testlib.TestCase): klass = mitogen.master.ModuleFinder @@ -235,7 +253,7 @@ class FindRelatedTest(testlib.TestCase): if sys.version_info > (2, 6): class DjangoMixin(object): - WEBPROJECT_PATH = testlib.data_path('webproject') + WEBPROJECT_PATH = os.path.join(MODS_PATH, 'webproject') # TODO: rip out Django and replace with a static tree of weird imports # that don't depend on .. Django! The hack below is because the version diff --git a/tests/testlib.py b/tests/testlib.py index 37c3c654..2ee672be 100644 --- a/tests/testlib.py +++ b/tests/testlib.py @@ -41,7 +41,6 @@ except NameError: LOG = logging.getLogger(__name__) DATA_DIR = os.path.join(os.path.dirname(__file__), 'data') -sys.path.append(DATA_DIR) if mitogen.is_master: mitogen.utils.log_to_file()