fintic-tracker/server.py

149 lines
4.4 KiB
Python

# 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 runStockTicker, stopStockTicker
from werkzeug.utils import secure_filename
import os
import datetime
import threading
import csv
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
runStockTicker(command, DelayTime, speedTime)
LastCommand = 'Run display'
elif "Stop Display (at next refresh)" in request.form:
pass
try:
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