diff --git a/ennstatus/data/views.py b/ennstatus/data/views.py --- a/ennstatus/data/views.py +++ b/ennstatus/data/views.py @@ -14,14 +14,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import json - from collections import defaultdict from flask import Blueprint, jsonify from ennstatus.status.functions import split_all_servers_to_types -from ennstatus.donate.functions import all_csv_to_dict, year_sum, month_sum data_page = Blueprint('data', __name__) @@ -43,30 +40,3 @@ def worldmap(): countries['max'] = maximum return jsonify(countries) - - -@data_page.route('/year') -def yeardata(): - data = all_csv_to_dict() - data = year_sum(data) - datalist = [] - - for key, values in data.items(): - datalist.append({"key": key, "value": float(values)}) - datalist.sort(key=lambda x: x["key"]) - - return json.dumps(datalist) - - -@data_page.route('/month') -def monthdata(): - data = all_csv_to_dict() - data = month_sum(data) - data_list = [] - - for key, values in data.items(): - data_list.append({"key": key, "value": float(values)}) - - data_list.sort(key=lambda x: x["key"]) - - return json.dumps(data_list) diff --git a/ennstatus/donate/functions.py b/ennstatus/donate/functions.py --- a/ennstatus/donate/functions.py +++ b/ennstatus/donate/functions.py @@ -17,19 +17,6 @@ import os import os.path import csv -import statistics - -from collections import defaultdict - -from babel.numbers import parse_decimal - - -def load_csv_file(file): - - with open(file, encoding='utf-8', newline='') as csvfile: - csvreader = csv.reader(csvfile, delimiter=',') - rows = list(csvreader) - return rows def load_csv(date): @@ -37,8 +24,11 @@ def load_csv(date): filename = '.'.join([date, 'csv']) path = os.path.join('donations', filename) - for row in load_csv_file(path): - yield row + with open(path, encoding='utf-8', newline='') as csvfile: + csvreader = csv.reader(csvfile, delimiter=',') + + for row in csvreader: + yield row def get_choices(): @@ -49,141 +39,3 @@ def get_choices(): if not file.startswith('.') \ and file.endswith('.csv'): yield os.path.splitext(file)[0] - - -def get_all_csv(): - - for file in os.listdir('donations'): - path = os.path.join('donations', file) - yield load_csv_file(path) - - -def get_all_rows(): - - for csvfile in get_all_csv(): - for row in csvfile: - yield row - - -def all_csv_to_dict(): - - data = defaultdict(set) - - for row in get_all_rows(): - data[row[0]].add(parse_decimal(row[2], locale='de')) - return data - - -def data_to_year(data): - - year_data = defaultdict(set) - - for date, values in data.items(): - year = date.split('-')[0] - for value in values: - year_data[year].add(value) - - return year_data - - -def data_to_month(data): - - month_data = defaultdict(set) - - for date, values in data.items(): - month = date.rsplit('-', maxsplit=1)[0] - for value in values: - month_data[month].add(value) - - return month_data - - -def year_sum(data): - - year_data = data_to_year(data) - - for year, values in year_data.items(): - year_data[year] = sum(values) - - return year_data - - -def month_sum(data): - - month_data = data_to_month(data) - - for month, values in month_data.items(): - month_data[month] = sum(values) - - return month_data - - -def get_all_years_mean(data): - - mean = set() - year_data = year_sum(data) - - for year, values in year_data.items(): - mean.add(values) - - return statistics.mean(mean) - - -def get_months_mean(data): - - mean = set() - month_data = month_sum(data) - - for year, values in month_data.items(): - mean.add(values) - - return statistics.mean(mean) - - -def get_best_year(data): - - year_data = year_sum(data) - return max(year_data.items(), key=lambda x: x[1]) - - -def get_best_month(data): - - month_data = month_sum(data) - return max(month_data.items(), key=lambda x: x[1]) - - -def get_highest_donation(): - - data = all_csv_to_dict() - - for date, values in data.items(): - data[date] = max(values) - - return max( - sorted( - data.items(), - key=lambda x: x[0], - reverse=True - ), - key=lambda x: x[1] - ) - - -def get_median_donation(): - data = all_csv_to_dict() - donations = [] - - for value in data.values(): - donations.extend(value) - - return statistics.median(donations) - - -def get_mode_donation(): - data = all_csv_to_dict() - donations = [] - - for value in data.values(): - donations.extend(value) - - return statistics.mode(donations) diff --git a/ennstatus/donate/views.py b/ennstatus/donate/views.py --- a/ennstatus/donate/views.py +++ b/ennstatus/donate/views.py @@ -14,25 +14,13 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import json - from flask import (Blueprint, render_template, request, redirect, url_for, current_app) from babel.numbers import parse_decimal, format_decimal from ennstatus.donate.forms import DateForm -from ennstatus.donate.functions import (load_csv, - get_choices, - all_csv_to_dict, - get_all_years_mean, - get_months_mean, - get_best_year, - get_best_month, - get_highest_donation, - get_median_donation, - get_mode_donation, - ) +from ennstatus.donate.functions import load_csv, get_choices donate_page = Blueprint('donate', __name__) @@ -105,54 +93,3 @@ def received(): return render_template('donate/received.html', form=form, csv_file=csv_file, year=year, month=month, total=total) - - -@donate_page.route('/statistics') -def statistics(): - data = all_csv_to_dict() - - all_years_mean = format_decimal( - get_all_years_mean(data), - locale='de' - ) - month_mean = format_decimal( - get_months_mean(data), - locale='de' - ) - best_year = get_best_year(data) - best_year = (best_year[0], format_decimal(best_year[1], locale='de')) - - best_month = get_best_month(data) - best_month = (best_month[0], format_decimal(best_month[1], locale='de')) - - highest_donation = get_highest_donation() - highest_donation = (highest_donation[0], format_decimal(highest_donation[1], locale='de')) - - median_donation = format_decimal( - get_median_donation(), - locale='de' - ) - - mode_donation = format_decimal( - get_mode_donation(), - locale='de' - ) - - dates = [name for name in get_choices()] - dates.sort() - - last_default_date = dates[-1] - first_default_date = dates[-12] - - return render_template('donate/statistics.html', - all_years_mean=all_years_mean, - month_mean=month_mean, - best_year=best_year, - best_month=best_month, - highest_donation=highest_donation, - median_donation=median_donation, - mode_donation=mode_donation, - dates=dates, - first_default_date=first_default_date, - last_default_date=last_default_date - ) diff --git a/ennstatus/static/js/barcharts.js b/ennstatus/static/js/barcharts.js --- a/ennstatus/static/js/barcharts.js +++ b/ennstatus/static/js/barcharts.js @@ -149,7 +149,7 @@ function redraw() { yheight = (ywidth / 2) - 20 - 30; mwidth = document.getElementById('monthchart').offsetWidth - 40 -30; mheight = (mwidth / 2) - 20 - 30; - d3.select('svg').remove(); + d3.selectAll('svg').remove(); setup(ywidth, yheight, mwidth, mheight); } diff --git a/ennstatus/templates/base.html b/ennstatus/templates/base.html --- a/ennstatus/templates/base.html +++ b/ennstatus/templates/base.html @@ -94,8 +94,6 @@
  • Adopt a Bridge
  • Join Us
  • -
  • -
  • Donation statistics
  • diff --git a/ennstatus/templates/donate/statistics.html b/ennstatus/templates/donate/statistics.html --- a/ennstatus/templates/donate/statistics.html +++ b/ennstatus/templates/donate/statistics.html @@ -61,13 +61,13 @@
    - {% for date in dates %} {% endfor %} - {% for date in dates %} {% endfor %}