Beispiel #1
0
    def test_deserialize_mixed_list_mismatched_length(self):
        class Model(psm.SchemaModel):
            bag = psm.ListField([psm.IntegerField(), psm.BoolField()])

        m1 = Model(bag=[1, False, 'str'])
        with self.assertRaises(TypeError):
            psm.deserialize(Model, m1)
Beispiel #2
0
    def test_deserialize_nonnullable(self):
        class Model(psm.SchemaModel):
            field = psm.FloatField(nullable=False)

        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"field": null}')

        m1 = psm.deserialize(Model, '{"field": 12.98}')
        self.assertEqual(12.98, m1.field)
Beispiel #3
0
    def test_deserialize_nonnullable_string(self):
        class Model(psm.SchemaModel):
            field = psm.StringField(nullable=False)

        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"field": null}')

        nonempty_model = psm.deserialize(Model, '{"field": "str"}')
        self.assertEqual('str', nonempty_model.field)

        empty_model = psm.deserialize(Model, '{"field": ""}')
        self.assertEqual('', empty_model.field)
Beispiel #4
0
    def test_deserialize_bool(self):
        class Model(psm.SchemaModel):
            field = psm.BoolField(nullable=False)

        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"field": null}')

        false_model = psm.deserialize(Model, '{"field": false}')
        self.assertEqual(False, false_model.field)

        true_model = psm.deserialize(Model, '{"field": true}')
        self.assertEqual(True, true_model.field)
Beispiel #5
0
    def test_deserialize_mixed_list(self):
        class SubModel(psm.SchemaModel):
            data = psm.ListField([psm.BoolField()])

        class Model(psm.SchemaModel):
            bag = psm.ListField([
                psm.IntegerField(),
                psm.ListField([psm.ObjectField(SubModel)])
            ])

        m1 = psm.deserialize(
            Model,
            '{"bag": [1, [{"data": [true, false]}, {"data": [true, true, false]}]]}'
        )
        self.assertIsInstance(m1, Model)
        self.assertIsInstance(m1.bag, list)
        self.assertIsInstance(m1.bag[0], int)
        self.assertEqual(m1.bag[0], 1)
        self.assertIsInstance(m1.bag[1], list)
        self.assertEqual(len(m1.bag[1]), 2)
        for i in m1.bag[1]:
            self.assertIsInstance(i, SubModel)
            self.assertIsInstance(i.data, list)

        self.assertEqual(len(m1.bag[1][0].data), 2)
        self.assertEqual(m1.bag[1][0].data[0], True)
        self.assertEqual(m1.bag[1][0].data[1], False)

        self.assertEqual(len(m1.bag[1][1].data), 3)
        self.assertEqual(m1.bag[1][1].data[0], True)
        self.assertEqual(m1.bag[1][1].data[1], True)
        self.assertEqual(m1.bag[1][1].data[2], False)
Beispiel #6
0
    def test_deserialize_list_of_objects_with_list(self):
        class Vector(psm.SchemaModel):
            u = psm.ListField([psm.IntegerField()], min_length=3, max_length=3)

        class Model(psm.SchemaModel):
            vectors = psm.ListField([psm.ObjectField(Vector)])

        m1 = psm.deserialize(
            Model,
            '{"vectors": [{"u": [1, 0, 0]}, {"u": [0, 1, 0]}, {"u": [0, 0, 1]}]}'
        )
        expected = Model(vectors=[
            Vector(u=[1, 0, 0]),
            Vector(u=[0, 1, 0]),
            Vector(u=[0, 0, 1])
        ])
        self.assertIsInstance(m1, Model)
        self.assertIsInstance(m1.vectors, list)
        self.assertEqual(len(m1.vectors), len(expected.vectors))
        i = 0
        while i < len(m1.vectors):
            self.assertIsInstance(m1.vectors[i], Vector)
            self.assertEqual(len(m1.vectors[i].u), 3)
            j = 0
            while j < len(m1.vectors[i].u):
                self.assertEqual(m1.vectors[i].u[j], expected.vectors[i].u[j])
                j = j + 1
            i = i + 1
Beispiel #7
0
    def test_deserialize_list_of_objects(self):
        class Vector(psm.SchemaModel):
            x = psm.IntegerField(required=True, nullable=False)
            y = psm.IntegerField(required=True, nullable=False)
            z = psm.IntegerField(required=True, nullable=False)

        class Model(psm.SchemaModel):
            vectors = psm.ListField([psm.ObjectField(Vector)])

        m1 = psm.deserialize(
            Model,
            '{"vectors": [{"x": 1, "y": 0, "z": 0}, {"x": 0, "y": 1, "z": 0}, {"x": 0, "y": 0, "z": 1}]}'
        )
        self.assertIsInstance(m1, Model)
        self.assertIsInstance(m1.vectors, list)
        self.assertEqual(len(m1.vectors), 3)
        for v in m1.vectors:
            self.assertIsInstance(v, Vector)

        self.assertTrue(m1.vectors[0].x == 1 and m1.vectors[0].y == 0
                        and m1.vectors[0].z == 0)
        self.assertTrue(m1.vectors[1].x == 0 and m1.vectors[1].y == 1
                        and m1.vectors[1].z == 0)
        self.assertTrue(m1.vectors[2].x == 0 and m1.vectors[2].y == 0
                        and m1.vectors[2].z == 1)
Beispiel #8
0
    def test_deserialize_obj_of_objs(self):
        class SubModel(psm.SchemaModel):
            field = psm.StringField()

        class Model(psm.SchemaModel):
            obj_field = psm.ObjectField(SubModel)

        m1 = psm.deserialize(Model, '{"obj_field": {"field": "greetings"}}')
        self.assertIsInstance(m1, Model)
        self.assertIsInstance(m1.obj_field, SubModel)
        self.assertEqual(m1.obj_field.field, 'greetings')
Beispiel #9
0
    def test_deserialize_list_of_integers(self):
        class Model(psm.SchemaModel):
            indices = psm.ListField([psm.IntegerField()])

        m1 = psm.deserialize(Model, '{"indices": [1, 8, 9, 101]}')
        self.assertIsInstance(m1, Model)
        self.assertIsInstance(m1.indices, list)
        expected = [1, 8, 9, 101]
        self.assertEqual(len(m1.indices), len(expected))
        idx = 0
        while idx < len(expected):
            self.assertEqual(m1.indices[idx], expected[idx])
            idx = idx + 1
Beispiel #10
0
    def test_deserialize_list_of_lists(self):
        class Transformation(psm.SchemaModel):
            m = psm.ListField([psm.ListField([psm.IntegerField()])])

        m1 = psm.deserialize(Transformation,
                             '{"m": [[1, 0, 0], [0, 1, 0], [0, 0, 1]]}')
        expected = Transformation(m=[[1, 0, 0], [0, 1, 0], [0, 0, 1]])
        self.assertIsInstance(m1, Transformation)
        self.assertEqual(len(m1.m), len(expected.m))
        i = 0
        while i < len(m1.m):
            j = 0
            while j < len(m1.m[i]):
                self.assertEqual(m1.m[i], expected.m[i])
                j = j + 1
            i = i + 1
Beispiel #11
0
    def test_deserialize_nullable(self):
        class Model(psm.SchemaModel):
            field = psm.FloatField(nullable=True)

        m1 = psm.deserialize(Model, '{"field": null}')
        self.assertEqual(None, m1.field)

        m2 = psm.deserialize(Model, '{"field": 12.34}')
        self.assertEqual(12.34, m2.field)

        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"field": "str"}')

        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"field": -1.9, "greeting": "hello"}')

        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"greeting": "hello"}')
Beispiel #12
0
    def test_deserialize_nullable_bool(self):
        class Model(psm.SchemaModel):
            field = psm.BoolField(nullable=True)

        null_model = psm.deserialize(Model, '{"field": null}')
        self.assertEqual(None, null_model.field)

        false_model = psm.deserialize(Model, '{"field": false}')
        self.assertEqual(False, false_model.field)

        true_model = psm.deserialize(Model, '{"field": true}')
        self.assertEqual(True, true_model.field)

        # additional fields
        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"field": null, "greeting": "hello"}')

        # missing fields
        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"another_field": null}')
Beispiel #13
0
    def test_deserialize_nullable_string(self):
        class Model(psm.SchemaModel):
            field = psm.StringField(nullable=True)

        null_model = psm.deserialize(Model, '{"field": null}')
        self.assertEqual(None, null_model.field)

        nonempty_model = psm.deserialize(Model, '{"field": "str"}')
        self.assertEqual('str', nonempty_model.field)

        empty_model = psm.deserialize(Model, '{"field": ""}')
        self.assertEqual('', empty_model.field)

        # additional fields
        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"field": null, "greeting": "hello"}')

        # missing fields
        with self.assertRaises(psm.ValidationError):
            psm.deserialize(Model, '{"another_field": null}')