def igetattr(self, name, context=None): """infered getattr, need special treatment in class to handle descriptors """ # set lookoup name since this is necessary to infer on import nodes for # instance context = copy_context(context) context.lookupname = name try: for infered in _infer_stmts(self.getattr(name, context), context, frame=self): # yield YES object instead of descriptors when necessary if not isinstance(infered, Const) and isinstance( infered, Instance): try: infered._proxied.getattr('__get__', context) except NotFoundError: yield infered else: yield YES else: yield infered except NotFoundError: if not name.startswith('__') and self.has_dynamic_getattr(context): # class handle some dynamic attributes, return a YES object yield YES else: raise InferenceError(name)
def infer_global(self, context=None): if context.lookupname is None: raise InferenceError() try: return _infer_stmts(self.root().getattr(context.lookupname), context) except NotFoundError: raise InferenceError()
def igetattr(self, name, context=None): """infered getattr, need special treatment in class to handle descriptors """ # set lookoup name since this is necessary to infer on import nodes for # instance context = copy_context(context) context.lookupname = name try: for infered in _infer_stmts(self.getattr(name, context), context, frame=self): # yield YES object instead of descriptors when necessary if not isinstance(infered, Const) and isinstance(infered, Instance): try: infered._proxied.getattr('__get__', context) except NotFoundError: yield infered else: yield YES else: yield infered except NotFoundError: if not name.startswith('__') and self.has_dynamic_getattr(context): # class handle some dynamic attributes, return a YES object yield YES else: raise InferenceError(name)
def infer_name(self, context=None): """infer a Name: use name lookup rules""" context = context.clone() context.lookupname = self.name frame, stmts = self.lookup(self.name) if not stmts: raise UnresolvableName(self.name) return _infer_stmts(stmts, context, frame)
def igetattr(self, name, context=None): """infered getattr""" # set lookup name since this is necessary to infer on import nodes for # instance context = copy_context(context) context.lookupname = name try: return _infer_stmts(self.getattr(name, context), context, frame=self) except NotFoundError: raise InferenceError(name)
def ilookup(self, name, context=None): """infered lookup return an iterator on infered values of the statements returned by the lookup method """ frame, stmts = self.lookup(name) context = copy_context(context) context.lookupname = name return _infer_stmts(stmts, context, frame)
def infer_from(self, context=None, asname=True): """self resolve on From / Import nodes return the imported module/object""" name = context.lookupname if name is None: raise InferenceError() if asname: name = self.real_name(name) module = _imported_module_astng(self, self.modname) try: context = copy_context(context) context.lookupname = name return _infer_stmts(module.getattr(name), context) except NotFoundError: raise InferenceError(name)
def infer_assattr(self, context=None): """infer a AssName/AssAttr: need to inspect the RHS part of the assign node """ stmts = self.assigned_stmts(context=context) return _infer_stmts(stmts, context)