components/api_server/src/routes/reports_overview.py
"""Reports routes."""
import bottle
from pymongo.database import Database
from database import sessions
from database.reports import insert_new_reports_overview, latest_reports_overview
from utils.functions import report_date_time, sanitize_html
from .pdf import export_as_pdf
from .plugins.auth_plugin import EDIT_REPORT_PERMISSION
@bottle.get("/api/internal/reports_overview", authentication_required=False)
def get_reports_overview(database: Database):
"""Return all the quality reports."""
return latest_reports_overview(database, report_date_time())
@bottle.get("/api/internal/reports_overview/pdf", authentication_required=False)
@bottle.get("/api/v3/reports_overview/pdf", authentication_required=False)
def export_reports_overview_as_pdf():
"""Download the reports overview as PDF."""
return export_as_pdf()
@bottle.post(
"/api/internal/reports_overview/attribute/<reports_attribute>", permissions_required=[EDIT_REPORT_PERMISSION]
)
def post_reports_overview_attribute(reports_attribute: str, database: Database):
"""Set a reports overview attribute."""
new_value = dict(bottle.request.json)[reports_attribute]
if reports_attribute == "comment" and new_value:
new_value = sanitize_html(new_value)
overview = latest_reports_overview(database)
old_value = overview.get(reports_attribute)
if new_value == old_value:
return {"ok": True} # Nothing to do
user = sessions.find_user(database)
if reports_attribute == "permissions" and EDIT_REPORT_PERMISSION in new_value:
report_editors = new_value[EDIT_REPORT_PERMISSION]
if len(report_editors) > 0 and user.username not in report_editors and user.email not in report_editors:
new_value[EDIT_REPORT_PERMISSION].append(user.username)
overview[reports_attribute] = new_value
value_change_description = "" if reports_attribute == "layout" else f" from '{old_value}' to '{new_value}'"
delta_description = f"{{user}} changed the {reports_attribute} of the reports overview{value_change_description}."
return insert_new_reports_overview(database, delta_description, overview)