Ejemplo n.º 1
0
    def __init__(self, msg: Type[M]):
        super().__init__(msg)

        # TODO only create validators where the schema is not empty

        field_schemas = ((field, _get_field_schema(field))
                         for field in fields(msg))
        self._field_validators = tuple(
            (field.name, _FieldValidator(field, schema))
            for field, schema in field_schemas if schema != Schema())
Ejemplo n.º 2
0
    async def test_magic_request_message_auto_schema(self):
        @schema('a', minimum=5)
        def func(self, a: int) -> IntegerValue:
            return IntegerValue(a)

        inspect = magic_normalize(func, auto_generate_request=True)
        self.assertEqual(inspect.response, IntegerValue)
        self.assertEqual(fields(inspect.request), (
            Field(int, name='a'),
        ))
        self.assertEqual(inspect.request.a.schema, Schema(minimum=5))
        self.assertEqual(await inspect.invokable(None, inspect.request(5)), IntegerValue(5))
Ejemplo n.º 3
0
    async def test_magic_request_message_auto_unpack(self):
        def func(self, value: str) -> StringValue:
            return StringValue(value)

        inspect = magic_normalize(func, auto_generate_request=True)
        self.assertEqual(inspect.response, StringValue)
        self.assertEqual(inspect.request.__meta__.name, 'FuncRequest')
        self.assertEqual(fields(inspect.request), (
            String(name='value'),
        ))
        # TODO StringValue() should be equal to StringValue('')
        self.assertEqual(await inspect.invokable(None, inspect.request()), StringValue(''))
        self.assertEqual(await inspect.invokable(None, inspect.request('foo')), StringValue('foo'))
Ejemplo n.º 4
0
    def test_stub_rpc_response_repeat_auto(self):
        class GreeterStub(Stub):
            @rpc(auto=True)
            def get_greetings(self) -> List[str]:
                raise NotImplementedError

        self.assertEqual(GreeterStub.get_greetings.response.__meta__.name,
                         'GetGreetingsResponse')
        self.assertEqual(tuple(fields(GreeterStub.get_greetings.response)),
                         (repeated(String(), name='values')))

        self.assertEqual(GreeterStub.greet.response, StringValue)
        self.assertEqual(GreeterStub.greet.name, 'get_greetings')
Ejemplo n.º 5
0
    def test_stub_rpc_request_repeat_auto(self):
        class GreeterStub(Stub):
            @rpc(auto=True)
            def greet_many(self, names: List[str]) -> str:
                raise NotImplementedError

        self.assertEqual(GreeterStub.greet_many.request.__meta__.name,
                         'GreetManyRequest')
        self.assertEqual(tuple(fields(GreeterStub.greet_many.request)),
                         (repeated(String(), name='names'), ))

        self.assertEqual(GreeterStub.greet_many.response, StringValue)
        self.assertEqual(GreeterStub.greet_many.name, 'greet_many')
Ejemplo n.º 6
0
    def test_stub_rpc_request_auto(self):
        class GreeterStub(Stub):
            @rpc(auto=True)
            def greet(self, name: str, shout: bool = False) -> str:
                raise NotImplementedError

        self.assertEqual(GreeterStub.greet.request.__meta__.name,
                         'GreetRequest')
        self.assertEqual(tuple(fields(GreeterStub.greet.request)), (
            String(name='name'),
            Bool(name='shout'),
        ))

        self.assertEqual(GreeterStub.greet.response, StringValue)
        self.assertEqual(GreeterStub.greet.name, 'greet')
Ejemplo n.º 7
0
def schema_for_message(message: Message, protocol: Protocol = None) -> SchemaMessage:
    return fields_schema(fields(message),
                         JSONProtocol,  # XXX
                         description=message.__meta__.get('description'))
Ejemplo n.º 8
0
 def _add_message(self, message: Message):
     if message not in self.messages:
         self.messages.add(message)
         for field in fields(message):
             self._add_field(field)