TrafficSimApp / src /app /main.py
GitHub Actions
Deploy App to HF Spaces
63cc479
Raw History Blame Contribute Delete
1.7 kB
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import asyncio
import osmnx as ox
from app.api.routes import router as api_router
from app.core.state import sim_state
from app.core.config import LOCATION
from app.simulation.engine import init_sim_entities, simulation_loop
app = FastAPI(title="Simulation Backend")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(api_router)
@app.on_event("startup")
async def startup_event():
print(f"Loading graph for {LOCATION}...")
try:
sim_state.graph = ox.graph_from_place(LOCATION, network_type="drive")
except Exception as e:
print("Failed to download exact place, using bounding box or default fallback...", e)
sim_state.graph = ox.graph_from_point((33.6515, 73.0801), dist=2500, network_type="drive")
# Extract roads for frontend rendering
roads = []
for u, v, data in sim_state.graph.edges(data=True):
if 'geometry' in data:
coords = list(data['geometry'].coords)
roads.append([[pt[1], pt[0]] for pt in coords])
else:
u_node = sim_state.graph.nodes[u]
v_node = sim_state.graph.nodes[v]
roads.append([[u_node['y'], u_node['x']], [v_node['y'], v_node['x']]])
sim_state.roads = roads
init_sim_entities()
print("Simulation initialized.")
asyncio.create_task(simulation_loop())
if __name__ == "__main__":
import uvicorn
# Make sure to run the file inside `src/` to correctly access `app.main:app` module.
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)