mirror of
https://github.com/jazzband/django-constance.git
synced 2026-03-16 22:40:24 +00:00
Some checks failed
Docs / docs (push) Has been cancelled
Test / ruff-format (push) Has been cancelled
Test / ruff-lint (push) Has been cancelled
Test / build (3.10) (push) Has been cancelled
Test / build (3.11) (push) Has been cancelled
Test / build (3.12) (push) Has been cancelled
Test / build (3.13) (push) Has been cancelled
Test / build (3.14) (push) Has been cancelled
Test / build (3.8) (push) Has been cancelled
Test / build (3.9) (push) Has been cancelled
* Added async logic * Added tests and fixed async deadlock on aset * Used abstract base class for backend to simplify code coverage * Reordered try except block * Added explicit thread safety * Fixed linting error * Worked on redis init block * Fixed async test setup * Added tests for redis instantiation * Fixed linting errors
76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
from importlib import import_module
|
|
|
|
from . import LazyConfig
|
|
from . import settings
|
|
|
|
config = LazyConfig()
|
|
|
|
|
|
def import_module_attr(path):
|
|
package, module = path.rsplit(".", 1)
|
|
return getattr(import_module(package), module)
|
|
|
|
|
|
def get_values():
|
|
"""
|
|
Get dictionary of values from the backend
|
|
:return:
|
|
"""
|
|
# First load a mapping between config name and default value
|
|
default_initial = ((name, options[0]) for name, options in settings.CONFIG.items())
|
|
# Then update the mapping with actually values from the backend
|
|
return dict(default_initial, **dict(config._backend.mget(settings.CONFIG)))
|
|
|
|
|
|
async def aget_values():
|
|
"""
|
|
Get dictionary of values from the backend asynchronously
|
|
:return:
|
|
"""
|
|
default_initial = {name: options[0] for name, options in settings.CONFIG.items()}
|
|
backend_values = await config.amget(settings.CONFIG.keys())
|
|
return dict(default_initial, **backend_values)
|
|
|
|
|
|
def get_values_for_keys(keys):
|
|
"""
|
|
Retrieve values for specified keys from the backend.
|
|
|
|
:param keys: List of keys to retrieve.
|
|
:return: Dictionary with values for the specified keys.
|
|
:raises AttributeError: If any key is not found in the configuration.
|
|
"""
|
|
if not isinstance(keys, (list, tuple, set)):
|
|
raise TypeError("keys must be a list, tuple, or set of strings")
|
|
|
|
# Prepare default initial mapping
|
|
default_initial = {name: options[0] for name, options in settings.CONFIG.items() if name in keys}
|
|
|
|
# Check if all keys are present in the default_initial mapping
|
|
missing_keys = [key for key in keys if key not in default_initial]
|
|
if missing_keys:
|
|
raise AttributeError(f'"{", ".join(missing_keys)}" keys not found in configuration.')
|
|
|
|
# Merge default values and backend values, prioritizing backend values
|
|
return dict(default_initial, **dict(config._backend.mget(keys)))
|
|
|
|
|
|
async def aget_values_for_keys(keys):
|
|
"""
|
|
Retrieve values for specified keys from the backend asynchronously.
|
|
|
|
:param keys: List of keys to retrieve.
|
|
:return: Dictionary with values for the specified keys.
|
|
:raises AttributeError: If any key is not found in the configuration.
|
|
"""
|
|
if not isinstance(keys, (list, tuple, set)):
|
|
raise TypeError("keys must be a list, tuple, or set of strings")
|
|
|
|
default_initial = {name: options[0] for name, options in settings.CONFIG.items() if name in keys}
|
|
|
|
missing_keys = [key for key in keys if key not in default_initial]
|
|
if missing_keys:
|
|
raise AttributeError(f'"{", ".join(missing_keys)}" keys not found in configuration.')
|
|
|
|
backend_values = await config.amget(keys)
|
|
return dict(default_initial, **backend_values)
|