Table.get now supports queries

This commit is contained in:
evilchili 2025-10-04 13:36:29 -07:00
parent 76e65def2c
commit 9449cc3937
2 changed files with 21 additions and 6 deletions

View File

@ -34,11 +34,26 @@ class RecordTable(table.Table):
doc.after_insert(self._db) doc.after_insert(self._db)
return doc.deserialize(self._db) return doc.deserialize(self._db)
def get(self, doc_id: int, recurse: bool = False): def get(self, *args, doc_id: int = None, recurse: bool = False, **kwargs):
"""
Return exactly zero or one records from the database matching the supplied criteria.
If more than one records match the criteria, return the first one. Criteria are ignored
if doc_id is specified.
Usage:
Table.get(doc_id=1)
Table.get(where("uid") == "abcdef")
"""
if doc_id:
document = super().get(doc_id=doc_id) document = super().get(doc_id=doc_id)
if document: if document:
return document.deserialize(self._db, recurse=recurse) return document.deserialize(self._db, recurse=recurse)
matches = self.search(*args, recurse=recurse, **kwargs)
if matches:
return matches[0]
def search(self, *args, recurse: bool = False, **kwargs) -> List[Record]: def search(self, *args, recurse: bool = False, **kwargs) -> List[Record]:
results = super().search(*args, **kwargs) results = super().search(*args, **kwargs)
return [r.deserialize(self._db, recurse=recurse) for r in results] return [r.deserialize(self._db, recurse=recurse) for r in results]

View File

@ -116,8 +116,8 @@ def test_search(db):
assert ricky in crew.members assert ricky in crew.members
Group = Query() Group = Query()
crew = db.Group.search(Group.name == "Crew", recurse=False) crew = db.Group.get(Group.name == "Crew", recurse=False)
assert kirk.reference in crew[0].members assert kirk.reference in crew.members
def test_password(db): def test_password(db):