harsimran726's picture
Update main.py
868a209 verified
import fastapi
from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import FileResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
import json
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import uvicorn
from pydantic import BaseModel
from typing import List, Optional
from Data_Geneartion_Agent import generate_data_agent
import os
from dotenv import load_dotenv
app = FastAPI()
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # or your Netlify frontend URL
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Mount static files
templates = Jinja2Templates(directory="templates")
# app.mount("/static", StaticFiles(directory="static"), name="static")
class Query(BaseModel):
# api_key: str
query: str
class Result(BaseModel):
status: str
message: str
csv_file: Optional[str] = None
def save_api_key(api_key: str):
"""Save API key to .env file"""
# with open(".env", "w") as f:
# f.write(f"GOOGLE_API_KEY={api_key}\n")
# with open("runtime_env.json", "w") as f:
# json.dump({"API_KEY": api_key}, f)
# Reload environment variables
load_dotenv()
@app.get("/",response_class=HTMLResponse)
async def root(request: Request):
return templates.TemplateResponse("index.html",{"request":request})
# class ApiKey(BaseModel):
# api_key: str
# @app.post("/api/save_api_key")
# async def save_api_key(api_key: ApiKey):
# with open(".env", "w") as f:
# f.write(f"GOOGLE_API_KEY={api_key.api_key}")
# return JSONResponse(content={"message": "API key saved successfully"}, status_code=200)
@app.post("/generate")
async def generate(query: Query):
try:
# Save the API key to .env file
# print(f"Here is api_key in main.py {query.api_key}")
# save_api_key(query.api_key)
# Generate data using the agent with the new API key
result = generate_data_agent(query.query)
print(f"Here is the final result {result}")
return result
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/download/{filename}")
async def download_file(filename: str):
try:
print(f"Here is file filename in main.py {filename}")
return FileResponse(
path=filename,
filename=filename,
media_type="text/csv"
)
except Exception as e:
raise HTTPException(status_code=404, detail="File not found")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)