def infer_getattr(self, context=None): """infer a Getattr node by using getattr on the associated object""" if not context: context = InferenceContext() for owner in self.expr.infer(context): if owner is YES: yield owner continue try: with context.scope(boundnode=owner): for obj in owner.igetattr(self.attrname, context): yield obj except (NotFoundError, InferenceError): pass except AttributeError: # XXX method / function pass
def infer_callfunc(self, context=None): """infer a CallFunc node by trying to guess what the function returns""" if context is None: context = InferenceContext() for callee in self.func.infer(context): with context.scope( callcontext=CallContext(self.args, self.starargs, self.kwargs), boundnode=None, ): if callee is YES: yield callee continue try: if hasattr(callee, 'infer_call_result'): for infered in callee.infer_call_result(self, context): yield infered except InferenceError: ## XXX log error ? continue