async def _call(self, method): self.logger.info("Calling: %s", method) res = ua.CallMethodResult() if method.ObjectId not in self._aspace or method.MethodId not in self._aspace: res.StatusCode = ua.StatusCode(ua.StatusCodes.BadNodeIdInvalid) else: node = self._aspace[method.MethodId] if node.call is None: res.StatusCode = ua.StatusCode(ua.StatusCodes.BadNothingToDo) else: try: result = await self._run_method(node.call, method.ObjectId, *method.InputArguments) except Exception: self.logger.exception( "Error executing method call %s, an exception was raised: ", method) res.StatusCode = ua.StatusCode( ua.StatusCodes.BadUnexpectedError) else: if isinstance(result, ua.CallMethodResult): res = result elif isinstance(result, ua.StatusCode): res.StatusCode = result else: res.OutputArguments = result while len(res.InputArgumentResults) < len( method.InputArguments): res.InputArgumentResults.append(ua.StatusCode()) return res
def func2(parent, methodname, value): if methodname == "panic": return ua.StatusCode(ua.StatusCodes.BadOutOfMemory) if methodname != "sin": res = ua.CallMethodResult() res.StatusCode = ua.StatusCode(ua.StatusCodes.BadInvalidArgument) res.InputArgumentResults = [ua.StatusCode(ua.StatusCodes.BadNotSupported), ua.StatusCode()] return res return math.sin(value)