def _imported_module(self, node, mod_path, relative): """notify an imported module, used to analyze dependencies """ context_name = node.root().name if relative: context_parts = context_name.split('.') if mod_path.startswith('.'): while mod_path.startswith('.'): mod_path = mod_path[1:] del context_parts[-1] # one level upwards context_parts.append(mod_path) else: context_parts[-1] = mod_path mod_path = '.'.join(context_parts) if context_name == mod_path: # module importing itself ! self.add_message('W0406', node=node) elif not is_standard_module(mod_path): # handle dependencies mod_paths = self.stats['dependencies'].setdefault(mod_path, []) if not context_name in mod_paths: mod_paths.append(context_name) if is_standard_module( mod_path, (self.package_dir(),) ): # update import graph mgraph = self.import_graph.setdefault(context_name, []) if not mod_path in mgraph: mgraph.append(mod_path)
def test_knownValues_is_standard_module_builtins(self): if sys.version_info < (3, 0): self.assertEqual(modutils.is_standard_module('__builtin__'), True) self.assertEqual(modutils.is_standard_module('builtins'), False) else: self.assertEqual(modutils.is_standard_module('__builtin__'), False) self.assertEqual(modutils.is_standard_module('builtins'), True)
def test_failing_border_cases(self): # using a subpackage/submodule path as std_path argument self.assertEqual(modutils.is_standard_module('logilab.common', common.__path__), False) # using a module + object name as modname argument self.assertEqual(modutils.is_standard_module('sys.path'), True) # this is because only the first package/module is considered self.assertEqual(modutils.is_standard_module('sys.whatever'), True) self.assertEqual(modutils.is_standard_module('logilab.whatever', common.__path__), False)
def test_knownValues_is_standard_module_4(self): if sys.version_info < (3, 0): self.assertEqual(modutils.is_standard_module('StringIO'), True) else: self.assertEqual(modutils.is_standard_module('StringIO'), False) if sys.version_info < (2, 6): self.assertEqual(modutils.is_standard_module('io'), False) else: self.assertEqual(modutils.is_standard_module('io'), True)
def test_knownValues_is_standard_module_4(self): if sys.version_info < (3, 0): self.assertEqual(modutils.is_standard_module("StringIO"), True) else: self.assertEqual(modutils.is_standard_module("StringIO"), False) if sys.version_info < (2, 6): self.assertEqual(modutils.is_standard_module("io"), False) else: self.assertEqual(modutils.is_standard_module("io"), True)
def filter_dependencies_info(dep_info, package_dir, mode='external'): """filter external or internal dependencies from dep_info (return a new dictionary containing the filtered modules only) """ if mode == 'external': filter_func = lambda x: not is_standard_module(x, (package_dir,)) else: assert mode == 'internal' filter_func = lambda x: is_standard_module(x, (package_dir,)) result = {} for importee, importers in dep_info.iteritems(): if filter_func(importee): result[importee] = importers return result
def filter_dependencies_info(dep_info, package_dir, mode='external'): """filter external or internal dependencies from dep_info (return a new dictionary containing the filtered modules only) """ if mode == 'external': filter_func = lambda x: not is_standard_module(x, (package_dir, )) else: assert mode == 'internal' filter_func = lambda x: is_standard_module(x, (package_dir, )) result = {} for importee, importers in dep_info.items(): if filter_func(importee): result[importee] = importers return result
def _add_imported_module(self, node, importedmodname): """notify an imported module, used to analyze dependencies""" context_name = node.root().name if context_name == importedmodname: # module importing itself ! self.add_message("W0406", node=node) elif not is_standard_module(importedmodname): # handle dependencies importedmodnames = self.stats["dependencies"].setdefault(importedmodname, set()) if not context_name in importedmodnames: importedmodnames.add(context_name) if is_standard_module(importedmodname, (self.package_dir(),)): # update import graph mgraph = self.import_graph.setdefault(context_name, set()) if not importedmodname in mgraph: mgraph.add(importedmodname)
def compute_module(self, context_name, mod_path): """return true if the module should be added to dependencies""" package_dir = dirname(self.project.path) if context_name == mod_path: return 0 elif is_standard_module(mod_path, (package_dir, )): return 1 return 0
def compute_module(self, context_name, mod_path): """return true if the module should be added to dependencies""" package_dir = dirname(self.project.path) if context_name == mod_path: return 0 elif is_standard_module(mod_path, (package_dir,)): return 1 return 0
def _add_imported_module(self, node, importedmodname): """notify an imported module, used to analyze dependencies""" context_name = node.root().name if context_name == importedmodname: # module importing itself ! self.add_message('W0406', node=node) elif not is_standard_module(importedmodname): # handle dependencies importedmodnames = self.stats['dependencies'].setdefault( importedmodname, set()) if not context_name in importedmodnames: importedmodnames.add(context_name) if is_standard_module(importedmodname, (self.package_dir(), )): # update import graph mgraph = self.import_graph.setdefault(context_name, set()) if not importedmodname in mgraph: mgraph.add(importedmodname)
def test_knownValues_is_standard_module_4(self): self.assertEqual(modutils.is_standard_module('marshal'), True) self.assertEqual(modutils.is_standard_module('hashlib'), True) self.assertEqual(modutils.is_standard_module('pickle'), True) self.assertEqual(modutils.is_standard_module('email'), True) self.assertEqual(modutils.is_standard_module('io'), sys.version_info >= (2, 6)) self.assertEqual(modutils.is_standard_module('StringIO'), sys.version_info < (3, 0))
def test_4(self): self.assertEqual(modutils.is_standard_module('marshal'), True) self.assertEqual(modutils.is_standard_module('pickle'), True) self.assertEqual(modutils.is_standard_module('email'), True) self.assertEqual(modutils.is_standard_module('StringIO'), sys.version_info < (3, 0)) venv_py3 = sys.version_info[0] >= 3 and hasattr(sys, 'real_prefix') if not venv_py3: # those modules are symlinked by virtualenv (but not by python's venv) self.assertEqual(modutils.is_standard_module('hashlib'), True) self.assertEqual(modutils.is_standard_module('io'), True)
def _add_imported_module(self, node, importedmodname): """notify an imported module, used to analyze dependencies""" importedmodname = get_module_part(importedmodname) context_name = node.root().name if context_name == importedmodname: # module importing itself ! self.add_message('import-self', node=node) elif not is_standard_module(importedmodname): # handle dependencies importedmodnames = self.stats['dependencies'].setdefault( importedmodname, set()) if not context_name in importedmodnames: importedmodnames.add(context_name) # update import graph mgraph = self.import_graph.setdefault(context_name, set()) if not importedmodname in mgraph: mgraph.add(importedmodname)
def test_knownValues_is_standard_module_unknown(self): self.assertEqual(modutils.is_standard_module('unknown'), False)
def test_knownValues_is_standard_module_nonstandard(self): self.assertEqual(modutils.is_standard_module('logilab'), False)
def test_knownValues_is_standard_module_builtin(self): self.assertEqual(modutils.is_standard_module('sys'), True)
def test_unknown(self): self.assertEqual(modutils.is_standard_module('unknown'), False)
def test_custom_path(self): self.assertEqual( modutils.is_standard_module('data.module', (DATADIR, )), True) self.assertEqual( modutils.is_standard_module('data.module', (path.abspath(DATADIR), )), True)
def test_knownValues_is_standard_module_0(self): self.assertEqual(modutils.is_standard_module('__builtin__'), True)
def test_builtin(self): self.assertEqual(modutils.is_standard_module('sys'), True)
def test_knownValues_is_standard_module_1(self): self.assertEqual(modutils.is_standard_module("sys"), True)
def test_knownValues_is_standard_module_4(self): self.assertEqual(modutils.is_standard_module('StringIO'), True)
def test_knownValues_is_standard_module_5(self): self.assertEqual( modutils.is_standard_module('data.module', (DATADIR, )), True) self.assertEqual( modutils.is_standard_module('data.module', (path.abspath(DATADIR), )), True)
def test_knownValues_is_standard_module_3(self): self.assertEqual(modutils.is_standard_module('unknown'), False)
def test_nonstandard(self): self.assertEqual(modutils.is_standard_module('logilab'), False)
def test_knownValues_is_standard_module_2(self): self.assertEqual(modutils.is_standard_module("logilab"), False)
def test_knownValues_is_standard_module_custom_path(self): self.assertEqual(modutils.is_standard_module('data.module', (DATADIR,)), True) self.assertEqual(modutils.is_standard_module('data.module', (path.abspath(DATADIR),)), True)
def test_knownValues_is_standard_module_3(self): self.assertEqual(modutils.is_standard_module("unknown"), False)
def test_knownValues_is_standard_module_2(self): self.assertEqual(modutils.is_standard_module('logilab'), False)
def test_knownValues_is_standard_module_1(self): self.assertEqual(modutils.is_standard_module('sys'), True)