From 4fc0329d3fb86641b37260b23deb2be0e0826344 Mon Sep 17 00:00:00 2001 From: Josef Dabrowski Date: Sat, 20 Apr 2019 15:54:07 +0800 Subject: [PATCH] added JSON capabilities to webserver --- notiframe/webserver/templates/home.html | 79 +++++++++++--- notiframe/webserver/webserver.py | 132 +++++++++++++----------- 2 files changed, 137 insertions(+), 74 deletions(-) diff --git a/notiframe/webserver/templates/home.html b/notiframe/webserver/templates/home.html index 0c3e4ae..ebe47db 100644 --- a/notiframe/webserver/templates/home.html +++ b/notiframe/webserver/templates/home.html @@ -8,26 +8,77 @@
-
- {% for n in range(widgLists| length) %} -

Widget {{n}}

- {% for key, value in widgLists[n].iteritems() %} - {{key}}: + + {% for n in range(widgLists| length) %} +

Widget {{n}}

+ {% for key, value in widgLists[n].iteritems() %} + {{key}}: +
+ {% endfor %}
{% endfor %} -
- {% endfor %} -

System Settings

- {% for key, value in sysList.iteritems() %} - {{key}}: -
+

System Settings

+ {% for key, value in sysList.iteritems() %} + {{key}}: +
{% endfor %} -
- - +
+
+ + + \ No newline at end of file diff --git a/notiframe/webserver/webserver.py b/notiframe/webserver/webserver.py index ab29276..c48c463 100644 --- a/notiframe/webserver/webserver.py +++ b/notiframe/webserver/webserver.py @@ -5,14 +5,16 @@ import os app = Flask(__name__) mydir = os.path.dirname(os.path.abspath(__file__)) -#print(mydir) +# print(mydir) mydir = os.path.join(mydir, '../') -#print(mydir) +# print(mydir) -essentials = {'type': None, 'height': None, 'width': None, 'posX': None, 'posY': None} +essentials = {'type': None, 'height': None, + 'width': None, 'posX': None, 'posY': None} trello_options = {'board': None, 'list': None} image_options = {'filename': None, 'scaleMode': None, 'bwStyle': None} + def convert(input): if isinstance(input, dict): return dict((convert(key), convert(value)) for key, value in input.iteritems()) @@ -23,75 +25,85 @@ def convert(input): else: return input -#HOMEPAGE +# HOMEPAGE @app.route('/home', methods=['GET', 'POST']) -def home(): - config = read_config() - widgLists, sysList = prep_dict_for_web(config) - if request.method == 'POST': - #update system variables - for key in sysList: - if request.form[key]: - if isInt(request.form[key]): - #print(request.form[key] + " is int") - sysList[key] = int(request.form[key]) - else: - sysList[key] = request.form[key] - #update widget variables - #for i in range(len(widgLists)): - # for key in widgLists[i]: - # if request.form[key+str(i)]: - # widgLists[i][key] = request.form[key+str(i)] - for i in range(len(widgLists)): - for key in widgLists[i]: - #print(request.form[key+str(i)]) - if isInt(request.form[key+str(i)]): - #print(request.form[key+str(i)] + " is int") - widgLists[i][key] = int(request.form[key+str(i)]) - else: - widgLists[i][key] = request.form[key+str(i)] - - #print(widgLists) - #print(sysList) - - update_config(widgLists, sysList) - - return render_template('home.html', title='Overview', widgLists=widgLists, sysList=sysList) +def home(): # Toml config passed to html page via two dicts. + # Form data passed back to webserver as JSON. + config = read_config() + widgLists, sysList = prep_dict_for_web(config) + + if request.method == 'POST': + jsonData = request.get_json() + print(jsonData) + jsonData = convert(jsonData) + + # update system variables + for key in sysList: + print("%" + jsonData[key] + "$") + if jsonData[key]: + if isInt(jsonData[key]): + #print(request.form[key] + " is int") + sysList[key] = int(jsonData[key]) + else: + sysList[key] = jsonData[key] + # update widget variables + # for i in range(len(widgLists)): + # for key in widgLists[i]: + # if request.form[key+str(i)]: + # widgLists[i][key] = request.form[key+str(i)] + for i in range(len(widgLists)): + for key in widgLists[i]: + # print(request.form[key+str(i)]) + if jsonData[key + str(i)]: + if isInt(jsonData[key + str(i)]): + #print(request.form[key+str(i)] + " is int") + widgLists[i][key] = int(jsonData[key + str(i)]) + else: + widgLists[i][key] = jsonData[key + str(i)] + + update_config(widgLists, sysList) + + return render_template('home.html', title='Overview', widgLists=widgLists, sysList=sysList) + def isInt(s): - try: + try: int(s) return True except ValueError: return False + def prep_dict_for_web(config): - widgLists = config['widgets'] #list of dicts - sysList = {} #dict - for key in config: - if key != 'widgets': - sysList[key] = config[key] - return widgLists, sysList + widgLists = config['widgets'] # list of dicts + sysList = {} # dict + for key in config: + if key != 'widgets': + sysList[key] = config[key] + return widgLists, sysList + def read_config(): - uni_config = toml.load(os.path.join(mydir, 'config.toml')) - config = convert(uni_config) - #print(config) - #config = {'widgets': [ - #{'width': 3, 'posX': 0, 'posY': 0, 'scaleMode': 'fill', 'bwStyle': 'mono', 'type': 'image', 'filename': 'forest.jpg', 'height': 3}, - #{'list': 'Plans', 'height': 3, 'width': 1, 'board': 'Organisation', 'posX': 0, 'posY': 0, 'type': 'trello'}, - #{'list': 'To Do:', 'height': 3, 'width': 2, 'board': 'E-paper', 'posX': 1, 'posY': 0, 'type': 'trello'} - #], 'cellsHeight': 3, 'resHeight': 384, 'resWidth': 640, 'cellsWidth': 3} - return config + uni_config = toml.load(os.path.join(mydir, 'config.toml')) + config = convert(uni_config) + # print(config) + # config = {'widgets': [ + #{'width': 3, 'posX': 0, 'posY': 0, 'scaleMode': 'fill', 'bwStyle': 'mono', 'type': 'image', 'filename': 'forest.jpg', 'height': 3}, + #{'list': 'Plans', 'height': 3, 'width': 1, 'board': 'Organisation', 'posX': 0, 'posY': 0, 'type': 'trello'}, + #{'list': 'To Do:', 'height': 3, 'width': 2, 'board': 'E-paper', 'posX': 1, 'posY': 0, 'type': 'trello'} + # ], 'cellsHeight': 3, 'resHeight': 384, 'resWidth': 640, 'cellsWidth': 3} + return config + def update_config(widgLists, sysList): - config = {'widgets': widgLists} - for key in sysList: - config[key] = sysList[key] - convert(config) - path = os.path.join(mydir, 'config.toml') - with open(path, "w+") as config_file: - config_file.write(toml.dumps(config)) + config = {'widgets': widgLists} + for key in sysList: + config[key] = sysList[key] + convert(config) + path = os.path.join(mydir, 'config.toml') + with open(path, "w+") as config_file: + config_file.write(toml.dumps(config)) + if __name__ == '__main__': - app.run(debug=True,host='0.0.0.0') \ No newline at end of file + app.run(debug=True, host='0.0.0.0')