From 966f80846869514ff0037241bf3aa83b965100b9 Mon Sep 17 00:00:00 2001 From: Maximilian Moser <maximilian.moser@tuwien.ac.at> Date: Tue, 13 Jul 2021 12:51:58 +0200 Subject: [PATCH] Move generic utility functions to the top-level utils --- invenio_utilities_tuw/cli/drafts.py | 4 +--- invenio_utilities_tuw/cli/files.py | 4 ++-- invenio_utilities_tuw/cli/records.py | 11 ++------- invenio_utilities_tuw/cli/users.py | 2 +- invenio_utilities_tuw/cli/utils.py | 34 --------------------------- invenio_utilities_tuw/utils.py | 35 ++++++++++++++++++++++++++++ 6 files changed, 41 insertions(+), 49 deletions(-) diff --git a/invenio_utilities_tuw/cli/drafts.py b/invenio_utilities_tuw/cli/drafts.py index f6f1ec9..30025b8 100644 --- a/invenio_utilities_tuw/cli/drafts.py +++ b/invenio_utilities_tuw/cli/drafts.py @@ -18,7 +18,7 @@ from flask.cli import with_appcontext from invenio_access.permissions import system_identity from invenio_db import db -from ..utils import get_record_service +from ..utils import get_identity_for_user, get_record_service, get_user_by_identifier from .options import ( option_as_user, option_owners, @@ -31,8 +31,6 @@ from .options import ( from .utils import ( convert_to_recid, create_record_from_metadata, - get_identity_for_user, - get_user_by_identifier, patch_metadata, read_metadata, set_record_owners, diff --git a/invenio_utilities_tuw/cli/files.py b/invenio_utilities_tuw/cli/files.py index 9dc6971..8b383dd 100644 --- a/invenio_utilities_tuw/cli/files.py +++ b/invenio_utilities_tuw/cli/files.py @@ -17,9 +17,9 @@ from invenio_access.permissions import system_identity from invenio_db import db from invenio_files_rest.models import Location, ObjectVersion -from ..utils import get_record_service +from ..utils import get_identity_for_user, get_record_service from .options import option_as_user, option_pid_type, option_pid_value -from .utils import convert_to_recid, get_identity_for_user +from .utils import convert_to_recid def remove_file(file_path, max_rmdir_depth=3): diff --git a/invenio_utilities_tuw/cli/records.py b/invenio_utilities_tuw/cli/records.py index 90412ab..668923e 100644 --- a/invenio_utilities_tuw/cli/records.py +++ b/invenio_utilities_tuw/cli/records.py @@ -15,7 +15,7 @@ import click from flask.cli import with_appcontext from invenio_db import db -from ..utils import get_record_service +from ..utils import get_identity_for_user, get_record_service, get_user_by_identifier from .options import ( option_as_user, option_owners, @@ -25,14 +25,7 @@ from .options import ( option_pretty_print, option_raw, ) -from .utils import ( - convert_to_recid, - get_identity_for_user, - get_object_uuid, - get_user_by_identifier, - patch_metadata, - set_record_owners, -) +from .utils import convert_to_recid, get_object_uuid, patch_metadata, set_record_owners @click.group() diff --git a/invenio_utilities_tuw/cli/users.py b/invenio_utilities_tuw/cli/users.py index 9e21faa..cc7e916 100644 --- a/invenio_utilities_tuw/cli/users.py +++ b/invenio_utilities_tuw/cli/users.py @@ -12,8 +12,8 @@ import click from flask.cli import with_appcontext from invenio_accounts.models import User +from ..utils import get_user_by_identifier, similarity from .options import option_hide_user_roles, option_only_list_active_users -from .utils import get_user_by_identifier, similarity @click.group() diff --git a/invenio_utilities_tuw/cli/utils.py b/invenio_utilities_tuw/cli/utils.py index fd978ef..041ef66 100644 --- a/invenio_utilities_tuw/cli/utils.py +++ b/invenio_utilities_tuw/cli/utils.py @@ -9,11 +9,7 @@ """Utilities for the CLI commands.""" import json -from difflib import SequenceMatcher -from invenio_access.permissions import any_user, system_identity -from invenio_access.utils import get_identity -from invenio_accounts import current_accounts from invenio_db import db from invenio_pidstore.models import PersistentIdentifier @@ -82,31 +78,6 @@ def patch_metadata(metadata: dict, patch: dict) -> dict: return metadata -def get_user_by_identifier(id_or_email): - """Get the user specified via email or ID.""" - if id_or_email is not None: - # note: this seems like the canonical way to go - # 'id_or_email' can be either an integer (id) or email address - u = current_accounts.datastore.get_user(id_or_email) - if u is not None: - return u - else: - raise LookupError("user not found: %s" % id_or_email) - - raise ValueError("id_or_email cannot be None") - - -def get_identity_for_user(user): - """Get the Identity for the user specified via email or ID.""" - if user is not None: - found_user = get_user_by_identifier(user) - identity = get_identity(found_user) - identity.provides.add(any_user) - return identity - - return system_identity - - def get_object_uuid(pid_value, pid_type): """Fetch the UUID of the referenced object.""" uuid = ( @@ -142,8 +113,3 @@ def set_record_owners(record, owners, commit=True): if commit: parent.commit() db.session.commit() - - -def similarity(a: str, b: str) -> float: - """Calculate the similarity between two strings.""" - return SequenceMatcher(None, a, b).ratio() diff --git a/invenio_utilities_tuw/utils.py b/invenio_utilities_tuw/utils.py index b8220e3..24f960c 100644 --- a/invenio_utilities_tuw/utils.py +++ b/invenio_utilities_tuw/utils.py @@ -8,7 +8,12 @@ """Utility functions for Invenio-Utilities-TUW.""" +from difflib import SequenceMatcher + from flask import current_app +from invenio_access.permissions import any_user, system_identity +from invenio_access.utils import get_identity +from invenio_accounts import current_accounts from invenio_rdm_records.proxies import current_rdm_records from werkzeug.utils import import_string @@ -33,3 +38,33 @@ def get_record_service(): factory = lambda: current_rdm_records.records_service return factory() + + +def get_user_by_identifier(id_or_email): + """Get the user specified via email or ID.""" + if id_or_email is not None: + # note: this seems like the canonical way to go + # 'id_or_email' can be either an integer (id) or email address + u = current_accounts.datastore.get_user(id_or_email) + if u is not None: + return u + else: + raise LookupError("user not found: %s" % id_or_email) + + raise ValueError("id_or_email cannot be None") + + +def get_identity_for_user(user): + """Get the Identity for the user specified via email or ID.""" + if user is not None: + found_user = get_user_by_identifier(user) + identity = get_identity(found_user) + identity.provides.add(any_user) + return identity + + return system_identity + + +def similarity(a: str, b: str) -> float: + """Calculate the similarity between two strings.""" + return SequenceMatcher(None, a, b).ratio() -- GitLab