From 20bf16abbf91a12c0f8dab2173ad1604b0ff2941 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Tue, 8 Nov 2022 18:47:28 +0000 Subject: [PATCH] Statistics: Add .csv download --- app/blueprints/packages/__init__.py | 2 +- app/blueprints/packages/packages.py | 29 +++++++++++++++++++++++++++-- app/templates/packages/stats.html | 4 ++++ app/templates/packages/view.html | 2 +- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/blueprints/packages/__init__.py b/app/blueprints/packages/__init__.py index 39116fe1..8e6ee8c3 100644 --- a/app/blueprints/packages/__init__.py +++ b/app/blueprints/packages/__init__.py @@ -55,7 +55,7 @@ def get_package_tabs(user: User, package: Package): { "id": "stats", "title": gettext("Statistics"), - "url": package.getURL("packages.stats") + "url": package.getURL("packages.statistics") }, { "id": "share", diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 90632ba7..ced9bcff 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -16,7 +16,7 @@ import typing from urllib.parse import quote as urlescape -from flask import render_template +from flask import render_template, make_response from celery import uuid from flask_wtf import FlaskForm from flask_login import login_required @@ -712,6 +712,31 @@ def game_support(package): @bp.route("/packages///stats/") @is_package_page -def stats(package): +def statistics(package): return render_template("packages/stats.html", package=package, tabs=get_package_tabs(current_user, package), current_tab="stats") + + +@bp.route("/packages///stats.csv") +@is_package_page +def stats_csv(package): + stats: List[PackageDailyStats] = package.daily_stats.order_by(db.asc(PackageDailyStats.date)).all() + + columns = ["platform_minetest", "platform_other", "reason_new", + "reason_dependency", "reason_update"] + + result = "Date, " + ", ".join(columns) + "\n" + + for stat in stats: + stat: PackageDailyStats + result += stat.date.isoformat() + for i, key in enumerate(columns): + result += ", " + str(getattr(stat, key)) + result += "\n" + + date = datetime.datetime.utcnow().date() + + res = make_response(result, 200) + res.headers["Content-Disposition"] = f"attachment; filename={package.author.username}_{package.name}_stats_{date.isoformat()}.csv" + res.headers["Content-type"] = "text/csv" + return res diff --git a/app/templates/packages/stats.html b/app/templates/packages/stats.html index 13a45fb7..6b31c168 100644 --- a/app/templates/packages/stats.html +++ b/app/templates/packages/stats.html @@ -11,6 +11,10 @@ {% endblock %} {% block content %} + + + {{ _("Download (.csv)") }} +

{{ _("Statistics") }}