# HG changeset patch # User Gernot Schulz # Date 1454242731 -3600 # Node ID 8935152f5e198caed43cce193fbb044b7491137a # Parent bbd4eab7cb1ef7680403e50b8249f79977a4d0c9 Remove roundup_cc fork; import from embedded roundup_cc clone diff -r bbd4eab7cb1e -r 8935152f5e19 modules/web_view/collect_issues.py --- a/modules/web_view/collect_issues.py Wed Nov 18 13:41:42 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -#!/usr/bin/env python3 - -""" Fetch issues from a roundup-tracker and save them in a databse. - -author: Sascha L. Teichmann -author: Bernhard Reiter -author: Sean Engelhardt - -(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: ## - -BASE_URL_DEMO = "http://localhost:8917/demo/" -SEARCH_URL_DEMO = "issue?@action=export_csv&@columns=title,priority&@filter=status&@pagesize=50&@startwith=0&status=-1,1,2,3,4,5,6,7" - -LOGIN_PARAMETERS_DEMO = ( - ("__login_name", "demo"), - ("__login_password", "demo"), - ("@action", "Login"), - ) - -save_stats_in_db(LOGIN_PARAMETERS_DEMO, BASE_URL_DEMO, rcd.DATABASE_DEMO, rcd.COLUMNS, rcd.CREATE_DB, rcd.INSERT_NEW, SEARCH_URL_DEMO) -""" - -import http.cookiejar -import urllib.parse -import urllib.request -import csv -import io -import sqlite3 as db -import os -import web_view.roundup_content_data as rcd - - -CHECK_ROUNDUP_ORDER = "priority?@action=export_csv&@columns=id,order" -CHECK_ROUNDUP_SEARCH_VALUES = "status?@action=export_csv&@columns=id&@filter=open&open=1" -SEARCH_ROUNDUP = "issue?@action=export_csv&@columns=priority&@filter=status&@pagesize=500&@startwith=0&status=-1,{search_values}" - - -def connect_to_server(params, baseurl): - enc_data = urllib.parse.urlencode(params).encode() - cj = http.cookiejar.CookieJar() - opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) - req = urllib.request.Request(url=baseurl, data=enc_data) - opener.open(req) - return opener - - -def get_csv_from_server(opener, roundup_url, sub_url): - csv_req = urllib.request.Request(url=roundup_url+sub_url) - f = opener.open(csv_req) - csv_reader = csv.DictReader(io.TextIOWrapper(f)) - return csv_reader - - -def set_search_paramters_on_URL(url, search_param_csv): - - id_list = [] - - for row in search_param_csv: - id_list.append(row["id"]) - - new_url = url.format(search_values = ",".join(id_list)) - - return new_url - - -def check_create_database(database_file, sql_create_db): - if not os.path.isfile(database_file): - con = None - cur = None - try: - con = db.connect(database_file) - cur = con.cursor() - try: - cur.execute(sql_create_db) - con.commit() - os.chmod(database_file, 0o644) - except: - con.rollback() - raise - finally: - if cur: - cur.close() - if con: - con.close() - - -def issues_to_quantities(issue_csv, columns, orders_csv): - - quantities = [0] * len(columns) - order_dict = {} - - #convert the csv-dict reader to real dict - for row in orders_csv: - order_dict[row["id"]] = int(float(row["order"])) # int(float()) because the order-value is indeed "1.0, 2.0" etc - - for issue in issue_csv: - priority = issue["priority"] - - if priority.isdigit() == True : - quantities[order_dict[priority] -1 ] += 1 - - # print("quantities : " + str(quantities)) - - return quantities - - -def save_issues_to_db(quantities, database_file, sql_create_db, sql_insert_in_db): - check_create_database(database_file, sql_create_db) - - cur = None - con = None - - try: - con = db.connect(database_file) - cur = con.cursor() - try: - cur.execute(sql_insert_in_db, quantities) - con.commit() - except: - con.rollback() - raise - finally: - if cur: - cur.close() - if con: - con.close() - - -def save_stats_in_db(login_parmeters, baseurl, db_file, columns, sql_create_db, sql_insert_in_db, searchurl=False): - try: - - opener = connect_to_server(login_parmeters, baseurl) - - search_operators_csv = get_csv_from_server(opener, baseurl, CHECK_ROUNDUP_SEARCH_VALUES) - order_csv = get_csv_from_server(opener, baseurl, CHECK_ROUNDUP_ORDER) - - if searchurl == False: - formated_search_url = set_search_paramters_on_URL(SEARCH_ROUNDUP, search_operators_csv) - else: - formated_search_url = searchurl - - current_issues_csv = get_csv_from_server(opener, baseurl, formated_search_url) - - opener.close() - - quantities = issues_to_quantities(current_issues_csv, columns, order_csv) - - save_issues_to_db(quantities, db_file, sql_create_db, sql_insert_in_db) - - except urllib.error.URLError as e: - print("No Valid Connection to server : " + baseurl + "\nerror: " + str(e)) diff -r bbd4eab7cb1e -r 8935152f5e19 modules/web_view/display_issues.py --- a/modules/web_view/display_issues.py Wed Nov 18 13:41:42 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -#!/usr/bin/env python3 - -""" Display previously saved issues from a database on webpage via CGI. - -author: Sascha L. Teichmann -author: Bernhard Reiter -author: Sean Engelhardt - -(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: ## - -render_db_stats_as_html(rcd.DATABASE_DEMO, rcd.SELECT_ALL) -""" - -import sqlite3 as db -import cgitb, os, sys, inspect -import web_view.roundup_content_data as rcd - -PATH = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) -HTML_DATA = "graph.html" -PATH_TO_HTML = PATH + "/" + HTML_DATA - -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(): - - with open(PATH_TO_HTML, "r") as html_chart_file: - base_html_data = html_chart_file.read() - - base_html_data = (base_html_data - .replace("var critical=[];", "var critical=[" + make_js_object_string(rcd.data_dict["critical"]) + "]") - .replace("var urgent=[];", "var urgent=[" + make_js_object_string(rcd.data_dict["urgent"]) + "]") - .replace("var bug=[];", "var bug=[" + make_js_object_string(rcd.data_dict["bug"]) + "]") - .replace("var feature=[];", "var feature=[" + make_js_object_string(rcd.data_dict["feature"]) + "]") - .replace("var wish=[];", "var wish=[" + make_js_object_string(rcd.data_dict["wish"]) + "]") - .replace("var timestamp=[];", "var timestamp=[" + make_js_object_date(rcd.data_dict["date"]) + "]")) - - return base_html_data - - -# def render_webpage(content): -# webpage_string = "" -# for line in content.split("\n"): -# print(line) - - -def render_db_stats_as_html(db_file, sql_select): - - con = None - cur = None - - try: - con = db.connect(db_file) - cur = con.cursor() - cur.execute(sql_select) - - for row in cur.fetchall(): - rcd.data_dict["date"].append(row[0]) - rcd.data_dict["critical"].append(row[1]) - rcd.data_dict["urgent"].append(row[2]) - rcd.data_dict["bug"].append(row[3]) - rcd.data_dict["feature"].append(row[4]) - rcd.data_dict["wish"].append(row[5]) - finally: - if cur: - cur.close() - if con: - con.close() - - # render_webpage(get_webpage()) - # print(get_webpage()) - return get_webpage() - -# cgitb.enable() -# print("Content-Type: text/html") -# print() diff -r bbd4eab7cb1e -r 8935152f5e19 modules/web_view/display_issues_techintern.py --- a/modules/web_view/display_issues_techintern.py Wed Nov 18 13:41:42 2015 +0100 +++ b/modules/web_view/display_issues_techintern.py Sun Jan 31 13:18:51 2016 +0100 @@ -13,20 +13,24 @@ See http://www.gnu.org/licenses/gpl-3.0.txt for details """ -import importlib +from sys import path +import os + +path.append( + os.path.join(os.path.dirname(os.path.realpath(__file__)), 'roundup_cc') + ) + +from display_issues import * def get_chart(target_div_name): - display = importlib.import_module("web_view.display_issues") - rcd = importlib.import_module("web_view.roundup_content_data") - # print(display_issues.render_db_stats_as_html(roundup_content_data.DATABASE_TECH_INTERN, roundup_content_data.SELECT_ALL)) - # print (display.render_db_stats_as_html(rcd.DATABASE_TECH_INTERN, rcd.SELECT_ALL)) - html_string = display.render_db_stats_as_html(rcd.DATABASE_TECH_INTERN, rcd.SELECT_ALL) + html_string = compile_db_stats_html( + rcd.DATABASE_TECH_INTERN, + rcd.SELECT_ALL + ) html_string = html_string.replace( 'var d3jsInjectionTarget="X";', 'var d3jsInjectionTarget="' + target_div_name + '";') - # print(html_string) - return html_string -# get_chart(); +# print(get_chart('techintern')) diff -r bbd4eab7cb1e -r 8935152f5e19 modules/web_view/graph.html --- a/modules/web_view/graph.html Wed Nov 18 13:41:42 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,367 +0,0 @@ - - - - - - - - diff -r bbd4eab7cb1e -r 8935152f5e19 modules/web_view/roundup_content_data/__init__.py --- a/modules/web_view/roundup_content_data/__init__.py Wed Nov 18 13:41:42 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -#!/usr/bin/env python - -""" supplys the data needed to comunicate with the roundup-server, -and the sqlite database. Represents the types of errors used in roundup. - -author: Sascha L. Teichmann -author: Bernhard Reiter -author: Sean Engelhardt - -(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 -""" - -import os - -#Add desired sqlite databases here -DATABASE_REFERENCCE = os.path.dirname(os.path.realpath(__file__)) + "/test_reference.db" -DATABASE_DEMO = os.path.dirname(os.path.realpath(__file__)) + "/demo.db" -DATABASE_ERRORDB = os.path.dirname(os.path.realpath(__file__)) + "/errordatabase.db" -DATABASE_TECH_INTERN = os.path.dirname(os.path.realpath(__file__)) + "/tech_intern.db" -DATABASE_INT_TEST = os.path.dirname(os.path.realpath(__file__)) + "/int_test.db" - -COLUMNS= [ - "critical", "urgent", "bug", "feature", "wish", -] - -data_dict = { - "date": [], - "critical": [], - "urgent": [], - "bug": [], - "feature": [], - "wish": [] -} - -#SQL - -#DEMO System -SELECT_ALL = """ -SELECT strftime("%Y-%m-%dT%H:%M:%S", timestamp), - critical, - urgent, - bug, - feature, - wish -FROM issues -ORDER BY timestamp -""" - - -CREATE_DB = """ -CREATE TABLE issues ( - timestamp TIMESTAMP NOT NULL UNIQUE DEFAULT current_timestamp, - critical INTEGER NOT NULL DEFAULT 0, - urgent INTEGER NOT NULL DEFAULT 0, - bug INTEGER NOT NULL DEFAULT 0, - feature INTEGER NOT NULL DEFAULT 0, - wish INTEGER NOT NULL DEFAULT 0 -) -""" - - -INSERT_NEW = """ - INSERT INTO issues (critical, urgent, bug, feature, wish) - VALUES (?, ?, ?, ?, ?) -""" - -#Referecen DB: -SELECT_ALL_REFERENCE = """ -SELECT strftime("%Y-%m-%dT%H:%M:%S", sample_time), - critical, - major, - crash, - normal, - minor, - wishlist -FROM issues -ORDER BY sample_time -""" \ No newline at end of file diff -r bbd4eab7cb1e -r 8935152f5e19 modules/web_view/roundup_content_data/tech_intern.db Binary file modules/web_view/roundup_content_data/tech_intern.db has changed diff -r bbd4eab7cb1e -r 8935152f5e19 modules/web_view/roundup_content_data/test_reference.db Binary file modules/web_view/roundup_content_data/test_reference.db has changed