fintic-tracker/server.py

357 lines
9.9 KiB
Python
Raw Normal View History

2021-04-26 18:51:21 +00:00
# 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
2021-04-26 18:51:21 +00:00
from werkzeug.utils import secure_filename
import os
import datetime
import threading
import csv
import pexpect
2021-05-05 21:14:04 +00:00
import time
2021-05-27 19:10:57 +00:00
import json
from multiprocessing import Process
from subprocess import Popen, PIPE
#stock_ticker = StockTicker()
api_caller = pexpect.spawn("sudo -E python3 api_caller.py")
2021-04-26 18:51:21 +00:00
command = 300
tickerList = 0
DelayTime = 20
LastCommand = ''
speedTime = 25
LOGO_FOLDER = 'logos/'
CSV_FOLDER = 'csv/new/'
ALLOWED_EXTENSIONS = {'csv', 'png'}
#ticker.stdin.write(b'from server')
#print(ticker.stdout.readlines())
#(output, errs)
2021-05-06 19:59:27 +00:00
#time.sleep(10) # let api calls finish
2021-05-05 21:14:04 +00:00
ticker = pexpect.spawn("sudo -E python3 stockTicker.py")
ticker.sendline('S') # run by default
#stock_ticker = StockTicker()
2021-04-26 18:51:21 +00:00
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)
2021-05-05 15:22:01 +00:00
2021-04-26 18:51:21 +00:00
app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def hello():
global command
2021-05-05 15:22:01 +00:00
2021-04-26 18:51:21 +00:00
now = datetime.datetime.now()
timeString = now.strftime("%Y-%m-%d %H:%M")
2021-05-05 21:00:12 +00:00
logos_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logos')
LogoList = os.listdir(logos_path)
2021-04-26 18:51:21 +00:00
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():
2021-05-05 15:22:01 +00:00
global speed
speed = request.form['text']
print(speed)
ticker.sendline(speed)
f = open('csv/settings.csv', 'r')
CSV = csv.reader(f)
2021-05-06 19:59:27 +00:00
next(CSV)
2021-05-05 15:22:01 +00:00
for line in CSV:
_, brightness = line
f.close()
f = open('csv/settings.csv', 'w+')
2021-05-06 19:59:27 +00:00
f.write('speed,brightness\n')
2021-05-05 15:22:01 +00:00
f.write(str(speed) + ',' + brightness)
f.close()
2021-04-26 18:51:21 +00:00
global LastCommand
LastCommand = 'Change Speed'
return hello()
@app.route("/Brightness", methods=['POST'])
def Brightness():
global brightness
2021-05-04 21:49:33 +00:00
brightness = int(request.form['text'])-1
print(brightness)
2021-05-04 21:49:33 +00:00
ticker.sendline(str(brightness))
2021-05-05 15:22:01 +00:00
f = open('csv/settings.csv', 'r')
CSV = csv.reader(f)
2021-05-06 19:59:27 +00:00
next(CSV)
2021-05-05 15:22:01 +00:00
for line in CSV:
speed, _ = line
f.close()
f = open('csv/settings.csv', 'w+')
2021-05-06 19:59:27 +00:00
f.write('speed,brightness\n')
2021-05-05 15:22:01 +00:00
f.write(str(speed) + ',' + str(brightness))
f.close()
global LastCommand
LastCommand = 'Change Brightness'
return hello()
2021-04-26 18:51:21 +00:00
@app.route("/DisplayText", methods=['POST'])
def DisplayText():
2021-05-14 10:31:14 +00:00
text = request.form['text']
f = open('csv/scroll_text.csv', 'w+')
f.write(text)
f.close()
ticker.sendline('K')
2021-05-14 10:31:14 +00:00
ticker.sendline('T')
return hello()
2021-05-27 19:10:57 +00:00
@app.route("/SetNews", methods=['POST'])
def SetNews():
text = request.form['text']
#args = ['q', 'sources', 'category', 'country']
args = ['q', 'category', 'country']
arg_dict = {}
lst = text.split(',')
try:
for i, arg in enumerate(args):
if len(lst[i])>0:
arg_dict[arg] = lst[i]
print(arg_dict)
json.dump( arg_dict, open( "csv/news_settings.json", 'w+' ))
print(settings)
except Exception as e:
#reset settings
print(e)
f = open( "csv/news_settings.json", 'w+' )
f.close()
api_caller.sendline('R')
return hello()
2021-06-09 18:06:21 +00:00
@app.route("/SetWeather", methods=['POST'])
def SetWeather():
text = request.form['text']
#args = ['q', 'sources', 'category', 'country']
f = open( "csv/weather_location.txt", 'w+' )
f.write(text)
f.close()
api_caller.sendline('R')
return hello()
@app.route("/DisplayImage", methods=['POST'])
def DisplayImage():
if request.method == 'POST':
if 'file' not in request.files:
print('No file attached in request')
return hello()
fle = request.files['file']
if fle.filename == '':
print('No file selected')
return hello()
if fle and allowed_file(fle.filename):
filename = 'display_image'
fle.save(os.path.join(os.path.dirname(os.path.abspath(__file__)), filename))
global LastCommand
LastCommand = 'Add a new logo file'
ticker.sendline('K')
ticker.sendline('I')
return hello()
return hello()
@app.route("/DisplayGIF", methods=['POST'])
def DisplayGIF():
if request.method == 'POST':
if 'file' not in request.files:
print('No file attached in request')
return hello()
fle = request.files['file']
if fle.filename == '':
print('No file selected')
return hello()
if fle:
print('in')
filename = 'display_gif'
fle.save(os.path.join(os.path.dirname(os.path.abspath(__file__)), filename))
global LastCommand
LastCommand = 'Add a new logo file'
ticker.sendline('K')
ticker.sendline('G')
return hello()
return hello()
2021-05-14 10:31:14 +00:00
2021-04-26 18:51:21 +00:00
@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()
fle = request.files['file']
if fle.filename == '':
2021-04-26 18:51:21 +00:00
print('No file selected')
return hello()
if fle and allowed_file(fle.filename):
filename = secure_filename(fle.filename)
fle.save(os.path.join(CSV_FOLDER, filename))
2021-04-26 18:51:21 +00:00
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()
fle = request.files['file']
if fle.filename == '':
2021-04-26 18:51:21 +00:00
print('No file selected')
return hello()
if fle and allowed_file(fle.filename):
filename = secure_filename(fle.filename)
fle.save(os.path.join(LOGO_FOLDER, filename))
2021-04-26 18:51:21 +00:00
global LastCommand
LastCommand = 'Add a new logo file'
return hello()
return hello()
@app.route("/matrix", methods=['POST'])
def matrix():
2021-05-21 13:24:37 +00:00
global LastCommand
if "Run Stocks" in request.form:
2021-04-26 18:51:21 +00:00
pass
print('run display')
#stock_ticker.runStockTicker(command, DelayTime, speedTime)
#stock_ticker.displayMatrix()
#os.system("sudo -E python3 test.py")
#
#child.sendline('sent from server')
#process = Popen(["sudo", "-E", "python3", "stockTicker.py"], stdin=PIPE, stdout=PIPE, stderr=PIPE)
2021-05-21 13:24:37 +00:00
ticker.sendline('K')
ticker.sendline('S')
print('back in flask')
2021-04-26 18:51:21 +00:00
LastCommand = 'Run display'
2021-06-07 20:03:03 +00:00
elif "Run News" in request.form:
2021-05-21 13:24:37 +00:00
print('run display')
ticker.sendline('K')
ticker.sendline('N')
print('back in flask')
LastCommand = 'Run display'
2021-06-07 20:03:03 +00:00
elif "Run Weather" in request.form:
ticker.sendline('K')
ticker.sendline('W')
print('back in flask')
LastCommand = 'Run display'
elif "Run Daily Weather" in request.form:
ticker.sendline('K')
ticker.sendline('D')
print('back in flask')
LastCommand = 'Run display'
2021-06-15 18:35:04 +00:00
elif "Run League" in request.form:
ticker.sendline('K')
ticker.sendline('L')
elif "Run Teams" in request.form:
print('teams')
ticker.sendline('K')
ticker.sendline('t')
2021-06-07 20:03:03 +00:00
elif "Stop Display" in request.form:
print('run display')
#ticker.kill()
2021-04-26 18:51:21 +00:00
try:
#stock_ticker.stopStockTicker()
2021-04-26 18:51:21 +00:00
LastCommand = 'Stop display at next checkpoint'
ticker.sendline('K')
2021-04-26 18:51:21 +00:00
except:
print("none running")
2021-05-21 13:24:37 +00:00
elif "Shutdown the pi" in request.form:
2021-06-07 20:03:03 +00:00
2021-04-26 18:51:21 +00:00
try:
LastCommand = 'shutdown'
os.system("sudo shutdown now")
2021-04-26 18:51:21 +00:00
except:
print("couldn't shutdown")
2021-05-21 13:24:37 +00:00
return hello()
2021-04-26 18:51:21 +00:00
if __name__ == "__main__":
app.run(host='0.0.0.0', port=1024, debug=False) # the debuggger causes flickering
#sudo ./demo -D1 final.ppm -t 50 -m 25 --led-gpio-mapping=adafruit-hat --led-rows=32 --led-cols=256 --led-slowdown-gpio=4