diff --git a/alcherializer/serializer.py b/alcherializer/serializer.py index 7791b3f..fcde0b4 100644 --- a/alcherializer/serializer.py +++ b/alcherializer/serializer.py @@ -20,6 +20,20 @@ def __init__(self, instance=None, data=None, **kwargs): self.partial = kwargs.get("partial", False) self.validated_data = {} + @property + def data(self) -> Dict[str, Any]: + instances = self.instance if self.many else [self.instance] + + results = [] + for instance in instances: + obj_dict = {} + for key in self.fields.keys(): + obj_dict[key] = getattr(instance, key) + + results.append(obj_dict) + + return results if self.many else results[0] + def clear(self) -> None: self.errors = {} self.validated_data = {} diff --git a/tests/unit/serializer/test_data.py b/tests/unit/serializer/test_data.py new file mode 100644 index 0000000..9251928 --- /dev/null +++ b/tests/unit/serializer/test_data.py @@ -0,0 +1,38 @@ +from unittest import TestCase +import sqlalchemy +from alcherializer import Serializer + + +class TestSerializerData(TestCase): + + def test_data_single_instance(self) -> None: + class MyModel: + name = sqlalchemy.Column(sqlalchemy.String, nullable=False) + + class MySerializer(Serializer): + class Meta: + model = MyModel + + model = MyModel() + model.name = "hello world" + + serializer = MySerializer(model) + self.assertDictEqual(serializer.data, { + "name": "hello world" + }) + + def test_data_multiple_instances(self) -> None: + class MyModel: + name = sqlalchemy.Column(sqlalchemy.String, nullable=False) + + class MySerializer(Serializer): + class Meta: + model = MyModel + + model = MyModel() + model.name = "hello world" + + serializer = MySerializer([model], many=True) + self.assertListEqual(serializer.data, [ + {"name": "hello world"} + ])