def _getattr(self, name, *args, **kw): try: return Module_getattr(self, name, *args, **kw) except NotFoundError, e: if self.name.startswith('erp5.'): raise real_module = __import__(self.name, fromlist=[self.name], level=0) try: attr = getattr(real_module, name) except AttributeError: raise e # XXX: What about int, str or bool not having __module__? try: origin_module_name = attr.__module__ except AttributeError: raise e if self.name == origin_module_name: raise # ast_from_class() actually works for any attribute of a Module try: ast = MANAGER.ast_from_class(attr) except AstroidBuildingException: raise e self.locals[name] = [ast] return [ast]
def _getattr(self, name, *args, **kw): try: return Module_getattr(self, name, *args, **kw) except NotFoundError, e: if self.name.startswith('erp5.'): raise real_module = __import__(self.name, fromlist=[self.name], level=0) try: attr = getattr(real_module, name) except AttributeError: raise e # REQUEST object (or any object non acquisition-wrapped) if (isinstance(attr, str) and attr == '<Special Object Used to Force Acquisition>'): raise e try: origin_module_name = attr.__module__ except AttributeError: from astroid import nodes if isinstance(attr, dict): ast = nodes.Dict(attr) elif isinstance(attr, list): ast = nodes.List(attr) elif isinstance(attr, tuple): ast = nodes.Tuple(attr) elif isinstance(attr, set): ast = nodes.Set(attr) else: try: ast = nodes.Const(attr) except Exception: raise e else: if self.name == origin_module_name: raise # ast_from_class() actually works for any attribute of a Module try: ast = MANAGER.ast_from_class(attr) except AstroidBuildingException: raise e self.locals[name] = [ast] return [ast]