Coverage for heritrace / utils / primary_source_utils.py: 100%
28 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-21 12:56 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-21 12:56 +0000
1# SPDX-FileCopyrightText: 2025 Arcangelo Massari <arcangelo.massari@unibo.it>
2#
3# SPDX-License-Identifier: ISC
5from flask import current_app
6import validators
8USER_DEFAULT_SOURCE_KEY = "user:{user_id}:default_primary_source"
10def get_user_default_primary_source(user_id):
11 """
12 Get the user's default primary source from Redis
14 Args:
15 user_id: The user's ID (e.g. ORCID)
17 Returns:
18 The user's default primary source or None if not set or error
19 """
20 user_default_source = None
21 if user_id:
22 key = USER_DEFAULT_SOURCE_KEY.format(user_id=user_id)
23 try:
24 user_default_source = current_app.redis_client.get(key)
25 if user_default_source and isinstance(user_default_source, bytes):
26 user_default_source = user_default_source.decode('utf-8')
27 except Exception as e:
28 current_app.logger.error(f"Failed to get user default primary source from Redis: {e}")
29 user_default_source = None # Ensure it's None on error
31 return user_default_source
33def get_default_primary_source(user_id):
34 """
35 Get the default primary source to use, falling back to app config if user has none
37 Args:
38 user_id: The user's ID (e.g. ORCID)
40 Returns:
41 The primary source to use (user's default or app default)
42 """
43 user_default = get_user_default_primary_source(user_id)
44 return user_default or current_app.config["PRIMARY_SOURCE"]
46def save_user_default_primary_source(user_id, primary_source):
47 """
48 Save the user's default primary source to Redis
50 Args:
51 user_id: The user's ID (e.g. ORCID)
52 primary_source: The URL to save as default primary source
54 Returns:
55 True if saved successfully, False otherwise
56 """
57 if not user_id or not primary_source or not validators.url(primary_source):
58 return False
60 key = USER_DEFAULT_SOURCE_KEY.format(user_id=user_id)
61 try:
62 current_app.redis_client.set(key, primary_source)
63 return True
64 except Exception as e:
65 current_app.logger.error(f"Failed to save user default primary source to Redis: {e}")
66 return False