Mercurial > roundup-cc
annotate 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 |
rev | line source |
---|---|
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
2 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
3 """ Display previously saved issues from a database on webpage via CGI. |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
4 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
5 author: Sascha L. Teichmann <sascha.teichmann@intevation.de> |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
6 author: Bernhard Reiter <bernhard@intevation.de> |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
7 author: Sean Engelhardt <sean.engelhardt@intevation.de> |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
8 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
9 (c) 2010,2015 by Intevation GmbH |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
10 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
11 This is Free Software unter the terms of the |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
12 GNU GENERAL PUBLIC LICENSE Version 3 or later. |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
13 See http://www.gnu.org/licenses/gpl-3.0.txt for details |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
14 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
15 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
16 ##Usage Example: ## |
7
99e2e0e17103
Adding possibility and example to filter the entries.
Bernhard Reiter <bernhard@intevation.de>
parents:
3
diff
changeset
|
17 see display_issues_demo.py or __main__ section below. |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
18 """ |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
19 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
20 import sqlite3 as db |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
21 import cgitb |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
22 import roundup_content_data as rcd |
13
149d01f43e31
Split up render_db_stats_as_html function
Gernot Schulz <gernot@intevation.de>
parents:
7
diff
changeset
|
23 import os |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
24 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
25 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
26 def make_js_object_string(array): |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
27 formated = [] |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
28 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
29 for item in array: |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
30 formated.append("{points: " + str(item) + "}") |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
31 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
32 return ",".join(formated) |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
33 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
34 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
35 def make_js_object_date(array): |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
36 formated = [] |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
37 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
38 for item in array: |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
39 formated.append("{date : new Date('" + str(item) + "')}") |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
40 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
41 return ", ".join(formated) |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
42 |
24
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
43 def get_webpage(data_dict, columns, status, keywords, graph=None): |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
44 |
14
b5f7a439bddd
Allow to override default graph.html file
Gernot Schulz <gernot@intevation.de>
parents:
13
diff
changeset
|
45 if graph is None: |
b5f7a439bddd
Allow to override default graph.html file
Gernot Schulz <gernot@intevation.de>
parents:
13
diff
changeset
|
46 graph = os.path.dirname(os.path.realpath(__file__)) + '/graph.html' |
13
149d01f43e31
Split up render_db_stats_as_html function
Gernot Schulz <gernot@intevation.de>
parents:
7
diff
changeset
|
47 |
149d01f43e31
Split up render_db_stats_as_html function
Gernot Schulz <gernot@intevation.de>
parents:
7
diff
changeset
|
48 with open(graph, "r") as html_chart_file: |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
49 base_html_data = html_chart_file.read() |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
50 |
24
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
51 if "None" not in columns: |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
52 data_dict["None"] = [0] |
20
3bb3d9a9f1b7
Filter by keywords and states.
Magnus Schieder <mschieder@intevation.de>
parents:
17
diff
changeset
|
53 |
25
7161ce4e7ab1
The web-based display is dynamically generated.
Magnus Schieder <mschieder@intevation.de>
parents:
24
diff
changeset
|
54 |
7161ce4e7ab1
The web-based display is dynamically generated.
Magnus Schieder <mschieder@intevation.de>
parents:
24
diff
changeset
|
55 js_data_dickt ="{" |
7161ce4e7ab1
The web-based display is dynamically generated.
Magnus Schieder <mschieder@intevation.de>
parents:
24
diff
changeset
|
56 for col in columns.split(", "): |
7161ce4e7ab1
The web-based display is dynamically generated.
Magnus Schieder <mschieder@intevation.de>
parents:
24
diff
changeset
|
57 js_data_dickt += col + ":[" + make_js_object_string(data_dict[col]) + "]," |
7161ce4e7ab1
The web-based display is dynamically generated.
Magnus Schieder <mschieder@intevation.de>
parents:
24
diff
changeset
|
58 js_data_dickt += "}" |
7161ce4e7ab1
The web-based display is dynamically generated.
Magnus Schieder <mschieder@intevation.de>
parents:
24
diff
changeset
|
59 |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
60 base_html_data = (base_html_data |
20
3bb3d9a9f1b7
Filter by keywords and states.
Magnus Schieder <mschieder@intevation.de>
parents:
17
diff
changeset
|
61 .replace("status", status) |
3bb3d9a9f1b7
Filter by keywords and states.
Magnus Schieder <mschieder@intevation.de>
parents:
17
diff
changeset
|
62 .replace("keywords", keywords) |
25
7161ce4e7ab1
The web-based display is dynamically generated.
Magnus Schieder <mschieder@intevation.de>
parents:
24
diff
changeset
|
63 .replace("js_data_dickt", js_data_dickt) |
24
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
64 .replace("var timestamp=[];", "var timestamp=[" + make_js_object_date(data_dict["date"]) + "]")) |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
65 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
66 return base_html_data |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
67 |
24
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
68 def compile_db_stats_html(db_file, sql_select, columns, status="", keywords="", graph=None): |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
69 |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
70 data_dict = {"date": []} |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
71 status_list = columns.split(", ") |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
72 for x in status_list: |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
73 data_dict[x] = [] |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
74 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
75 con = None |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
76 cur = None |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
77 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
78 try: |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
79 con = db.connect(db_file) |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
80 cur = con.cursor() |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
81 cur.execute(sql_select) |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
82 |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
83 for row in cur.fetchall(): |
24
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
84 data_dict["date"].append(row[0]) |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
85 for x in range(len(status_list)): |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
86 data_dict[status_list[x]].append(row[x+1]) |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
87 |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
88 finally: |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
89 if cur: |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
90 cur.close() |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
91 if con: |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
92 con.close() |
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
93 |
24
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
94 return get_webpage(data_dict, columns, status, keywords, graph) |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
95 |
13
149d01f43e31
Split up render_db_stats_as_html function
Gernot Schulz <gernot@intevation.de>
parents:
7
diff
changeset
|
96 def render_webpage(content): |
149d01f43e31
Split up render_db_stats_as_html function
Gernot Schulz <gernot@intevation.de>
parents:
7
diff
changeset
|
97 for line in content.split("\n"): |
149d01f43e31
Split up render_db_stats_as_html function
Gernot Schulz <gernot@intevation.de>
parents:
7
diff
changeset
|
98 print(line) |
149d01f43e31
Split up render_db_stats_as_html function
Gernot Schulz <gernot@intevation.de>
parents:
7
diff
changeset
|
99 |
24
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
100 def render_db_stats_as_html(db_file, sql_select, columns, status="", keywords=""): |
89469aa41fe1
Preliminary work to make the display more dynamic.
Magnus Schieder <mschieder@intevation.de>
parents:
20
diff
changeset
|
101 render_webpage(compile_db_stats_html(db_file, sql_select, columns, status, keywords)) |
1
2df45f6ecd81
new appereance (solid and dotted lines), resonsive layout, new legend,
sean
parents:
diff
changeset
|
102 |
3
99c68ebfb3b9
Streamlined to example use.
Bernhard Reiter <bernhard@intevation.de>
parents:
2
diff
changeset
|
103 if __name__ == '__main__': |
99c68ebfb3b9
Streamlined to example use.
Bernhard Reiter <bernhard@intevation.de>
parents:
2
diff
changeset
|
104 cgitb.enable() |
7
99e2e0e17103
Adding possibility and example to filter the entries.
Bernhard Reiter <bernhard@intevation.de>
parents:
3
diff
changeset
|
105 #spit out HTML file directly, thus no need to give headers to the server |
99e2e0e17103
Adding possibility and example to filter the entries.
Bernhard Reiter <bernhard@intevation.de>
parents:
3
diff
changeset
|
106 #print("Content-Type: text/html") |
99e2e0e17103
Adding possibility and example to filter the entries.
Bernhard Reiter <bernhard@intevation.de>
parents:
3
diff
changeset
|
107 #print() |
3
99c68ebfb3b9
Streamlined to example use.
Bernhard Reiter <bernhard@intevation.de>
parents:
2
diff
changeset
|
108 |
20
3bb3d9a9f1b7
Filter by keywords and states.
Magnus Schieder <mschieder@intevation.de>
parents:
17
diff
changeset
|
109 render_db_stats_as_html("./demo3.db", rcd.SELECT_ALL) |