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))
Example #2
0
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))
Example #3
0
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
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 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)
Example #6
0
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_rectangle():
    rect = Rectangle("blue", 4, 10)
    Sticker = namedtuple('Sticker', ['shape', 'image'])
    marshmallow_sticker = Sticker(rect, "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 == {"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
Example #9
0
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)
    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'))
    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'))
Example #12
0
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)
Example #14
0
    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,