added database convenience functions
This commit is contained in:
@@ -0,0 +1,48 @@
|
|||||||
|
from pymongo.collection import Collection
|
||||||
|
|
||||||
|
from .classes import (
|
||||||
|
VisualCommunication,
|
||||||
|
NoDocumentFoundException
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def total_documents(
|
||||||
|
collection: Collection
|
||||||
|
) -> int:
|
||||||
|
"""Get total number of documents in database."""
|
||||||
|
return collection.count_documents(filter={})
|
||||||
|
|
||||||
|
|
||||||
|
def total_annotated(
|
||||||
|
collection: Collection
|
||||||
|
) -> int:
|
||||||
|
"""Get total number of annotated documents in database."""
|
||||||
|
query = {
|
||||||
|
"annotation": { "$ne": None }
|
||||||
|
}
|
||||||
|
return collection.count_documents(filter=query)
|
||||||
|
|
||||||
|
|
||||||
|
def get_visual_communication(
|
||||||
|
collection: Collection,
|
||||||
|
with_annotation: bool = False,
|
||||||
|
with_prediction: bool = False
|
||||||
|
) -> VisualCommunication:
|
||||||
|
"""Get a random visual communication from the database."""
|
||||||
|
query = {}
|
||||||
|
if with_annotation:
|
||||||
|
query["annotation"] = {"$ne": None}
|
||||||
|
else:
|
||||||
|
query["annotation"] = None
|
||||||
|
if with_prediction:
|
||||||
|
query["prediction"] = {"$ne": None}
|
||||||
|
else:
|
||||||
|
query["prediction"] = None
|
||||||
|
data = collection.aggregate([
|
||||||
|
{ "$match": query }, # find using filters
|
||||||
|
{ "$sample": { "size": 1 } } # get one random
|
||||||
|
])
|
||||||
|
data = list(data) # read data from cursor object
|
||||||
|
if len(data) == 0:
|
||||||
|
raise NoDocumentFoundException
|
||||||
|
return VisualCommunication.model_validate(data[0])
|
||||||
Reference in New Issue
Block a user