Subclassing¶
You can subclass Serializer or Deserializer to change how we detect and serialize/deserialize Dataclasses or Marshmallow Schemas.
Subclassing Marshmallow¶
Your subclass will need to implement these methods on Serializer:
is_marshmallow_modelserialize_marshmallow_modelserialize_marshmallow_model_to_dict
And these methods on Deserializer:
is_marshmallow_modeldeserialize_marshmallow_model
Example:
from typing import T, Type, Union
from flask import Blueprint, Flask
from flask_hintful import Deserializer, FlaskHintful, Serializer
class MySerializer(Serializer):
def is_marshmallow_model(data: T) -> bool:
'''Returns True if Data is a Marshmallow object'''
pass
def serialize_marshmallow_model(data: T) -> str:
'''Serializes Marshmallow object data into a JSON str'''
pass
def serialize_marshmallow_model_to_dict(data: T) -> dict:
'''Serializes Marshmallow object data into a dict'''
pass
class MyDeserializer(Deserializer):
@staticmethod
def is_marshmallow_model(type_: Type) -> bool:
'''Returns True if type_ is a marshmallow'''
pass
@staticmethod
def deserialize_marshmallow_model(data: Union[str, dict], type_: Type) -> T:
'''Returns deserialized data into instance of type_'''
pass
app = Flask('My API')
api = FlaskHintful(app,
serializer=MySerializer(),
deserializer=MyDeserializer())
Subclassing Dataclass¶
Your subclass will need to implement these methods on Serializer:
is_dataclassserialize_dataclassserialize_dataclass_to_dict
And these methods on Deserializer:
is_dataclassdeserialize_dataclass
Example:
from typing import T, Type, Union
from flask import Blueprint, Flask
from flask_hintful import Deserializer, FlaskHintful, Serializer
class MySerializer(Serializer):
def is_dataclass(data: T) -> bool:
'''Returns True if Data is a Dataclass'''
pass
def serialize_dataclass(data: T) -> str:
'''Serializes Dataclass data into a JSON str'''
pass
def serialize_dataclass_to_dict(data: T) -> dict:
'''Serializes Dataclass data into a dict'''
pass
class MyDeserializer(Deserializer):
@staticmethod
def is_dataclass(type_: Type) -> bool:
'''Returns True if type_ is a Dataclass'''
pass
@staticmethod
def deserialize_dataclass(data: Union[str, dict], type_: Type) -> T:
'''Returns deserialized data into instance of type_'''
pass
app = Flask('My API')
api = FlaskHintful(app,
serializer=MySerializer(),
deserializer=MyDeserializer())