Files
mta-sign/server.py

64 lines
1.6 KiB
Python

import logging
import os
from datetime import datetime
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi_utils.tasks import repeat_every
# import pandas as pd
from dotenv import load_dotenv
from starlette.responses import JSONResponse
from mta_manager import MTA, Feed, Route
load_dotenv()
api_key = os.getenv('MTA_API_KEY', '')
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['*']
)
logger = logging.getLogger(__name__) # the __name__ resolve to "main" since we are at the root of the project.
start_time = datetime.now()
last_updated = datetime.now()
mtaController = MTA(
api_key,
feeds=[Feed.ACE, Feed.N1234567]
)
ROUTES = [Route.A, Route.C, Route.E, Route.N1, Route.N2, Route.N3]
STATION_STOP_IDs = ["127S", "127N", "A27N", "A27S"]
@app.post("/api/start_time")
def get_start_time():
return start_time.isoformat()
@app.post("/api/mta_data")
async def get_mta_data():
# if len(mtaController.trains) == 0:
# _ = update_trains()
arrival_by_station_and_route = {}
for stop_id in STATION_STOP_IDs:
arrival_by_station_and_route[stop_id] = {}
for route in ROUTES:
arrival_times = mtaController.get_arrival_times(route, stop_id)
if len(arrival_times) > 0:
arrival_by_station_and_route[stop_id][route.value] = arrival_times
return JSONResponse(arrival_by_station_and_route)
@app.on_event("startup")
@repeat_every(seconds=5)
async def update_trains():
logger.info("UPDATING TRAINS")
mtaController.update_trains()