예제 #1
0
파일: test_api.py 프로젝트: myackinc/Myack
    class Foo(Namespace):
        nested: Nested

        @middleware(1)
        async def middleware_1(self, handler, request):
            response = await handler(request)
            response.meta.setdefault("middlewares",
                                     []).append("Foo.middleware_1")
            return response

        @middleware(2)
        async def middleware_2(self, handler, request):
            response = await handler(request)
            response.meta.setdefault("middlewares",
                                     []).append("Foo.middleware_2")
            return response

        @handler(schema=validx.Dict({"x": validx.Int(), "y": validx.Int()}))
        async def sum(self, x, y, injection=None):
            return x + y, injection

        @handler(schema=validx.Dict({"x": validx.Int(), "y": validx.Int()}))
        async def incorrect_div(self, x, y, injection=None):
            return x / y, injection

        @handler(
            schema=validx.Dict({
                "x": validx.Int(),
                "y": validx.Int()
            }),
            raises=DivisionByZero,
        )
        async def div(self, x, y, injection=None):
            try:
                return x / y, injection
            except ZeroDivisionError:
                raise DivisionByZero()
예제 #2
0
     validate_out=v.List(
         v.Dict(
             {
                 "id": v.Str(),
                 "label": v.Str(),
                 "state": v.Str(
                     options=[
                         "completed",
                         "running",
                         "pending",
                         "unscheduled",
                         "exception",
                     ]
                 ),
                 "tags": v.Dict(extra=(v.Str(), v.Str())),
                 "tier": v.Int(),
                 "duration": v.Int(),
                 "result": v.Str(
                     options=[
                         "passed",
                         "failed",
                         "exception",
                         "canceled",
                         "superseded",
                     ]
                 ),
             },
             optional=["duration", "result", "tier"],
         )
     ),
 ),
예제 #3
0
import validx as v

city_schema: v.Validator = v.Dict(
    {
        "location": v.Tuple(v.Float(min=-90, max=90), v.Float(min=-180,
                                                              max=180)),
        "name": v.Str(),
        "alt_names": v.List(v.Str(), unique=True),
        "population": v.Dict({
            "city": v.Int(min=0),
            "metro": v.Int(min=0)
        }),
    },
    extra=(v.Str(), v.Any()),
)
예제 #4
0
파일: test_data.py 프로젝트: mozilla/mozci
from mozci import data
from mozci.data.base import DataHandler, DataSource
from mozci.data.contract import Contract
from mozci.errors import (
    ContractNotFilled,
    ContractNotFound,
    InvalidSource,
    SourcesNotFound,
)

FAKE_CONTRACTS = (
    Contract(
        name="foo",
        description="test",
        validate_in=v.Dict({"label": v.Str()}),
        validate_out=v.Dict({"count": v.Int()}),
    ),
    Contract(
        name="bar",
        description="test",
        validate_in=v.Dict({"desc": v.Str()}),
        validate_out=v.Dict({"amount": v.Int()}),
    ),
    Contract(
        name="baz",
        description="test",
        validate_in=v.Dict({"id": v.Str()}),
        validate_out=v.Dict({"sum": v.Int()}),
    ),
    Contract(
        name="incomplete",
예제 #5
0
파일: contract.py 프로젝트: marco-c/mozci
     validate_out=v.List(
         v.Dict(
             {
                 "id": v.Str(),
                 "label": v.Str(),
                 "state": v.Str(
                     options=[
                         "completed",
                         "running",
                         "pending",
                         "unscheduled",
                         "exception",
                     ]
                 ),
                 "tags": v.Dict(extra=(v.Str(), v.Str())),
                 "tier": v.Int(),
                 "duration": v.Int(),
                 "result": v.Str(
                     options=[
                         "passed",
                         "failed",
                         "exception",
                         "canceled",
                         "superseded",
                     ]
                 ),
             },
             optional=["duration", "result", "tier"],
         )
     ),
 ),
예제 #6
0
class Request:

    schema: ClassVar[validx.Validator] = validx.Dict(
        {
            "id":
            validx.Int(),
            "method":
            validx.Str(encoding="ascii"),
            "params":
            validx.Dict(extra=(validx.Str(), validx.Any())),
            "meta":
            validx.Dict(
                {
                    "version":
                    validx.Tuple(
                        validx.Int(min=0), validx.Int(min=0), nullable=True),
                },
                optional=("version", ),
                extra=(validx.Str(), validx.Any()),
            ),
        },
        defaults={
            "params": {},
            "meta": {}
        },
    )

    id: int
    method: str
    meta: Dict[str, Any]
    params: Dict[str, Any]

    middlewares: List[Middleware]
    injections: Dict[str, Any]

    handler: Optional[Callable[..., Awaitable[Any]]]
    handler_info: Dict[str, Any]

    def __init__(
        self,
        id: int,
        method: str,
        meta: Dict[str, Any] = None,
        params: Dict[str, Any] = None,
    ) -> None:
        self.id = id
        self.method = method
        self.meta = meta if meta is not None else {}
        self.params = params if params is not None else {}

        self.middlewares = []
        self.injections = {}

        self.handler = None
        self.handler_info = {}

    @classmethod
    def load(cls, payload: Dict[str, Any]) -> "Request":
        try:
            return cls(**cls.schema(payload))
        except validx.exc.ValidationError as e:
            raise RPCInvalidRequest(reason=cls.format_schema_error(e))

    @classmethod
    def format_schema_error(
            cls, error: validx.exc.ValidationError) -> Dict[str, str]:
        return dict(validx.exc.format_error(error))

    @cached_property
    def handler_signature(self) -> inspect.Signature:
        assert self.handler is not None
        return inspect.signature(self.handler)

    def response(
        self,
        result: Any = None,
        meta: Dict[str, Any] = None,
        error: BaseError = None,
        warnings: List[BaseWarning] = None,
    ) -> Response:
        return Response(id=self.id,
                        meta=meta,
                        result=result,
                        error=error,
                        warnings=warnings)
예제 #7
0
파일: contract.py 프로젝트: mozilla/mozci
                 "id":
                 v.Str(),
                 "label":
                 v.Str(),
                 "state":
                 v.Str(options=[
                     "completed",
                     "running",
                     "pending",
                     "unscheduled",
                     "exception",
                 ]),
                 "tags":
                 v.Dict(extra=(v.Str(), v.Str())),
                 "tier":
                 v.Int(),
                 "duration":
                 v.Int(),
                 "result":
                 v.Str(options=[
                     "passed",
                     "failed",
                     "exception",
                     "canceled",
                     "superseded",
                 ]),
             },
             optional=["duration", "result", "tier"],
         )),
 ),
 Contract(
예제 #8
0
                 "id":
                 v.Str(),
                 "label":
                 v.Str(),
                 "state":
                 v.Str(options=[
                     "completed",
                     "running",
                     "pending",
                     "unscheduled",
                     "exception",
                 ]),
                 "tags":
                 v.Dict(extra=(v.Str(), v.Str())),
                 "tier":
                 v.Int(),
                 "duration":
                 v.Int(),
                 "result":
                 v.Str(options=[
                     "passed",
                     "failed",
                     "exception",
                     "canceled",
                     "superseded",
                 ]),
             },
             optional=["duration", "result", "tier"],
         )),
 ),
 Contract(