Spaces:
Runtime error
Runtime error
from fastapi import APIRouter, HTTPException, Response, Form | |
from config import settings | |
import os | |
import motor.motor_asyncio | |
from routers.data_utils import get_receipt_data | |
from routers.data_utils import store_receipt_db_data | |
from routers.data_utils import get_receipt_db_data | |
from routers.data_utils import delete_receipt_db_data | |
from routers.data_utils import get_user_receipt_db_ids | |
from routers.data_utils import get_user_receipt_content_db | |
from pymongo.errors import PyMongoError | |
import json | |
router = APIRouter() | |
client = None | |
db = None | |
async def startup_event(): | |
if "MONGODB_URL" in os.environ: | |
global client | |
global db | |
client = motor.motor_asyncio.AsyncIOMotorClient(os.environ["MONGODB_URL"]) | |
db = client.chatgpt_plugin | |
print("Connected to MongoDB from ChatGPT plugin!") | |
async def shutdown_event(): | |
if "MONGODB_URL" in os.environ: | |
global client | |
client.close() | |
async def get_receipt_by_id(receipt_id: str, sparrow_key: str): | |
if sparrow_key != settings.sparrow_key: | |
return {"error": "Invalid Sparrow key."} | |
if "MONGODB_URL" in os.environ: | |
result = await get_receipt_data(receipt_id, db) | |
if result is None: | |
raise HTTPException(status_code=404, detail=f"Receipt {receipt_id} not found") | |
return result | |
return HTTPException(status_code=400, detail=f"No MongoDB URL provided.") | |
async def run_store_receipt_db(chatgpt_user: str = Form(None), receipt_id: str = Form(None), | |
receipt_content: str = Form(None), sparrow_key: str = Form(None)): | |
if sparrow_key != settings.sparrow_key: | |
return {"error": "Invalid Sparrow key."} | |
print(f"Storing receipt {receipt_id} for user {chatgpt_user}...") | |
if "MONGODB_URL" in os.environ: | |
try: | |
json.loads(receipt_content) | |
except json.decoder.JSONDecodeError: | |
return HTTPException(status_code=400, detail=f"Receipt content is not valid JSON.") | |
try: | |
result = await store_receipt_db_data(chatgpt_user, receipt_id, receipt_content, db) | |
except PyMongoError: | |
return HTTPException(status_code=400, detail=f"Saving data failed.") | |
if result is not None: | |
return Response(status_code=200) | |
return HTTPException(status_code=400, detail=f"No MongoDB URL provided.") | |
async def get_receipt_db_by_id(chatgpt_user: str, receipt_id: str, sparrow_key: str): | |
if sparrow_key != settings.sparrow_key: | |
return {"error": "Invalid Sparrow key."} | |
if "MONGODB_URL" in os.environ: | |
result = await get_receipt_db_data(chatgpt_user, receipt_id, db) | |
if result is None: | |
raise HTTPException(status_code=404, detail=f"Receipt {receipt_id} not found") | |
return json.loads(result) | |
return HTTPException(status_code=400, detail=f"No MongoDB URL provided.") | |
async def delete_receipt_db_by_id(chatgpt_user: str, receipt_id: str, sparrow_key: str): | |
if sparrow_key != settings.sparrow_key: | |
return {"error": "Invalid Sparrow key."} | |
if "MONGODB_URL" in os.environ: | |
result = await delete_receipt_db_data(chatgpt_user, receipt_id, db) | |
if result.deleted_count == 0: | |
raise HTTPException(status_code=404, detail=f"Receipt {receipt_id} not found") | |
return Response(status_code=200) | |
return HTTPException(status_code=400, detail=f"No MongoDB URL provided.") | |
async def get_receipt_db_ids_by_user(chatgpt_user: str, sparrow_key: str): | |
if sparrow_key != settings.sparrow_key: | |
return {"error": "Invalid Sparrow key."} | |
if "MONGODB_URL" in os.environ: | |
result = await get_user_receipt_db_ids(chatgpt_user, db) | |
if result is None: | |
raise HTTPException(status_code=404, detail=f"User {chatgpt_user} not found") | |
return result | |
return HTTPException(status_code=400, detail=f"No MongoDB URL provided.") | |
async def get_receipt_db_content_by_user(chatgpt_user: str, sparrow_key: str): | |
if sparrow_key != settings.sparrow_key: | |
return {"error": "Invalid Sparrow key."} | |
if "MONGODB_URL" in os.environ: | |
result = await get_user_receipt_content_db(chatgpt_user, db) | |
return result | |
return HTTPException(status_code=400, detail=f"No MongoDB URL provided.") |