diff --git a/server.py b/server.py index 03cb697..ecaaf37 100644 --- a/server.py +++ b/server.py @@ -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/", 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() diff --git a/templates/layouts/index.html b/templates/layouts/index.html index d3b86b9..ca6cf32 100644 --- a/templates/layouts/index.html +++ b/templates/layouts/index.html @@ -4,10 +4,20 @@ - + + + + Hello, world! @@ -23,18 +33,18 @@ -
+
@@ -76,22 +93,25 @@
@@ -99,10 +119,21 @@ -
+
@@ -116,7 +147,6 @@
  • -

    @@ -126,12 +156,16 @@
  • -

    A second item

    +

    + Pi MTA Display! +

  • -

    A third item

    +

    + Pi MTA Display! +

@@ -145,18 +179,25 @@
@@ -166,8 +207,6 @@ - + \ No newline at end of file diff --git a/templates/static/js/DataRequests.js b/templates/static/js/DataRequests.js index 7947451..5e68732 100644 --- a/templates/static/js/DataRequests.js +++ b/templates/static/js/DataRequests.js @@ -1,12 +1,12 @@ $(document).ready(function () { - function clearCanvas() { - var canvas = document.getElementById("inputCanvas"); - var ctx = canvas.getContext("2d"); - ctx.clearRect(0, 0, canvas.width, canvas.height); - } + const interval = setInterval(function () { + updateData($('#station_1')) + updateData($('#station_2')) + }, 5000); + + function updateData(station) { - function getData() { $.ajax({ type: "POST", //the url where you want to sent the userName and password to @@ -15,10 +15,10 @@ $(document).ready(function () { dataType: "json", async: true, //json object to sent to the authentication url - data: JSON.stringify({"test_dict":"test_value"}, null, '\t'), - + data: JSON.stringify({"station": station.find('.station-name:first').get(0).innerText}, null, '\t'), success: function (data, text) { - $("#result").text(JSON.stringify(data)); + // console.log(data) + updateStation(station, data) }, error: function (request, status, error) { alert(request.responseText); @@ -26,8 +26,55 @@ $(document).ready(function () { }); } - $("#test_button").click(function () { - getData(); - }); + function updateStation(station, data) { + //get first item + updateDirections(station, data, "North"); + updateDirections(station, data, "South"); + } -}); \ No newline at end of file + function updateDirections(station, data, direction) { + // console.log(direction) + // console.log(".card:".concat(direction === "North" ? "first" : "last")) + n = data[direction] + // console.log(data[direction]) + list_items = station.find(".card:".concat(direction === "North" ? "first" : "last")).find(".station-info") + var i = 0; + for (var train in n) { + // console.log(train) + // console.log(list_items) + updateLineItem(list_items.get(i), n[train], train) + i = i + 1 + } + } + + function updateLineItem(listItem, times, train) { + // console.log(times) + $(listItem).find("img").attr("src", "/static/images/lines/" + train + ".svg") + $(listItem).find("h1").text(times.sort(function (a, b) { + return a - b; + }).join(", ")); + } +}); + +function setStation(ele) { + console.log(ele) + console.log($(ele).text()) + var stop_name = ele.text; + + $.ajax({ + type: "POST", + //the url where you want to sent the userName and password to + url: '/get_stop_id', + contentType: "application/json", + dataType: "json", + async: true, + //json object to sent to the authentication url + data: JSON.stringify({"stop_name": stop_name}, null, '\t'), + success: function (data, text) { + alert(JSON.stringify(data)); + }, + error: function (request, status, error) { + alert(request.responseText); + } + }); +} \ No newline at end of file