userIdc2024's picture
Update src/Database/operations.py
71dd5b6 verified
from __future__ import annotations
from datetime import datetime
from typing import Any, Dict, List, Optional
from pymongo import DESCENDING
from Database.connections import get_img_gen_collection
import streamlit as st
from core.logger import logger
def insert_img_gen_run_result(
*,
prompts: List[str],
image_urls: List[str],
category: str = "general",
platform: Optional[str] = None,
model_name: Optional[str] = None,
offer: Optional[str] = None,
framework: Optional[str] = None,
user_query: Optional[str] = None,
created_by: Optional[str] = None,
) -> str:
col = get_img_gen_collection()
if col is None:
raise ValueError("img_gen collection not available.")
if not prompts or not image_urls:
raise ValueError("prompts and image_urls cannot be empty")
doc: Dict[str, Any] = {
"source": "img_generator",
"category": category or "general",
"prompts": prompts,
"image_urls": image_urls,
"platform": platform,
"model_name": model_name,
"offer": offer if offer else '',
"framework": framework if framework else '',
"user_query": user_query,
"created_by": created_by,
"created_at": datetime.utcnow(),
}
res = col.insert_one(doc)
return str(res.inserted_id)
def find_img_gen_results(
*,
category: Optional[str] = None,
start_date: Optional[datetime] = None,
end_date: Optional[datetime] = None,
limit: int = 200,
created_by: Optional[str] = None,
) -> List[Dict[str, Any]]:
try:
col = get_img_gen_collection()
if col is None:
return []
q: Dict[str, Any] = {"source": "img_generator"}
if category:
q["category"] = category
if start_date or end_date:
rng: Dict[str, Any] = {}
if start_date:
rng["$gte"] = start_date
if end_date:
rng["$lt"] = end_date
q["created_at"] = rng
if created_by:
q["created_by"] = created_by
cur = (
col.find(q)
.sort("created_at", DESCENDING)
.limit(limit)
)
out: List[Dict[str, Any]] = []
for d in cur:
d["_id"] = str(d.get("_id"))
out.append(d)
return out
except Exception as e:
st.error(f"Operations File: {e}")
def list_img_gen_categories(*, created_by: Optional[str] = None) -> List[str]:
col = get_img_gen_collection()
if col is None:
return []
q: Dict[str, Any] = {"source": "img_generator"}
if created_by:
q["created_by"] = created_by
cats = col.distinct("category", q)
cats = [c for c in cats if c]
cats.sort()
return cats