Пример #1
0
    def decorator(func):
        _api_name = func.__name__ if api_name is None else api_name
        _api_doc = ((func.__doc__ or DEFAULT_API_DOC).strip()
                    if api_doc is None else api_doc)

        if input is None:
            # support bentoml<=0.7
            if not args or not (inspect.isclass(args[0])
                                and issubclass(args[0], BentoHandler)):
                raise InvalidArgument(
                    "BentoService @api decorator first parameter must "
                    "be class derived from bentoml.handlers.BentoHandler")

            handler = args[0](*args[1:], **kwargs)
        else:
            handler = input

        setattr(func, "_is_api", True)
        setattr(func, "_handler", handler)
        setattr(func, "_output_adapter", output)
        if not isidentifier(_api_name):
            raise InvalidArgument(
                "Invalid API name: '{}', a valid identifier must contains only letters,"
                " numbers, underscores and not starting with a number.".format(
                    _api_name))
        setattr(func, "_api_name", _api_name)
        setattr(func, "_api_doc", _api_doc)

        return func
Пример #2
0
 def name(cls):  # pylint:disable=method-hidden
     if cls._bento_service_name is not None and isidentifier(
             cls._bento_service_name):
         return cls._bento_service_name
     else:
         # Use python class name as service name
         return cls.__name__
Пример #3
0
def validate_inference_api_name(api_name):
    if not isidentifier(api_name):
        raise InvalidArgument(
            "Invalid API name: '{}', a valid identifier must contains only letters,"
            " numbers, underscores and not starting with a number.".format(
                api_name))

    if api_name in BENTOML_RESERVED_API_NAMES:
        raise InvalidArgument(
            "Reserved API name: '{}' is reserved for infra endpoints".format(
                api_name))
Пример #4
0
    def name(cls):  # pylint: disable=no-self-argument,invalid-overridden-method
        if cls._bento_service_name is not None:
            if not isidentifier(cls._bento_service_name):
                raise InvalidArgument(
                    'BentoService#_bento_service_name must be valid python identifier'
                    'matching regex `(letter|"_")(letter|digit|"_")*`')

            return cls._bento_service_name
        else:
            # Use python class name as service name
            return cls.__name__
Пример #5
0
    def name(cls):  # pylint:disable=method-hidden
        if cls._bento_service_name is not None:
            if not isidentifier(cls._bento_service_name):
                raise ValueError(
                    'BentoService#_bento_service_name must be valid python identifier'
                    'matching regex `(letter|"_")(letter|digit|"_")*`')

            return cls._bento_service_name
        else:
            # Use python class name as service name
            return cls.__name__
Пример #6
0
    def decorator(func):
        _api_name = func.__name__ if api_name is None else api_name
        _api_doc = (
            (func.__doc__ or DEFAULT_API_DOC).strip() if api_doc is None else api_doc
        )
        _mb_max_batch_size = (
            DEFAULT_MAX_BATCH_SIZE if mb_max_batch_size is None else mb_max_batch_size
        )
        _mb_max_latency = (
            DEFAULT_MAX_LATENCY if mb_max_latency is None else mb_max_latency
        )

        if input is None:
            # support bentoml<=0.7
            if not args or not (
                inspect.isclass(args[0]) and issubclass(args[0], BaseInputAdapter)
            ):
                raise InvalidArgument(
                    "BentoService @api decorator first parameter must "
                    "be class derived from bentoml.adapters.BaseInputAdapter"
                )

            handler = args[0](*args[1:], output_adapter=output, **kwargs)
        else:
            assert isinstance(input, BaseInputAdapter), (
                "API input parameter must be an instance of any classes inherited from "
                "bentoml.adapters.BaseInputAdapter"
            )
            handler = input
            handler._output_adapter = output

        setattr(func, "_is_api", True)
        setattr(func, "_handler", handler)
        if not isidentifier(_api_name):
            raise InvalidArgument(
                "Invalid API name: '{}', a valid identifier must contains only letters,"
                " numbers, underscores and not starting with a number.".format(
                    _api_name
                )
            )

        if _api_name in BENTOML_RESERVED_API_NAMES:
            raise InvalidArgument(
                "Reserved API name: '{}' is reserved for infra endpoints".format(
                    _api_name
                )
            )
        setattr(func, "_api_name", _api_name)
        setattr(func, "_api_doc", _api_doc)

        setattr(func, "_mb_max_batch_size", _mb_max_batch_size)
        setattr(func, "_mb_max_latency", _mb_max_latency)

        return func
Пример #7
0
    def decorator(func):
        api_name = kwargs.pop("api_name", func.__name__)
        api_doc = kwargs.pop("api_doc", func.__doc__ or DEFAULT_API_DOC).strip()

        handler = handler_cls(
            *args, **kwargs
        )  # create handler instance and attach to api method

        setattr(func, "_is_api", True)
        setattr(func, "_handler", handler)
        if not isidentifier(api_name):
            raise InvalidArgument(
                "Invalid API name: '{}', a valid identifier must contains only letters,"
                " numbers, underscores and not starting with a number.".format(api_name)
            )
        setattr(func, "_api_name", api_name)
        setattr(func, "_api_doc", api_doc)

        return func
Пример #8
0
    def decorator(func):
        api_name = kwargs.pop('api_name', func.__name__)
        api_doc = kwargs.pop('api_doc', func.__doc__
                             or DEFAULT_API_DOC).strip()

        handler = handler_cls(
            *args,
            **kwargs)  # create handler instance and attach to api method

        _set_func_attr(func, '_is_api', True)
        _set_func_attr(func, '_handler', handler)
        if not isidentifier(api_name):
            raise ValueError(
                "Invalid API name: '{}', a valid identifier must contains only letters, "
                "numbers, underscores and not starting with a number.".format(
                    api_name))
        _set_func_attr(func, '_api_name', api_name)
        _set_func_attr(func, '_api_doc', api_doc)

        return func