diff --git a/invenio_theme_iform/config.py b/invenio_theme_iform/config.py index 79fe7ed..06ca50a 100644 --- a/invenio_theme_iform/config.py +++ b/invenio_theme_iform/config.py @@ -106,7 +106,9 @@ DEPOSITS_HEADER_TEMPLATE = "invenio_theme_iform/header.html" # SEARCH_UI_SEARCH_TEMPLATE = "invenio_theme_iform/search.html" # """override the default search page""" -IFORM_ROUTES = { +THEME_IFORM_ROUTES = { "index": "/", "comingsoon": "/comingsoon", + "records-search": "/records/search", + "overview": "/me/overview", } diff --git a/invenio_theme_iform/views.py b/invenio_theme_iform/views.py index 498c89a..c967058 100644 --- a/invenio_theme_iform/views.py +++ b/invenio_theme_iform/views.py @@ -11,7 +11,7 @@ from functools import wraps from typing import Dict -from flask import Blueprint, current_app, g, redirect, render_template, url_for +from flask import Blueprint, Flask, current_app, g, redirect, render_template, url_for from flask_login import current_user, login_required from invenio_rdm_records.proxies import current_rdm_records from invenio_records_global_search.resources.serializers import ( @@ -22,15 +22,30 @@ from opensearch_dsl.utils import AttrDict from .search import FrontpageRecordsSearch -blueprint = Blueprint( - "invenio_theme_iform", - __name__, - template_folder="templates", - static_folder="static", -) + +def create_blueprint(app: Flask) -> Blueprint: + """Create blueprint.""" + blueprint = Blueprint( + "invenio_theme_iform", + __name__, + template_folder="templates", + static_folder="static", + ) + routes = app.config.get("THEME_IFORM_ROUTES") + + blueprint.add_url_rule(routes["records-search"], view_func=records_search) + blueprint.add_url_rule(routes["index"], view_func=index) + blueprint.add_url_rule(routes["overview"], view_func=overview) + + # base case for any otherwise unhandled exception + app.register_error_handler(Exception, default_error_handler) + + blueprint.add_app_template_filter(make_dict_like) + blueprint.add_app_template_filter(cast_to_dict) + + return blueprint -@blueprint.route("/records/search") def records_search(): """Search page ui. @@ -70,7 +85,6 @@ def require_iform_authenticated(view_func): return decorated_view -@blueprint.route("/me/overview") @login_required def overview(): """Overview.""" @@ -85,7 +99,6 @@ def overview(): ) -@blueprint.app_template_filter("make_dict_like") def make_dict_like(value: str, key: str) -> Dict[str, str]: """Convert the value to a dict like structure. @@ -94,7 +107,6 @@ def make_dict_like(value: str, key: str) -> Dict[str, str]: return {key: value} -@blueprint.app_template_filter("cast_to_dict") def cast_to_dict(attr_dict): """Return the dict structure of AttrDict variable.""" return AttrDict.to_dict(attr_dict) @@ -112,18 +124,6 @@ def default_error_handler(e: Exception): return render_template(current_app.config["THEME_500_TEMPLATE"]), 500 -def ui_blueprint(app): - """Blueprint for the routes and resources provided by invenio-theme-iform.""" - routes = app.config.get("IFORM_ROUTES") - - blueprint.add_url_rule(routes["index"], view_func=index) - - # base case for any otherwise unhandled exception - app.register_error_handler(Exception, default_error_handler) - - return blueprint - - def records_serializer(records=None): """Serialize list of records.""" serializer = GlobalSearchJSONSerializer() diff --git a/pyproject.toml b/pyproject.toml index c84ce40..c7b5156 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ test = "scripts.test:main" invenio_theme_iform = "invenio_theme_iform:InvenioThemeIform" [project.entry-points."invenio_base.blueprints"] -invenio_theme_iform = "invenio_theme_iform.views:ui_blueprint" +invenio_theme_iform = "invenio_theme_iform.views:create_blueprint" [project.entry-points."invenio_i18n.translations"] messages = "invenio_theme_iform"