Spaces:
Runtime error
Runtime error
from fastapi import FastAPI, HTTPException, Query | |
from fastapi.middleware.cors import CORSMiddleware | |
import uvicorn | |
import os | |
from typing import List, Dict, Any, Optional | |
from db.wiki_db_sqlite import WikiDBSqlite | |
app = FastAPI(title="Wiki API Server") | |
# Add CORS middleware | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], | |
allow_credentials=True, | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
# Global database connection | |
db = None | |
async def startup_db_client(): | |
global db | |
db_path = os.environ.get("WIKI_DB_PATH") | |
if not db_path: | |
raise ValueError("WIKI_DB_PATH environment variable not set") | |
db = WikiDBSqlite(db_path) | |
async def get_article_count() -> Dict[str, int]: | |
"""Get the number of articles in the database""" | |
return {"count": db.get_article_count()} | |
async def get_article_titles() -> Dict[str, List[str]]: | |
"""Get all article titles""" | |
return {"titles": db.get_all_article_titles()} | |
async def get_article(title: str = Query(..., description="Article title")) -> Dict[str, Any]: | |
"""Get article data by title""" | |
article = db.get_article(title) | |
if not article: | |
raise HTTPException(status_code=404, detail=f"Article '{title}' not found") | |
return article | |
async def article_exists(title: str = Query(..., description="Article title")) -> Dict[str, bool]: | |
"""Check if an article exists""" | |
return {"exists": db.article_exists(title)} | |
async def get_article_text(title: str = Query(..., description="Article title")) -> Dict[str, str]: | |
"""Get the text of an article""" | |
if not db.article_exists(title): | |
raise HTTPException(status_code=404, detail=f"Article '{title}' not found") | |
return {"text": db.get_article_text(title)} | |
async def get_article_links(title: str = Query(..., description="Article title")) -> Dict[str, List[str]]: | |
"""Get the links of an article""" | |
if not db.article_exists(title): | |
raise HTTPException(status_code=404, detail=f"Article '{title}' not found") | |
return {"links": db.get_article_links(title)} | |
if __name__ == "__main__": | |
uvicorn.run("api_server:app", host="0.0.0.0", port=8000, reload=True) |