Spaces:
Running
Running
File size: 3,445 Bytes
f44e85b b6ccbb2 f44e85b 4686d63 f44e85b b6ccbb2 f44e85b 4686d63 f44e85b 4686d63 b6ccbb2 4686d63 f44e85b d971f44 446c76e 88cdfa2 4686d63 5919721 4686d63 f44e85b 4686d63 f44e85b ec7f7d1 b6ccbb2 4686d63 f44e85b 4686d63 f44e85b b6ccbb2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from motor.motor_asyncio import AsyncIOMotorClient
from typing import List
from fastapi.middleware.cors import CORSMiddleware
import os
# MongoDB connection URI
MONGO_URI = os.getenv("MONGO_URI")
# Initialize FastAPI app
app = FastAPI()
# Allow CORS for all origins
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Allows all origins, change this to more specific if needed
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# MongoDB client
client = AsyncIOMotorClient(MONGO_URI)
db = client.disease # MongoDB database
disease_collection = db.diseases # MongoDB collection
# Pydantic model to represent the Disease schema
class DiseaseDesc(BaseModel):
diseaseName: str
symptoms: str
diseaseCauses: str
class DiseaseRemedy(BaseModel):
title: str
diseaseRemedyShortDesc: str
diseaseRemedy: str
class Disease(BaseModel):
key: str
plantName: str
botanicalName: str
diseaseDesc: DiseaseDesc
diseaseRemedyList: List[DiseaseRemedy]
# Root route to show a welcome message
@app.get("/")
def welcome():
return {"message": "Welcome to the Disease Information API! Visit /docs for API documentation."}
@app.get("/check/{plant_name}")
async def get_disease(plant_name: str):
return {"plantName":plant_name}
# API endpoint to fetch disease details by plant name
@app.get("/disease/{plant_name}", response_model=Disease)
async def get_disease(plant_name: str):
disease = await disease_collection.find_one({"key": plant_name})
if disease is None:
raise HTTPException(status_code=404, detail="Disease not found")
disease_data = Disease(
key=disease["key"],
plantName=disease["plantName"],
botanicalName=disease["botanicalName"],
diseaseDesc=DiseaseDesc(
diseaseName=disease["diseaseDesc"]["diseaseName"],
symptoms=disease["diseaseDesc"]["symptoms"],
diseaseCauses=disease["diseaseDesc"]["diseaseCauses"]
),
diseaseRemedyList=[DiseaseRemedy(
title=remedy["title"],
diseaseRemedyShortDesc=remedy["diseaseRemedyShortDesc"],
diseaseRemedy=remedy["diseaseRemedy"]
) for remedy in disease["diseaseRemedyList"]]
)
return disease_data
# New endpoint to fetch disease details by key
@app.get("/kotlinback/{key}", response_model=Disease)
async def get_disease_by_key(key: str):
disease = await disease_collection.find_one({"key": key})
if disease is None:
raise HTTPException(status_code=404, detail="Disease not found")
disease_data = Disease(
key=disease["key"],
plantName=disease["plantName"],
botanicalName=disease["botanicalName"],
diseaseDesc=DiseaseDesc(
diseaseName=disease["diseaseDesc"]["diseaseName"],
symptoms=disease["diseaseDesc"]["symptoms"],
diseaseCauses=disease["diseaseDesc"]["diseaseCauses"]
),
diseaseRemedyList=[DiseaseRemedy(
title=remedy["title"],
diseaseRemedyShortDesc=remedy["diseaseRemedyShortDesc"],
diseaseRemedy=remedy["diseaseRemedy"]
) for remedy in disease["diseaseRemedyList"]]
)
return disease_data
# Run the FastAPI server using Uvicorn
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=5000) |