# in pygobject that we need to cope with. However at # least as of pygobject3-3.13.91 the _glib module doesn't # exist anymore, so if treat these modules as optional. if modname == 'gi.repository.GLib': optional_modnames.append('gi._glib') elif modname == 'gi.repository.GObject': optional_modnames.append('gi._gobject') try: modcode = '' for m in itertools.chain(modnames, optional_modnames): try: __import__(m) modcode += _gi_build_stub(sys.modules[m]) except ImportError: if m not in optional_modnames: raise except ImportError: astng = _inspected_modules[modname] = None else: astng = AstroidBuilder(MANAGER).string_build(modcode, modname) _inspected_modules[modname] = astng else: astng = _inspected_modules[modname] if astng is None: raise AstroidBuildingException('Failed to import module %r' % modname) return astng MANAGER.register_failed_import_hook(_import_gi_module)
module.name = 'six.moves' return module def transform_six_add_metaclass(node): """Check if the given class node is decorated with *six.add_metaclass* If so, inject its argument as the metaclass of the underlying class. """ if not node.decorators: return for decorator in node.decorators.nodes: if not isinstance(decorator, nodes.Call): continue try: func = next(decorator.func.infer()) except InferenceError: continue if func.qname() == SIX_ADD_METACLASS and decorator.args: metaclass = decorator.args[0] node._metaclass = metaclass return node register_module_extender(MANAGER, 'six', six_moves_transform) register_module_extender(MANAGER, 'requests.packages.urllib3.packages.six', six_moves_transform) MANAGER.register_failed_import_hook(_six_fail_hook) MANAGER.register_transform(nodes.ClassDef, transform_six_add_metaclass)
"""Check if the given class node is decorated with *six.add_metaclass* If so, inject its argument as the metaclass of the underlying class. """ if not node.decorators: return for decorator in node.decorators.nodes: if not isinstance(decorator, nodes.Call): continue try: func = next(decorator.func.infer()) except InferenceError: continue if func.qname() == SIX_ADD_METACLASS and decorator.args: metaclass = decorator.args[0] node._metaclass = metaclass return node register_module_extender(MANAGER, "six", six_moves_transform) register_module_extender(MANAGER, "requests.packages.urllib3.packages.six", six_moves_transform) MANAGER.register_failed_import_hook(_six_fail_hook) MANAGER.register_transform( nodes.ClassDef, transform_six_add_metaclass, _looks_like_decorated_with_six_add_metaclass, )
if isinstance(func, nodes.Attribute): if func.attrname != "require_version": return False if isinstance(func.expr, nodes.Name) and func.expr.name == "gi": return True return False if isinstance(func, nodes.Name): return func.name == "require_version" return False def _register_require_version(node): # Load the gi.require_version locally try: import gi gi.require_version(node.args[0].value, node.args[1].value) except Exception: pass return node MANAGER.register_failed_import_hook(_import_gi_module) MANAGER.register_transform( nodes.Call, _register_require_version, _looks_like_require_version )
'erp5.component.extension', 'erp5.component.document', 'erp5.component.tool', 'erp5.component.interface', 'erp5.component.mixin', 'erp5.component.test') or (modname.startswith('erp5.component.') and modname.endswith('_version'))): module = AstroidBuilder(MANAGER).string_build('', modname) if modname.startswith('erp5.component'): module.package = True else: module = _buildAstroidModuleFromComponentModuleName(modname) module._absolute_import_activated = True return module MANAGER.register_failed_import_hook(fail_hook_erp5_component) ## Patch to handle 'no-name-in-module' for attributes added by monkey ## patches in Products/XXX/patches. ## ## Instead of monkey patching, an alternative would be to use Pylint ## transforms but this would require either checking dynamically which ## attributes has been added (much more complex than the current approach) ## or listing them statically (inconvenient). from astroid.exceptions import NotFoundError from astroid.scoped_nodes import Module Module_getattr = Module.getattr def _getattr(self, name, *args, **kw): try: