clearml-server/server/service_repo/__init__.py
allegroai 3f84e60a1f Add debug.ping endpoint
Optimize exhausted scrolls by using a fixed empty scroll
2020-08-10 08:35:34 +03:00

53 lines
1.4 KiB
Python

from typing import Text, Sequence, Callable, Union
from funcsigs import signature
from jsonmodels import models
from .apicall import APICall, APICallResult
from .endpoint import EndpointFunc, Endpoint
from .service_repo import ServiceRepo
__all__ = ["APICall", "endpoint"]
LegacyEndpointFunc = Callable[[APICall], None]
def endpoint(
name: Text,
min_version: Text = "1.0",
required_fields: Sequence[Text] = None,
request_data_model: models.Base = None,
response_data_model: models.Base = None,
validate_schema=False,
):
""" Endpoint decorator, used to declare a method as an endpoint handler """
def decorator(f: Union[EndpointFunc, LegacyEndpointFunc]) -> EndpointFunc:
# Backwards compatibility: support endpoints with both old-style signature (call) and new-style signature
# (call, company, request_model)
func = f
if len(signature(f).parameters) == 1:
# old-style
def adapter(call, *_, **__):
return f(call)
func = adapter
ServiceRepo.register(
Endpoint(
name=name,
func=func,
min_version=min_version,
required_fields=required_fields,
request_data_model=request_data_model,
response_data_model=response_data_model,
validate_schema=validate_schema,
)
)
return func
return decorator