Exemplo n.º 1
0
    def test_dict_validate_from_openapi_data_instantiation(self):
        expected_call_by_index = {
            0: [
                Foo, (frozendict({'bar': 'a'}), ),
                InstantiationMetadata(path_to_item=('args[0]', ),
                                      from_server=True)
            ],
            1: [
                StrSchema, ('a', ),
                InstantiationMetadata(path_to_item=('args[0]', 'bar'),
                                      from_server=True)
            ]
        }
        call_index = 0
        result_by_call_index = {
            0: defaultdict(set, [(('args[0]', ), set([Foo, frozendict]))]),
            1: defaultdict(set, [(('args[0]', 'bar'), set([StrSchema, str]))]),
        }

        @classmethod
        def new_validate(cls,
                         *args,
                         _instantiation_metadata: typing.
                         Optional[InstantiationMetadata] = None):
            nonlocal call_index
            assert [cls, args, _instantiation_metadata
                    ] == expected_call_by_index[call_index]
            result = result_by_call_index.get(call_index)
            call_index += 1
            if result is None:
                raise petstore_api.ApiValueError('boom')
            return result

        with patch.object(Schema, '_validate', new=new_validate):
            Foo._from_openapi_data({'bar': 'a'})
Exemplo n.º 2
0
    def test_dict_validate_direct_instantiation_cast_item(self):
        expected_call_by_index = {
            0: [
                Foo,
                (frozendict({"bar": "a"}), ),
                ValidationMetadata(path_to_item=("args[0]", )),
            ],
        }
        call_index = 0
        result_by_call_index = {
            0: defaultdict(set, [(("args[0]", ), set([Foo, frozendict]))]),
        }

        @classmethod
        def new_validate(
            cls,
            *args,
            validation_metadata: typing.Optional[ValidationMetadata] = None,
        ):
            nonlocal call_index
            assert [cls, args,
                    validation_metadata] == expected_call_by_index[call_index]
            result = result_by_call_index.get(call_index)
            call_index += 1
            if result is None:
                raise petstore_api.ApiValueError("boom")
            return result

        bar = StrSchema("a")
        with patch.object(Schema, "_validate", new=new_validate):
            Foo(bar=bar)
Exemplo n.º 3
0
 def test_oneof_composition_pig_validate(self):
     im = InstantiationMetadata()
     path_to_schemas = Pig._validate(frozendict(className='DanishPig'),
                                     _instantiation_metadata=im)
     assert path_to_schemas == {
         ('args[0]', ):
         set([Pig, DanishPig, frozendict]),
         ('args[0]', 'className'):
         set([DanishPig.className, AnyTypeSchema, str]),
     }
Exemplo n.º 4
0
 def test_discriminated_dict_validate(self):
     im = InstantiationMetadata()
     path_to_schemas = Animal._validate(frozendict(className='Dog',
                                                   color='black'),
                                        _instantiation_metadata=im)
     assert path_to_schemas == {
         ('args[0]', ): set([Animal, Dog, DogAllOf, frozendict]),
         ('args[0]', 'className'): set([StrSchema, AnyTypeSchema, str]),
         ('args[0]', 'color'): set([StrSchema, AnyTypeSchema, str]),
     }
Exemplo n.º 5
0
 def test_oneof_composition_pig_validate(self):
     vm = ValidationMetadata()
     path_to_schemas = Pig._validate(frozendict(className="DanishPig"),
                                     validation_metadata=vm)
     assert path_to_schemas == {
         ("args[0]", ):
         set([Pig, DanishPig, frozendict]),
         ("args[0]", "className"):
         set([DanishPig.className, AnyTypeSchema, str]),
     }
Exemplo n.º 6
0
 def test_discriminated_dict_validate(self):
     vm = ValidationMetadata()
     path_to_schemas = Animal._validate(frozendict(className="Dog",
                                                   color="black"),
                                        validation_metadata=vm)
     assert path_to_schemas == {
         ("args[0]", ): set([Animal, Dog, DogAllOf, frozendict]),
         ("args[0]", "className"): set([StrSchema, AnyTypeSchema, str]),
         ("args[0]", "color"): set([StrSchema, AnyTypeSchema, str]),
     }
Exemplo n.º 7
0
 def test_anyof_composition_gm_fruit_validate(self):
     im = InstantiationMetadata()
     path_to_schemas = GmFruit._validate(frozendict(
         cultivar='GoldenDelicious', lengthCm=Decimal(10)),
                                         _instantiation_metadata=im)
     assert path_to_schemas == {
         ('args[0]', ): set([GmFruit, Apple, Banana, frozendict]),
         ('args[0]', 'cultivar'): set([Apple.cultivar, AnyTypeSchema, str]),
         ('args[0]', 'lengthCm'):
         set([AnyTypeSchema, NumberSchema, Decimal]),
     }
Exemplo n.º 8
0
 def test_dict_validate(self):
     im = InstantiationMetadata()
     path_to_schemas = Foo._validate(frozendict({
         'bar': 'a',
         'additional': Decimal(0)
     }),
                                     _instantiation_metadata=im)
     assert path_to_schemas == {
         ('args[0]', ): set([Foo, frozendict]),
         ('args[0]', 'bar'): set([StrSchema, str]),
         ('args[0]', 'additional'): set([AnyTypeSchema, Decimal])
     }
Exemplo n.º 9
0
 def test_anyof_composition_gm_fruit_validate(self):
     vm = ValidationMetadata()
     path_to_schemas = GmFruit._validate(
         frozendict(cultivar="GoldenDelicious", lengthCm=Decimal(10)),
         validation_metadata=vm,
     )
     assert path_to_schemas == {
         ("args[0]", ): set([GmFruit, Apple, Banana, frozendict]),
         ("args[0]", "cultivar"): set([Apple.cultivar, AnyTypeSchema, str]),
         ("args[0]", "lengthCm"):
         set([AnyTypeSchema, NumberSchema, Decimal]),
     }
Exemplo n.º 10
0
 def test_dict_validate(self):
     vm = ValidationMetadata()
     path_to_schemas = Foo._validate(
         frozendict({
             "bar": "a",
             "additional": Decimal(0)
         }),
         validation_metadata=vm,
     )
     assert path_to_schemas == {
         ("args[0]", ): set([Foo, frozendict]),
         ("args[0]", "bar"): set([StrSchema, str]),
         ("args[0]", "additional"): set([AnyTypeSchema, Decimal]),
     }
Exemplo n.º 11
0
    def testDictSchema(self):
        class Model(ComposedSchema):
            @classmethod
            @property
            def _composed_schemas(cls):
                return {
                    'allOf': [
                        AnyTypeSchema,
                        DictSchema,
                    ],
                    'oneOf': [],
                    'anyOf': [],
                }

        m = Model(a=1, b='hi')
        assert isinstance(m, Model)
        assert isinstance(m, AnyTypeSchema)
        assert isinstance(m, DictSchema)
        assert isinstance(m, frozendict)
        assert m == frozendict(a=Decimal(1), b='hi')
Exemplo n.º 12
0
 def test_empty_dict_validate(self):
     im = InstantiationMetadata()
     path_to_schemas = Foo._validate(frozendict({}),
                                     _instantiation_metadata=im)
     assert path_to_schemas == {('args[0]', ): set([Foo, frozendict])}
Exemplo n.º 13
0
 def test_empty_dict_validate(self):
     vm = ValidationMetadata()
     path_to_schemas = Foo._validate(frozendict({}), validation_metadata=vm)
     assert path_to_schemas == {("args[0]", ): set([Foo, frozendict])}
Exemplo n.º 14
0
    def test_FormatTest(self):
        """Test FormatTest"""

        required_args = dict(number=32.5,
                             byte='a',
                             date='2021-01-01',
                             password='******')
        # int32
        # under min
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(int32=-2147483649, **required_args)
        # over max
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(int32=2147483648, **required_args)
        # valid values in range work
        valid_values = [-2147483648, 2147483647]
        for valid_value in valid_values:
            model = FormatTest(int32=valid_value, **required_args)
            assert model.int32 == valid_value

        # int64
        # under min
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(int64=-9223372036854775809, **required_args)
        # over max
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(int64=9223372036854775808, **required_args)
        # valid values in range work
        valid_values = [-9223372036854775808, 9223372036854775807]
        for valid_value in valid_values:
            model = FormatTest(int64=valid_value, **required_args)
            assert model.int64 == valid_value

        # float32
        # under min
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(float32=-3.402823466385289e+38, **required_args)
        # over max
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(float32=3.402823466385289e+38, **required_args)
        # valid values in range work
        valid_values = [-3.4028234663852886e+38, 3.4028234663852886e+38]
        for valid_value in valid_values:
            model = FormatTest(float32=valid_value, **required_args)
            assert model.float32 == valid_value

        # float64
        # under min, Decimal is used because flat can only store 64bit numbers and the max and min
        # take up more space than 64bit
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(float64=Decimal('-1.7976931348623157082e+308'),
                               **required_args)
        # over max
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(float64=Decimal('1.7976931348623157082e+308'),
                               **required_args)
        valid_values = [-1.7976931348623157E+308, 1.7976931348623157E+308]
        for valid_value in valid_values:
            model = FormatTest(float64=valid_value, **required_args)
            assert model.float64 == valid_value

        # unique_items with duplicates throws exception
        with self.assertRaises(petstore_api.ApiValueError):
            model = FormatTest(arrayWithUniqueItems=[0, 1, 1], **required_args)
        # no duplicates works
        values = [0, 1, 2]
        model = FormatTest(arrayWithUniqueItems=values, **required_args)
        assert model.arrayWithUniqueItems == tuple(values)

        # __bool__ value of noneProp is False
        model = FormatTest(noneProp=None, **required_args)
        assert isinstance(model.noneProp, Singleton)
        self.assertFalse(model.noneProp)
        self.assertTrue(model.noneProp.is_none())

        # binary check
        model = FormatTest(binary=b'123', **required_args)
        assert isinstance(model.binary, BinarySchema)
        assert isinstance(model.binary, BytesSchema)
        assert isinstance(model.binary, bytes)
        assert model == frozendict(binary=b'123',
                                   number=Decimal(32.5),
                                   byte='a',
                                   date='2021-01-01',
                                   password='******')