Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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,
    )
Exemplo n.º 5
0
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)