deserialize search results
This commit is contained in:
@@ -2,6 +2,7 @@ import inspect
|
||||
import re
|
||||
from functools import reduce
|
||||
from operator import ior
|
||||
from typing import List
|
||||
|
||||
from tinydb import Query, TinyDB, table
|
||||
from tinydb.table import Document
|
||||
@@ -35,6 +36,10 @@ class RecordTable(table.Table):
|
||||
if document:
|
||||
return document.deserialize(self._db)
|
||||
|
||||
def search(self, *args, **kwargs) -> List[Record]:
|
||||
results = super().search(*args, **kwargs)
|
||||
return [r.deserialize(self._db) for r in results]
|
||||
|
||||
def remove(self, document):
|
||||
if document.doc_id:
|
||||
super().remove(doc_ids=[document.doc_id])
|
||||
|
||||
+6
-5
@@ -32,6 +32,7 @@ class Field:
|
||||
|
||||
@dataclass
|
||||
class Integer(Field):
|
||||
value_type: type = int
|
||||
default: int = 0
|
||||
|
||||
def deserialize(self, rec: str, db: TinyDB) -> value_type:
|
||||
@@ -61,8 +62,8 @@ class Record(Dict[(str, Field)]):
|
||||
Serialie every field on the record
|
||||
"""
|
||||
rec = {}
|
||||
for name, field in self._metadata.fields.items():
|
||||
rec[name] = field.serialize(self[name], db)
|
||||
for name, _field in self._metadata.fields.items():
|
||||
rec[name] = _field.serialize(self[name], db)
|
||||
return self.__class__(rec, doc_id=self.doc_id)
|
||||
|
||||
def deserialize(self, db):
|
||||
@@ -70,8 +71,8 @@ class Record(Dict[(str, Field)]):
|
||||
Deserialize every field on the record
|
||||
"""
|
||||
rec = {}
|
||||
for name, field in self._metadata.fields.items():
|
||||
rec[name] = field.deserialize(self[name], db)
|
||||
for name, _field in self._metadata.fields.items():
|
||||
rec[name] = _field.deserialize(self[name], db)
|
||||
return self.__class__(rec, doc_id=self.doc_id)
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
@@ -116,5 +117,5 @@ class Collection(Field):
|
||||
vals = []
|
||||
for member in rec:
|
||||
pt, puid = member.split("::")
|
||||
vals.append(db.table(pt).search(where("uid") == puid)[0].deserialize(db))
|
||||
vals.append(db.table(pt).search(where("uid") == puid)[0])
|
||||
return vals
|
||||
|
||||
Reference in New Issue
Block a user