Finished first full flow design. All updates are displayed on the board.

This commit is contained in:
Lucas
2021-07-18 17:14:28 -04:00
parent dfdffda31e
commit f372d0d48e
3 changed files with 187 additions and 80 deletions

View File

@@ -1,33 +1,58 @@
import os
import threading
from flask import Flask, jsonify, render_template, request
from mta_manager import MTA
from pprint import pprint
import pandas as pd
from dotenv import load_dotenv
load_dotenv()
app = Flask(__name__)
app.secret_key = "SuperSecretDontEvenTryToGuessMeGGEZNoRe"
app.debug = True
app._static_folder = os.path.abspath("templates/static/")
subway_data = {}
stops = pd.read_csv("stops.txt")
stop_ids = ["127S", "127N", "A27N", "A27S"]
@app.route("/", methods=["GET"])
def index():
# TODO: Shove this into a sqlite database
station_names = sorted(list(set(stops["stop_name"].to_list())))
print(station_names)
return render_template("layouts/index.html", station_names=station_names)
return render_template(
"layouts/index.html",
station_names=station_names,
station_1="42 St-Port Authority Bus Terminal",
station_2="Times Sq-42 St"
)
def link_to_station(data):
linked_data = {}
for key, value in data.items():
stop_name = stops.loc[stops["stop_id"] == key]
stop_name = stop_name["stop_name"].values[0]
if stop_name not in linked_data:
linked_data[stop_name] = {}
if "N" in key:
linked_data[stop_name]["North"] = value
elif "S" in key:
linked_data[stop_name]["South"] = value
return linked_data
@app.route("/mta_data", methods=["POST"])
def get_mta_data():
content = request.json
station = request.json["station"]
print(jsonify(
subway_data[station]
))
return jsonify(
subway_data
subway_data[station]
)
@@ -35,56 +60,52 @@ def get_mta_data():
def get_routes():
return jsonify()
@app.route("/get_stop_id/<stop_name>", methods=["GET"])
def get_stop_id(stop_name):
@app.route("/get_stop_id", methods=["POST"])
def get_stop_id():
print(request.json)
stop_name = request.json["stop_name"]
print(stop_name)
rows = stops.loc[stops["stop_name"] == stop_name]
print(rows)
return str(rows)
def ack():
print('message was received!')
class threadWrapper(threading.Thread):
def __init__(self, run, controller):
threading.Thread.__init__(self)
self.run = run
self.controller = controller
def run(self):
self.run()
async def mta_callback(routes):
global subway_data
# TODO: Do away with this and throw it into websockets
subway_data = mtaController.convert_routes_to_station_first(routes)
def start_mta():
mtaController.add_callback(mta_callback)
mtaController.start_updates()
return jsonify({"station_changed": True})
if __name__ == "__main__":
api_key = os.getenv('MTA_API_KEY', '')
mtaController = MTA(
# TODO: Update to only work with station names - need to be able to transfer the station names to train lines -
# maybe with polling the station ids to see what train lines come up?
api_key,
["A", "C", "E", "1", "2", "3"],
["127S", "127N", "A27N", "A27S"]
)
async def mta_callback(routes):
global subway_data
subway_data = link_to_station(mtaController.convert_routes_to_station_first(routes))
class threadWrapper(threading.Thread):
def __init__(self, run):
threading.Thread.__init__(self)
self.run = run
def run(self):
self.run()
def start_mta():
mtaController.add_callback(mta_callback)
mtaController.start_updates()
threadLock = threading.Lock()
threads = [threadWrapper(start_mta, mtaController)]
threads = [threadWrapper(start_mta)]
for t in threads:
t.start()
app.run("0.0.0.0", port=5000, debug=True)
app.run(host="localhost", debug=True, port=5000)
# Wait for all threads to complete
for t in threads:
t.join()