mirror of
https://github.com/Cian-H/invenio-config-iform.git
synced 2025-12-22 21:11:57 +00:00
Changed names for new fork
This commit is contained in:
61
invenio_config_iform/ext.py
Normal file
61
invenio_config_iform/ext.py
Normal file
@@ -0,0 +1,61 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2020-2024 Graz University of Technology.
|
||||
#
|
||||
# invenio-config-iform is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the MIT License; see LICENSE file for more
|
||||
# details.
|
||||
|
||||
"""invenio module that adds I-Form configs."""
|
||||
|
||||
from flask import Flask
|
||||
|
||||
from . import config
|
||||
from .custom_fields import ip_network, single_ip
|
||||
|
||||
|
||||
class InvenioConfigIform:
|
||||
"""invenio-config-iform extension."""
|
||||
|
||||
def __init__(self, app: Flask = None) -> None:
|
||||
"""Extension initialization."""
|
||||
if app:
|
||||
self.init_app(app)
|
||||
|
||||
def init_app(self, app: Flask) -> None:
|
||||
"""Flask application initialization."""
|
||||
self.init_config(app)
|
||||
self.add_custom_fields(app)
|
||||
app.extensions["invenio-config-iform"] = self
|
||||
|
||||
def init_config(self, app: Flask) -> None:
|
||||
"""Initialize configuration."""
|
||||
for k in dir(config):
|
||||
if k.startswith("INVENIO_CONFIG_IFORM_"):
|
||||
app.config.setdefault(k, getattr(config, k))
|
||||
|
||||
def add_custom_fields(self, app: Flask) -> None:
|
||||
"""Add custom fields."""
|
||||
app.config.setdefault("RDM_CUSTOM_FIELDS", [])
|
||||
app.config["RDM_CUSTOM_FIELDS"].append(ip_network)
|
||||
app.config["RDM_CUSTOM_FIELDS"].append(single_ip)
|
||||
|
||||
|
||||
def finalize_app(app: Flask) -> None:
|
||||
"""Finalize app."""
|
||||
rank_blueprint_higher(app)
|
||||
|
||||
|
||||
def rank_blueprint_higher(app: Flask) -> None:
|
||||
"""Rank this module's blueprint higher than blueprint of security module.
|
||||
|
||||
Needed in order to overwrite email templates.
|
||||
|
||||
Since the blueprints are in a dict and the order of insertion is
|
||||
retained, popping and reinserting all items (except ours), ensures
|
||||
our blueprint will be in front.
|
||||
"""
|
||||
bps = app.blueprints
|
||||
for blueprint_name in list(bps.keys()):
|
||||
if blueprint_name != "invenio_config_iform":
|
||||
bps.update({blueprint_name: bps.pop(blueprint_name)})
|
||||
Reference in New Issue
Block a user