Commit 828f6035 authored by David Wilson's avatar David Wilson

importer: Delete _get_module_via_parent entirely

Can't figure out what it's supposed to do any more, and can't find a
version of Ansible before August 2016 (when I wrote that code) that
seems to need it.

Add some more mitigations to avoid sending dylibs.
parent 58102c81
...@@ -401,6 +401,11 @@ class ModuleFinder(object): ...@@ -401,6 +401,11 @@ class ModuleFinder(object):
return False return False
def _py_filename(self, path):
path = path.rstrip('co')
if path.endswith('.py'):
return path
def _get_module_via_pkgutil(self, fullname): def _get_module_via_pkgutil(self, fullname):
"""Attempt to fetch source code via pkgutil. In an ideal world, this """Attempt to fetch source code via pkgutil. In an ideal world, this
would be the only required implementation of get_module().""" would be the only required implementation of get_module()."""
...@@ -410,7 +415,7 @@ class ModuleFinder(object): ...@@ -410,7 +415,7 @@ class ModuleFinder(object):
return return
try: try:
path = loader.get_filename(fullname) path = self._py_filename(loader.get_filename(fullname))
source = loader.get_source(fullname) source = loader.get_source(fullname)
if path is not None and source is not None: if path is not None and source is not None:
return path, source, loader.is_package(fullname) return path, source, loader.is_package(fullname)
...@@ -426,9 +431,8 @@ class ModuleFinder(object): ...@@ -426,9 +431,8 @@ class ModuleFinder(object):
fullname) fullname)
return return
modpath = getattr(module, '__file__', '') modpath = self._py_filename(getattr(module, '__file__', ''))
if not modpath.rstrip('co').endswith('.py'): if not modpath:
# Probably a native module.
return return
is_pkg = hasattr(module, '__path__') is_pkg = hasattr(module, '__path__')
...@@ -444,30 +448,8 @@ class ModuleFinder(object): ...@@ -444,30 +448,8 @@ class ModuleFinder(object):
source, source,
hasattr(module, '__path__')) hasattr(module, '__path__'))
def _get_module_via_parent(self, fullname):
"""Attempt to fetch source code by examining the module's (hopefully
less insane) parent package. Required for ansible.compat.six."""
# Need to find the ancient version of Ansible with the ancient
# non-package version of six that required this method to exist.
# Currently it doesn't seem to be needed at all, and it's broken for
# packages.
pkgname, _, modname = fullname.rpartition('.')
pkg = sys.modules.get(pkgname)
if not (isinstance(pkg, types.ModuleType) and hasattr(pkg, '__file__')):
return
pkg_path = os.path.dirname(pkg.__file__)
try:
fp, path, ext = imp.find_module(modname, [pkg_path])
if ext and ext[-1] == imp.PKG_DIRECTORY:
assert 0, "TODO"
return path, fp.read(), False
except ImportError, e:
LOG.debug('imp.find_module(%r, %r) -> %s', modname, [pkg_path], e)
get_module_methods = [_get_module_via_pkgutil, get_module_methods = [_get_module_via_pkgutil,
_get_module_via_sys_modules, _get_module_via_sys_modules]
_get_module_via_parent]
def get_module_source(self, fullname): def get_module_source(self, fullname):
"""Given the name of a loaded module `fullname`, attempt to find its """Given the name of a loaded module `fullname`, attempt to find its
......
...@@ -103,29 +103,6 @@ class GetModuleViaSysModulesTest(testlib.TestCase): ...@@ -103,29 +103,6 @@ class GetModuleViaSysModulesTest(testlib.TestCase):
self.assertEquals(None, tup) self.assertEquals(None, tup)
class GetModuleViaParentEnumerationTest(testlib.TestCase):
klass = mitogen.master.ModuleFinder
def call(self, fullname):
return self.klass()._get_module_via_parent(fullname)
def test_simple_module(self):
import email.utils
path, src, is_pkg = self.call('email.utils')
self.assertEquals(path, email.utils.__file__.rstrip('co'))
self.assertEquals(src, file(email.utils.__file__.rstrip('co')).read())
self.assertFalse(is_pkg)
def test_ansible_compat_six(self):
# See comment in _get_module_via_parent
raise unittest.SkipTest()
import ansible.compat.six
path, src, is_pkg = self.call('ansible.compat.six')
self.assertEquals(path, __main__.__file__)
self.assertEquals(src, file(path).read())
self.assertFalse(is_pkg)
class ResolveRelPathTest(testlib.TestCase): class ResolveRelPathTest(testlib.TestCase):
klass = mitogen.master.ModuleFinder klass = mitogen.master.ModuleFinder
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment