def exec_from_params(handler, runobj, context): params = runobj.spec.parameters or {} args_list = [] i = 0 args = inspect.signature(handler).parameters if len(args) > 0 and list(args.keys())[0] == 'context': args_list.append(context) i += 1 if len(args) > i + 1 and list(args.keys())[i] == 'event': event = Event(runobj.to_dict()) args_list.append(event) i += 1 for key in list(args.keys())[i:]: if args[key].name in params: args_list.append(params[key]) elif args[key].default is not inspect.Parameter.empty: args_list.append(args[key].default) else: args_list.append(None) stdout = StringIO() err = '' val = None with redirect_stdout(stdout): try: val = handler(*args_list) except Exception as e: err = str(e) context.set_state(error=err) if val: context.log_result('return', val) return stdout.getvalue(), err
def get_func_arg(handler, runobj: RunObject, context: MLClientCtx): params = runobj.spec.parameters or {} inputs = runobj.spec.inputs or {} args_list = [] i = 0 args = inspect.signature(handler).parameters if len(args) > 0 and list(args.keys())[0] == 'context': args_list.append(context) i += 1 if len(args) > i + 1 and list(args.keys())[i] == 'event': event = Event(runobj.to_dict()) args_list.append(event) i += 1 for key in list(args.keys())[i:]: if args[key].name in params: args_list.append(params[key]) elif args[key].name in inputs: obj = context.get_input(key, inputs[key]) if type(args[key].default) is str: filepath = obj.url if obj.kind != 'file': dot = filepath.rfind('.') filepath = mktemp() if dot == -1 else mktemp(filepath[dot:]) logger.info('downloading {} to local tmp'.format(obj.url)) obj.download(filepath) args_list.append(filepath) else: args_list.append(context.get_input(key, inputs[key])) elif args[key].default is not inspect.Parameter.empty: args_list.append(args[key].default) else: args_list.append(None) return args_list
def get_func_arg(handler, runobj: RunObject, context: MLClientCtx): params = runobj.spec.parameters or {} inputs = runobj.spec.inputs or {} args_list = [] i = 0 args = inspect.signature(handler).parameters if len(args) > 0 and list(args.keys())[0] == 'context': args_list.append(context) i += 1 if len(args) > i + 1 and list(args.keys())[i] == 'event': event = Event(runobj.to_dict()) args_list.append(event) i += 1 for key in list(args.keys())[i:]: if args[key].name in params: args_list.append(params[key]) elif args[key].name in inputs: if type(args[key].default) is str: args_list.append(inputs[key]) else: args_list.append(context.get_input(key, inputs[key])) elif args[key].default is not inspect.Parameter.empty: args_list.append(args[key].default) else: args_list.append(None) return args_list
def handler(context: nuclio_sdk.Context, event: nuclio_sdk.Event): context.logger.debug_with("Received request", event=event.to_json()) return context.Response( headers=event.headers, body={ "sdk_version": get_sdk_version(), }, content_type=event.content_type, status_code=http.HTTPStatus.OK, )
def fake_nuclio_context(body, headers=None): class FunctionContext(_Context): """Wrapper around nuclio_sdk.Context to make automatically create logger""" def __getattribute__(self, attr): value = object.__getattribute__(self, attr) if value is None and attr == 'logger': value = self.logger = Logger(level=logging.INFO) value.set_handler('mlrun', stdout, HumanReadableFormatter()) return value def set_logger_level(self, verbose=False): if verbose: level = logging.DEBUG else: level = logging.INFO value = self.logger = Logger(level=level) value.set_handler('mlrun', stdout, HumanReadableFormatter()) return FunctionContext(), Event(body=body, headers=headers)