Skip to content

Commit 4ade014

Browse files
committed
Extract duplicated logic
1 parent 8908d51 commit 4ade014

1 file changed

Lines changed: 14 additions & 12 deletions

File tree

sqlalchemy_serializer/serializer.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,23 @@ def serialize(self, value):
209209
return callback(value)
210210
raise IsNotSerializable(f"Unserializable type:{type(value)} value:{value}")
211211

212+
def serialize_with_fork(self, value, key):
213+
# TODO: merge this function with the serialize function
214+
# TODO: this should be performed after is_valid_callable check
215+
serializer = self
216+
if self.is_forkable(value):
217+
serializer = self.fork(key=key)
218+
219+
return serializer.serialize(value)
220+
212221
def serialize_iter(self, value: Iterable) -> list:
213222
res = []
214223
for v in value:
215224
try:
216225
r = self.serialize(v)
217-
except IsNotSerializable: # FIXME: Why we swallow exception only in iterable?
226+
except (
227+
IsNotSerializable
228+
): # FIXME: Why we swallow exception only in iterable?
218229
logger.warning("Can not serialize type:%s", get_type(v))
219230
continue
220231

@@ -227,11 +238,7 @@ def serialize_dict(self, value: dict) -> dict:
227238
if self.schema.is_included(k): # TODO: Skip check if is NOT greedy
228239
logger.debug("Serialize key:%s type:%s of dict", k, get_type(v))
229240

230-
serializer = self
231-
if self.is_forkable(v):
232-
serializer = self.fork(key=k)
233-
234-
res[k] = serializer.serialize(v)
241+
res[k] = self.serialize_with_fork(value=v, key=k)
235242
else:
236243
logger.debug("Skip key:%s of dict", k)
237244
return res
@@ -250,12 +257,7 @@ def serialize_model(self, value) -> dict:
250257
logger.debug(
251258
"Serialize key:%s type:%s model:%s", k, get_type(v), get_type(value)
252259
)
253-
254-
serializer = self
255-
if self.is_forkable(v):
256-
serializer = self.fork(key=k)
257-
258-
res[k] = serializer.serialize(v)
260+
res[k] = self.serialize_with_fork(value=v, key=k)
259261

260262
else:
261263
logger.debug("Skip key:%s of model:%s", k, get_type(value))

0 commit comments

Comments
 (0)