limit recursion of deserialization
This commit is contained in:
parent
562b9f14eb
commit
a3238bba0c
|
@ -37,9 +37,9 @@ class RecordTable(table.Table):
|
|||
if document:
|
||||
return document.deserialize(self._db)
|
||||
|
||||
def search(self, *args, **kwargs) -> List[Record]:
|
||||
def search(self, *args, recurse: bool = True, **kwargs) -> List[Record]:
|
||||
results = super().search(*args, **kwargs)
|
||||
return [r.deserialize(self._db) for r in results]
|
||||
return [r.deserialize(self._db, recurse=recurse) for r in results]
|
||||
|
||||
def remove(self, document):
|
||||
if document.doc_id:
|
||||
|
|
|
@ -26,7 +26,7 @@ class Field:
|
|||
def serialize(self, rec: value_type, db: TinyDB) -> str:
|
||||
return str(rec)
|
||||
|
||||
def deserialize(self, rec: value_type, db: TinyDB) -> value_type:
|
||||
def deserialize(self, rec: value_type, db: TinyDB, recurse: bool = True) -> value_type:
|
||||
return rec
|
||||
|
||||
|
||||
|
@ -35,7 +35,7 @@ class Integer(Field):
|
|||
value_type: type = int
|
||||
default: int = 0
|
||||
|
||||
def deserialize(self, rec: str, db: TinyDB) -> value_type:
|
||||
def deserialize(self, rec: str, db: TinyDB, recurse: bool = True) -> value_type:
|
||||
return int(rec)
|
||||
|
||||
|
||||
|
@ -66,13 +66,13 @@ class Record(Dict[(str, Field)]):
|
|||
rec[name] = _field.serialize(self[name], db)
|
||||
return self.__class__(rec, doc_id=self.doc_id)
|
||||
|
||||
def deserialize(self, db):
|
||||
def deserialize(self, db, recurse: bool = True):
|
||||
"""
|
||||
Deserialize every field on the record
|
||||
"""
|
||||
rec = {}
|
||||
for name, _field in self._metadata.fields.items():
|
||||
rec[name] = _field.deserialize(self[name], db)
|
||||
rec[name] = _field.deserialize(self[name], db, recurse=recurse)
|
||||
return self.__class__(rec, doc_id=self.doc_id)
|
||||
|
||||
def before_insert(self):
|
||||
|
@ -113,7 +113,7 @@ class Collection(Field):
|
|||
vals.append(f"{rec._metadata.table}::{rec.uid}")
|
||||
return vals
|
||||
|
||||
def deserialize(self, rec: List[value_type], db: TinyDB) -> value_type:
|
||||
def deserialize(self, rec: List[value_type], db: TinyDB, recurse=True) -> value_type:
|
||||
"""
|
||||
Recursively deserialize the objects in this collection
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user