view display_issues.py @ 24:89469aa41fe1

Preliminary work to make the display more dynamic. * The values are now dynamically read from the database and written to a dynamic dict. * If "None" (NoPrio) is not existent it is set to [0] because the JS expects a value.
author Magnus Schieder <mschieder@intevation.de>
date Fri, 02 Nov 2018 17:06:45 +0100
parents 3bb3d9a9f1b7
children 7161ce4e7ab1
line wrap: on
line source
#!/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]

    base_html_data = (base_html_data
        .replace("status", status)
        .replace("keywords", keywords)
        .replace("var critical=[];", "var critical=[" + make_js_object_string(data_dict["critical"]) + "]")
        .replace("var urgent=[];", "var urgent=[" + make_js_object_string(data_dict["urgent"]) + "]")
        .replace("var bug=[];", "var bug=[" + make_js_object_string(data_dict["bug"]) + "]")
        .replace("var feature=[];", "var feature=[" + make_js_object_string(data_dict["feature"]) + "]")
        .replace("var wish=[];", "var wish=[" + make_js_object_string(data_dict["wish"]) + "]")
        .replace("var noPrio=[];", "var noPrio=[" + make_js_object_string(data_dict["None"]) + "]")
        .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)
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)