Mercurial > roundup-cc
diff roundup_cc_display.py @ 28:e2864dabdb8c
fixes a logical error in the filtering of columns.
* The columns are stored in the pure order as they appear in the config.
* display_issues.py has been renamed to roundup_cc_display.py.
author | Magnus Schieder <mschieder@intevation.de> |
---|---|
date | Thu, 22 Nov 2018 12:57:20 +0100 |
parents | display_issues.py@7161ce4e7ab1 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/roundup_cc_display.py Thu Nov 22 12:57:20 2018 +0100 @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 + +""" Display previously saved issues from a database on webpage via CGI. + +author: Sascha L. Teichmann <sascha.teichmann@intevation.de> +author: Bernhard Reiter <bernhard@intevation.de> +author: Sean Engelhardt <sean.engelhardt@intevation.de> + +(c) 2010,2015 by Intevation GmbH + +This is Free Software unter the terms of the +GNU GENERAL PUBLIC LICENSE Version 3 or later. +See http://www.gnu.org/licenses/gpl-3.0.txt for details + + +##Usage Example: ## +see display_issues_demo.py or __main__ section below. +""" + +import sqlite3 as db +import cgitb +import roundup_content_data as rcd +import os + + +def make_js_object_string(array): + formated = [] + + for item in array: + formated.append("{points: " + str(item) + "}") + + return ",".join(formated) + + +def make_js_object_date(array): + formated = [] + + for item in array: + formated.append("{date : new Date('" + str(item) + "')}") + + return ", ".join(formated) + +def get_webpage(data_dict, columns, status, keywords, graph=None): + + if graph is None: + graph = os.path.dirname(os.path.realpath(__file__)) + '/graph.html' + + with open(graph, "r") as html_chart_file: + base_html_data = html_chart_file.read() + + if "None" not in columns: + data_dict["None"] = [0] + + + js_data_dickt ="{" + for col in columns.split(", "): + js_data_dickt += col + ":[" + make_js_object_string(data_dict[col]) + "]," + js_data_dickt += "}" + + base_html_data = (base_html_data + .replace("status", status) + .replace("keywords", keywords) + .replace("js_data_dickt", js_data_dickt) + .replace("var timestamp=[];", "var timestamp=[" + make_js_object_date(data_dict["date"]) + "]")) + + return base_html_data + +def compile_db_stats_html(db_file, sql_select, columns, status="", keywords="", graph=None): + + data_dict = {"date": []} + status_list = columns.split(", ") + for x in status_list: + data_dict[x] = [] + + con = None + cur = None + + try: + con = db.connect(db_file) + cur = con.cursor() + cur.execute(sql_select) + + for row in cur.fetchall(): + data_dict["date"].append(row[0]) + for x in range(len(status_list)): + data_dict[status_list[x]].append(row[x+1]) + + finally: + if cur: + cur.close() + if con: + con.close() + + return get_webpage(data_dict, columns, status, keywords, graph) + +def render_webpage(content): + for line in content.split("\n"): + print(line) + +def render_db_stats_as_html(db_file, sql_select, columns, status="", keywords=""): + render_webpage(compile_db_stats_html(db_file, sql_select, columns, status, keywords)) + +if __name__ == '__main__': + cgitb.enable() + #spit out HTML file directly, thus no need to give headers to the server + #print("Content-Type: text/html") + #print() + + render_db_stats_as_html("./demo3.db", rcd.SELECT_ALL)