From 182052078e59429e48cb031a3aea1056deb8189f Mon Sep 17 00:00:00 2001 From: Maximilian Moser <maximilian.moser@tuwien.ac.at> Date: Thu, 5 Dec 2024 21:34:48 +0100 Subject: [PATCH 1/2] Rework the curation menu entry registration * replace the removed `@register_menu` decorator, which was using `app.before_first_request` under the hood, with a `finalize_app` entrypoint function --- invenio_config_tuw/startup.py | 48 ++++------------------------------- invenio_config_tuw/views.py | 45 ++++++++++++++++++++++++++++++++ pyproject.toml | 4 +-- 3 files changed, 52 insertions(+), 45 deletions(-) create mode 100644 invenio_config_tuw/views.py diff --git a/invenio_config_tuw/startup.py b/invenio_config_tuw/startup.py index eb3b711..d8ed7b3 100644 --- a/invenio_config_tuw/startup.py +++ b/invenio_config_tuw/startup.py @@ -16,13 +16,8 @@ initialized, and thus we can rely on them being already available. from logging import ERROR from logging.handlers import SMTPHandler -from flask import Blueprint, current_app, flash, render_template, request -from flask_login import current_user, login_required -from flask_menu import register_menu -from invenio_db import db from invenio_rdm_records.services.search_params import MyDraftsParam -from .curation import CurationForm from .formatters import CustomFormatter @@ -96,44 +91,11 @@ def override_search_drafts_options(app): pass -def create_curation_settings_blueprint(app): - """Register the curation settings view after the app has been initialized. - - This is necessary because we're depending on the Flask-Menu extension. - """ - blueprint = Blueprint( - "invenio_config_tuw_settings", - __name__, - url_prefix="/account/settings/curation", - ) - - @blueprint.route("/", methods=["GET", "POST"]) - @login_required - @register_menu( - blueprint, - "settings.curation", +def register_menu_entries(app): + """Register the curation setting endpoint in Flask-Menu.""" + menu = app.extensions["menu"].root() + menu.submenu("settings.curation").register( + "invenio_config_tuw_settings.curation_settings_view", '<i class="file icon"></i> Curation', order=1, ) - def curation_settings_view(): - preferences_curation_form = CurationForm( - formdata=None, obj=current_user, prefix="preferences-curation" - ) - - form_name = request.form.get("submit", None) - form = preferences_curation_form if form_name else None - - if form: - form.process(formdata=request.form) - if form.validate_on_submit(): - form.populate_obj(current_user) - db.session.add(current_user) - current_app.extensions["security"].datastore.commit() - flash(("Curation settings were updated."), category="success") - - return render_template( - "invenio_theme_tuw/settings/curation.html", - preferences_curation_form=preferences_curation_form, - ) - - return blueprint diff --git a/invenio_config_tuw/views.py b/invenio_config_tuw/views.py new file mode 100644 index 0000000..b294d22 --- /dev/null +++ b/invenio_config_tuw/views.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2024 TU Wien. +# +# Invenio-Config-TUW is free software; you can redistribute it and/or modify +# it under the terms of the MIT License; see LICENSE file for more details. + +"""Custom view functions for TU Wien.""" + +from flask import Blueprint, current_app, flash, render_template, request +from flask_login import current_user, login_required +from invenio_db import db + +from .curation import CurationForm + +blueprint = Blueprint( + "invenio_config_tuw_settings", + __name__, + url_prefix="/account/settings/curation", +) + + +@blueprint.route("/", methods=["GET", "POST"]) +@login_required +def curation_settings_view(): + """Page for the curation consent setting in user profiles.""" + preferences_curation_form = CurationForm( + formdata=None, obj=current_user, prefix="preferences-curation" + ) + + form_name = request.form.get("submit", None) + form = preferences_curation_form if form_name else None + + if form: + form.process(formdata=request.form) + if form.validate_on_submit(): + form.populate_obj(current_user) + db.session.add(current_user) + current_app.extensions["security"].datastore.commit() + flash(("Curation settings were updated."), category="success") + + return render_template( + "invenio_theme_tuw/settings/curation.html", + preferences_curation_form=preferences_curation_form, + ) diff --git a/pyproject.toml b/pyproject.toml index b0ca2a0..5ba6349 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,6 @@ dependencies = [ "Invenio-Search>=2.1.0,<3.0.0", "Flask>=2.0.2", "Flask-Minify>=0.47", - "Flask-Menu<2.0.0", "Invenio-DAMAP>=0.1.1" ] @@ -70,11 +69,12 @@ invenio_config_tuw = "invenio_config_tuw:InvenioConfigTUW" invenio_config_tuw = "invenio_config_tuw:InvenioConfigTUW" [project.entry-points."invenio_base.blueprints"] -invenio_config_tuw_settings = "invenio_config_tuw.startup:create_curation_settings_blueprint" +invenio_config_tuw_settings = "invenio_config_tuw.views:blueprint" [project.entry-points."invenio_base.finalize_app"] invenio_config_tuw_mail_handler = "invenio_config_tuw.startup:register_smtp_error_handler" invenio_config_tuw_search_drafts = "invenio_config_tuw.startup:override_search_drafts_options" +invenio_config_tuw_curation_settings = "invenio_config_tuw.startup:register_menu_entries" [project.entry-points."invenio_base.api_finalize_app"] invenio_config_tuw_mail_handler = "invenio_config_tuw.startup:register_smtp_error_handler" -- GitLab From beaa094857e2664db98f6e17c766b759dc32cd1a Mon Sep 17 00:00:00 2001 From: Maximilian Moser <maximilian.moser@tuwien.ac.at> Date: Thu, 5 Dec 2024 21:41:31 +0100 Subject: [PATCH 2/2] Bump version to v2024.4.4 --- CHANGES.rst | 3 ++- invenio_config_tuw/__init__.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index baeccb9..54b4c88 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,13 +8,14 @@ Changes ======= -Version 2024.4 (released 2024-11-26, updated 2024-11-29) +Version 2024.4 (released 2024-11-26, updated 2024-12-05) - Pin `Flask-Menu`` dependency - Add `Invenio-DAMAP` to the dependencies - Implement TU Wien user identity generator for connection to DAMAP - Cast TISS ID into string for the Invenio-DAMAP integration - Send out notification emails when records get published +- Rework curation menu item registration and unpin `Flask-Menu` Version 2024.3 (released 2024-10-01, updated 2024-11-13) diff --git a/invenio_config_tuw/__init__.py b/invenio_config_tuw/__init__.py index f70eb84..3882381 100644 --- a/invenio_config_tuw/__init__.py +++ b/invenio_config_tuw/__init__.py @@ -9,6 +9,6 @@ from .ext import InvenioConfigTUW -__version__ = "2024.4.3" +__version__ = "2024.4.4" __all__ = ("__version__", "InvenioConfigTUW") -- GitLab