# Copyright (C) 2020 Daniel Richardson richardson.daniel@hotmail.co.uk # # This file is part of stockTicker project for justinodunn. # # stockTicker can not be copied and/or distributed without the express # permission of Daniel Richardson from flask import Flask, render_template, request from stockTicker import StockTicker from werkzeug.utils import secure_filename import os import datetime import threading import csv stock_ticker = StockTicker() command = 300 tickerList = 0 DelayTime = 20 LastCommand = '' speedTime = 25 LOGO_FOLDER = 'logos/' CSV_FOLDER = 'csv/new/' ALLOWED_EXTENSIONS = {'csv', 'png'} def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS def process_file(path, filename): default_csv = csv.writer(open('csv/tickers.csv', 'w')) new_csv = csv.reader(open((path), 'r')) for row in new_csv: default_csv.writerow(row) def ShutdownPI(): print('SHUTTING DOWN') os.system("sudo shutdown --poweroff") app = Flask(__name__) @app.route("/", methods=['GET', 'POST']) def hello(): global command now = datetime.datetime.now() timeString = now.strftime("%Y-%m-%d %H:%M") LogoList = os.listdir('logos') templateData = { 'title' : 'Stock Ticker Control Panel', 'time': timeString, 'runtime': command, 'tickers': tickerList, 'logofiles':LogoList, 'lastcommand':LastCommand, 'delay':DelayTime, 'speedtime':speedTime } return render_template('index.html', **templateData) @app.route("/Runtime", methods=['POST']) def Runtime(): global command command = request.form['text'] print(command) global LastCommand LastCommand = 'Change runtime' return hello() @app.route("/Delay", methods=['POST']) def Delay(): global DelayTime DelayTime = request.form['text'] print(DelayTime) global LastCommand LastCommand = 'Change Delay' return hello() @app.route("/Speed", methods=['POST']) def Speed(): global speedTime speedTime = request.form['text'] print(speedTime) global LastCommand LastCommand = 'Change Speed' return hello() @app.route("/Ticker", methods=['POST']) def Ticker(): if request.method == 'POST': if 'file' not in request.files: print('No file attached in request') return hello() file = request.files['file'] if file.filename == '': print('No file selected') return hello() if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(CSV_FOLDER, filename)) process_file(os.path.join(CSV_FOLDER, filename), filename) global LastCommand LastCommand = 'Change CSV file' return hello() return hello() @app.route("/AddLogo", methods=['POST']) def AddLogo(): if request.method == 'POST': if 'file' not in request.files: print('No file attached in request') return hello() file = request.files['file'] if file.filename == '': print('No file selected') return hello() if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(LOGO_FOLDER, filename)) global LastCommand LastCommand = 'Add a new logo file' return hello() return hello() @app.route("/matrix", methods=['POST']) def matrix(): global LastCommand if "Run Display" in request.form: pass stock_ticker.runStockTicker(command, DelayTime, speedTime) LastCommand = 'Run display' elif "Stop Display (at next refresh)" in request.form: pass try: stock_ticker.stopStockTicker() LastCommand = 'Stop display at next checkpoint' except: print("none running") elif "Shutdown the pi" in request.form: pass try: LastCommand = 'shutdown' ShutdownPI() except: print("couldn't shutdown") return hello() if __name__ == "__main__": app.run(host='0.0.0.0', port=1024, debug=True) #sudo ./demo -D1 final.ppm -t 50 -m 25 --led-gpio-mapping=adafruit-hat --led-rows=32 --led-cols=256 --led-slowdown-gpio=4