*** Wartungsfenster jeden ersten Mittwoch vormittag im Monat ***

Skip to content
Snippets Groups Projects
Commit d008de46 authored by Moser, Maximilian's avatar Moser, Maximilian
Browse files

Refactor user-related modules into their own namespace

* to make it more obvious that they are all related to user models
* also, rename the modules to better reflect their content
* also, rename some content (e.g. `CurationForm` to `CurationPreferencesForm`)
parent e9e377c2
No related branches found
No related tags found
1 merge request!77Refactor layout and add tests
......@@ -12,7 +12,7 @@ from flask import current_app
from invenio_accounts.proxies import current_datastore
from invenio_db import db
from ..utils import get_user_by_username
from ..users.utils import get_user_by_username
def create_username_from_info(user_info):
......
......@@ -14,15 +14,19 @@ from invenio_oauthclient.views.client import auto_redirect_login
from invenio_rdm_records.config import RDM_RECORDS_REVIEWS
from .auth import TUWSSOSettingsHelper
from .forms import tuw_registration_form
from .permissions import (
TUWCommunityPermissionPolicy,
TUWRecordPermissionPolicy,
TUWRequestsPermissionPolicy,
)
from .schemas import TUWUserPreferencesSchema, TUWUserProfileSchema, TUWUserSchema
from .services import TUWRecordsComponents
from .utils import check_user_email_for_tuwien, current_user_as_creator
from .users import (
TUWUserPreferencesSchema,
TUWUserProfileSchema,
TUWUserSchema,
tuw_registration_form,
)
from .users.utils import check_user_email_for_tuwien, current_user_as_creator
# Invenio-Config-TUW
# ==================
......
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024-2025 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.
"""Customizations for the user model at TU Wien.
This includes the curation consent for record metadata as extension for the user's
preferences, and a custom registration form which requires the terms of use to be
accepted.
"""
from .preferences import CurationPreferencesForm, CurationPreferencesProxy
from .registration import tuw_registration_form
from .schemas import TUWUserPreferencesSchema, TUWUserProfileSchema, TUWUserSchema
from .utils import (
check_user_email_for_tuwien,
current_user_as_creator,
get_user_by_username,
)
from .views import user_settings_blueprint
__all__ = (
"CurationPreferencesForm",
"CurationPreferencesProxy",
"TUWUserPreferencesSchema",
"TUWUserProfileSchema",
"TUWUserSchema",
"check_user_email_for_tuwien",
"current_user_as_creator",
"get_user_by_username",
"tuw_registration_form",
"user_settings_blueprint",
)
# -*- coding: utf-8 -*-
#
# Copyright (C) 2023 TU Wien.
# Copyright (C) 2023-2025 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.
......@@ -37,7 +37,7 @@ class CurationPreferencesProxy:
return f"curation_{attr}" in self._user.preferences
class CurationForm(FlaskForm):
class CurationPreferencesForm(FlaskForm):
"""Form for editing a user's curation preferences."""
proxy_cls = CurationPreferencesProxy
......
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2024 TU Wien.
# Copyright (C) 2020-2025 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.
......
# -*- coding: utf-8 -*-
#
# Copyright (C) 2023 TU Wien.
# Copyright (C) 2023-2025 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.
......
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2022 TU Wien.
# Copyright (C) 2020-2025 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.
"""Utility functions."""
"""User-related utility functions."""
from typing import Dict, Tuple
from flask_principal import Identity
from flask_security import current_user
from invenio_access import any_user
from invenio_access.utils import get_identity
from invenio_accounts import current_accounts
from invenio_accounts.models import User
# Utilities for internal use
# --------------------------
def get_user_by_username(username):
"""Get the user identified by the username."""
return User.query.filter(User.username == username).one_or_none()
def get_user(identifier):
"""Get the user identified by the given ID, email or username."""
user = current_accounts.datastore.get_user(identifier)
if user is None:
get_user_by_username(identifier)
return user
def get_identity_for_user(user):
"""Get the Identity for the user specified via email, ID or username."""
identity = None
if user is not None:
# note: this seems like the canonical way to go
# 'as_user' can be either an integer (id) or email address
u = get_user(user)
if u is not None:
identity = get_identity(u)
else:
raise LookupError("user not found: %s" % user)
if identity is None:
identity = Identity(1)
identity.provides.add(any_user)
return identity
# Utilities for invenio configuration
# -----------------------------------
def check_user_email_for_tuwien(user):
"""Check if the user's email belongs to TU Wien (but not as a student)."""
domain = user.email.split("@")[-1]
......
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 TU Wien.
# Copyright (C) 2024-2025 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.
......@@ -11,9 +11,9 @@ 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
from .preferences import CurationPreferencesForm
blueprint = Blueprint(
user_settings_blueprint = Blueprint(
"invenio_config_tuw_settings",
__name__,
url_prefix="/account/settings/curation",
......@@ -21,11 +21,11 @@ blueprint = Blueprint(
)
@blueprint.route("/", methods=["GET", "POST"])
@user_settings_blueprint.route("/", methods=["GET", "POST"])
@login_required
def curation_settings_view():
"""Page for the curation consent setting in user profiles."""
preferences_curation_form = CurationForm(
preferences_curation_form = CurationPreferencesForm(
formdata=None, obj=current_user, prefix="preferences-curation"
)
......
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 TU Wien.
# Copyright (C) 2024-2025 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.
......@@ -69,7 +69,7 @@ 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.views:blueprint"
invenio_config_tuw_settings = "invenio_config_tuw.users.views:user_settings_blueprint"
[project.entry-points."invenio_base.finalize_app"]
invenio_config_tuw_mail_handler = "invenio_config_tuw.startup:register_smtp_error_handler"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment