Skip to content

Commit 6043eb1

Browse files
committed
Support extra functions.
1 parent 0c7a2e0 commit 6043eb1

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

django_qserializer/serialization.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import types
2+
13
from django.db import models
24
from django.db.models.query import ModelIterable
35
from django.db.models.manager import BaseManager
@@ -142,7 +144,18 @@ def serialize(objs):
142144
return serializer.serialize(objs)
143145

144146

147+
class _FuncSerializer(BaseSerializer):
148+
def __init__(self, func):
149+
super().__init__()
150+
self.func = func
151+
152+
def serialize_object(self, obj):
153+
return self.func(obj)
154+
155+
145156
def _resolve_serializer(serializer):
146-
if not isinstance(serializer, BaseSerializer):
157+
if isinstance(serializer, types.FunctionType):
158+
serializer = _FuncSerializer(serializer)
159+
elif not isinstance(serializer, BaseSerializer):
147160
serializer = serializer()
148161
return serializer

django_qserializer/tests/test_serializer.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,31 @@ def serialize_object(self, obj):
5757
'myattr': obj.company.name
5858
}
5959

60+
def func(obj):
61+
return {
62+
'seats': 32,
63+
}
64+
6065
class S(BaseSerializer):
6166
extra = {
6267
'myattr': Attr,
68+
'func': func,
6369
}
6470

6571
def serialize_object(self, obj):
6672
return {
6773
'plate': obj.plate,
6874
}
6975

76+
serializer = S(extra=['myattr', 'func'])
77+
7078
with django_assert_num_queries(1):
71-
bus = Bus.objects.to_serialize(S(extra=['myattr'])).first()
79+
bus = Bus.objects.to_serialize(serializer).first()
7280

7381
expected = {
7482
'plate': 'BUSER',
7583
'myattr': 'Hurricane Cart',
84+
'seats': 32,
7685
}
7786

7887
with django_assert_num_queries(0):

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = django_qserializer
3-
version = 0.2.2
3+
version = 0.2.3
44
url = https://github.com/buserbrasil/django-qserializer
55
license = MIT
66
author = Iuri de Silvio

0 commit comments

Comments
 (0)