Spaces:
Runtime error
Runtime error
File size: 2,614 Bytes
737cb33 021b7e0 737cb33 e245176 028bcd8 97911a8 a31ad35 737cb33 021b7e0 737cb33 021b7e0 737cb33 e245176 028bcd8 97911a8 a31ad35 737cb33 |
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 |
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
# Scheduler imports
from contextlib import asynccontextmanager
from scheduler.scheduler import scheduler
from scheduler.task_registry import task_registry
from scheduler.tasks.cijene_task import CijeneDataFetchTask
from scheduler.tasks.cleanup_task import DatabaseCleanupTask
# Routes imports
from api.product_routes import router as product_router
from api.receipt_routes import router as receipt_router
from api.scrape_routes import router as scrape_router
from api.cijene_routes import router as cijene_router
from api.similarity_routes import router as similarity_router
from api.geocoding_routes import router as geocoding_router
@asynccontextmanager
async def lifespan(app: FastAPI):
# Register task classes
task_registry.register_task_class("cijene_fetch", CijeneDataFetchTask)
task_registry.register_task_class("database_cleanup", DatabaseCleanupTask)
# Create task instances
fetch_task = task_registry.create_task(
"cijene_fetch",
"daily_cijene_fetch",
name="Daily Cijene Data Fetch"
)
cleanup_task = task_registry.create_task(
"database_cleanup",
"daily_cleanup",
name="Daily Database Cleanup",
dependencies=["daily_cijene_fetch"] # Run after fetch
)
# Schedule the job chain
scheduler.add_daily_job(
"daily_data_pipeline",
["daily_cijene_fetch", "daily_cleanup"],
hour=16, minute=58
)
# Add event handlers
async def job_completed_handler(job_id: str, results: dict):
print(f"✅ Job {job_id} completed successfully!")
async def job_failed_handler(job_id: str, results: dict):
print(f"❌ Job {job_id} failed!")
scheduler.register_event_handler('job_completed', job_completed_handler)
scheduler.register_event_handler('job_failed', job_failed_handler)
# Start scheduler
scheduler.start()
yield
# Shutdown
scheduler.stop()
# Initialize FastAPI
app = FastAPI(title="SupaKuna API", lifespan=lifespan)
# CORS configuration
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
expose_headers=["*"]
)
# Add routers
app.include_router(product_router)
app.include_router(receipt_router)
app.include_router(scrape_router)
app.include_router(cijene_router)
app.include_router(similarity_router)
app.include_router(geocoding_router)
@app.get("/", tags=["Health"])
def health_check():
return {"status": "OK"}
|