class BadContrivedClassSchema(Schema): main = PolyField( serialization_schema_selector=_bad_deserializer_disambiguation, deserialization_schema_selector=_bad_deserializer_disambiguation, required=True) others = PolyField( serialization_schema_selector=_bad_deserializer_disambiguation, deserialization_schema_selector=_bad_deserializer_disambiguation, allow_none=True, many=True)
def with_both_shapes(func): return with_all( PolyField(serialization_schema_selector= shape_schema_serialization_disambiguation, deserialization_schema_selector =shape_schema_deserialization_disambiguation), ShapePolyField())(func)
def test_invalid_polyfield(): Sticker = namedtuple('Sticker', ['shape', 'image']) with pytest.raises(TypeError): field = PolyField(serialization_schema_selector= shape_schema_serialization_disambiguation, deserialization_schema_selector= shape_schema_deserialization_disambiguation) field.serialize('shape', Sticker(3, 3))
class ContrivedShapeClassSchema(Schema): main = PolyField(serialization_schema_selector= shape_schema_serialization_disambiguation, deserialization_schema_selector= shape_schema_deserialization_disambiguation, required=True) others = PolyField(serialization_schema_selector= shape_schema_serialization_disambiguation, deserialization_schema_selector= shape_schema_deserialization_disambiguation, allow_none=True, many=True) @post_load def make_object(self, data): return TestPolyField.ContrivedShapeClass(data.get('main'), data.get('others'))
def test_serializing_polyfield_None(): Sticker = namedtuple('Sticker', ['shape', 'image']) marshmallow_sticker = Sticker(None, "marshmallow.png") field = PolyField( serialization_schema_selector=shape_schema_serialization_disambiguation, deserialization_schema_selector= shape_schema_deserialization_disambiguation) rect_dict = field.serialize('shape', marshmallow_sticker) assert rect_dict is None
class ContrivedShapeClassSchema(Schema): main = PolyField(serialization_schema_selector= shape_property_schema_serialization_disambiguation, deserialization_schema_selector= shape_property_schema_deserialization_disambiguation, required=True) others = PolyField( serialization_schema_selector= shape_property_schema_serialization_disambiguation, deserialization_schema_selector= shape_property_schema_deserialization_disambiguation, allow_none=True, many=True) type = fields.String(required=True) @post_load def make_object(self, data, **_): return TestPolyFieldDisambiguationByProperty.ContrivedShapeClass( data.get('main'), data.get('others'), data.get('type'))
def test_serializing_polyfield_by_parent_type(): rect = Rectangle("blue", 4, 10) Sticker = namedtuple('Sticker', ['shape', 'image', 'type']) marshmallow_sticker = Sticker(rect, "marshmallow.png", 'rectangle') field = PolyField(serialization_schema_selector= shape_property_schema_serialization_disambiguation, deserialization_schema_selector= shape_property_schema_deserialization_disambiguation) rect_dict = field.serialize('shape', marshmallow_sticker) assert rect_dict == {"length": 4, "width": 10, "color": "blue"}
def test_serializing_polyfield_many(): rect = Rectangle("blue", 4, 10) tri = Triangle("red", 1, 100) StickerCollection = namedtuple('StickerCollection', ['shapes', 'image']) marshmallow_sticker_collection = StickerCollection([rect, tri], "marshmallow.png") field = PolyField( serialization_schema_selector=shape_schema_serialization_disambiguation, deserialization_schema_selector= shape_schema_deserialization_disambiguation, many=True) shapes = field.serialize('shapes', marshmallow_sticker_collection) expected_shapes = [{ "length": 4, "width": 10, "color": "blue" }, { "base": 1, "height": 100, "color": "red" }] assert shapes == expected_shapes
class FuzzySchema(Schema): data = PolyField(deserialization_schema_selector= fuzzy_schema_deserialization_disambiguation, many=True)
assert rect_dict == {"length": 4, "width": 10, "color": "blue"} @with_both_shapes def test_serializing_polyfield_None(field): Sticker = namedtuple('Sticker', ['shape', 'image']) marshmallow_sticker = Sticker(None, "marshmallow.png") rect_dict = field.serialize('shape', marshmallow_sticker) assert rect_dict is None @with_all( PolyField( serialization_schema_selector=shape_schema_serialization_disambiguation, deserialization_schema_selector= shape_schema_deserialization_disambiguation, many=True), ShapePolyField(many=True)) def test_serializing_polyfield_many(field): rect = Rectangle("blue", 4, 10) tri = Triangle("red", 1, 100) StickerCollection = namedtuple('StickerCollection', ['shapes', 'image']) marshmallow_sticker_collection = StickerCollection([rect, tri], "marshmallow.png") shapes = field.serialize('shapes', marshmallow_sticker_collection) expected_shapes = [{ "length": 4, "width": 10, "color": "blue" }, { "base": 1,