Skip to content

meringue.conf ¤

SETTING_KEY module-attribute ¤

SETTING_KEY: Final[str] = 'MERINGUE'

Parameter name in django settings for meringue settings.

Examples:

settings.py
MERINGUE = {
    "FRONTEND_URL": "http://meringue.local:9000/",
}

DEPRECATED_PARAMS module-attribute ¤

DEPRECATED_PARAMS: Final[dict[str, str]] = {}

Dict with deprecated options and warning texts for them.

Examples:

DEPRECATED_PARAMS = {
    "PROTOCOL": "The `PROTOCOL` option is deprecated, use `BACKEND_PROTOCOL` instead.",
}

PARAMS_TO_IMPORT module-attribute ¤

PARAMS_TO_IMPORT: Final[list[str]] = [
    "UPLOAD_RENAME_HANDLER"
]

List of options that contain the path to the module and must be imported.

Examples:

PARAMS_TO_IMPORT = [
    "UPLOAD_RENAME_HANDLER",
]

Settings ¤

Settings(
    setting_key: str,
    defaults: dict[str, str],
    deprecated_params: dict[str, str] | None = None,
    params_to_impoprt: list[str] | None = None,
)

A settings object.

The settings are obtained from the django settings by the name of the key which should contain an object with all the application settings.

Attributes:

  • setting_key

    Settings key in django settings list.

  • defaults

    Dict with default parameter values. Used as a list of available settings.

  • deprecated_params

    Dict with deprecated options and warning texts for them.

  • params_to_impoprt

    List of options that contain the path to the module and must be imported.

Source code in meringue/conf/__init__.py
def __init__(
    self,
    setting_key: str,
    defaults: dict[str, str],
    deprecated_params: dict[str, str] | None = None,
    params_to_impoprt: list[str] | None = None,
):
    """
    Attributes:
        setting_key: Settings key in django settings list.
        defaults: Dict with default parameter values. Used as a list of available settings.
        deprecated_params: Dict with deprecated options and warning texts for them.
        params_to_impoprt: List of options that contain the path to the module and must be
            imported.
    """

    self.setting_key = setting_key
    if isinstance(defaults, ModuleType):
        self.defaults = {}
        for key in dir(defaults):
            if key.isupper():
                self.defaults[key] = getattr(defaults, key)
    else:
        self.defaults = defaults
    self.deprecated_params = deprecated_params or {}
    self.params_to_impoprt = params_to_impoprt or []
    self._cached_attrs = set()
    self.reset()

__getattr__ ¤

__getattr__(attr: str) -> Any

Gets the parameter value and caches it in the attributes of the settings object.

Attributes:

  • attr

    Setting parameter name.

Raises:

  • AttributeError

    Error when trying to get an unregistered parameter.

Warns:

  • DeprecationWarning

    A warning that the parameter is deprecated.

Returns:

  • Any

    Setting value.

Source code in meringue/conf/__init__.py
def __getattr__(self, attr: str) -> Any:
    """
    Gets the parameter value and caches it in the attributes of the settings object.

    Attributes:
        attr: Setting parameter name.

    Raises:
        AttributeError: Error when trying to get an unregistered parameter.

    Warns:
        DeprecationWarning: A warning that the parameter is deprecated.

    Returns:
        Setting value.
    """
    if attr not in self.defaults:
        raise AttributeError("Invalid setting key: '%s'" % attr)

    if attr in self.deprecated_params:
        warnings.warn(self.deprecated_params[attr], DeprecationWarning, stacklevel=2)

    val = self.user_params.get(attr, self.defaults[attr])

    if attr in self.params_to_impoprt:
        val = import_from_string(val, attr)

    self._cached_attrs.add(attr)
    setattr(self, attr, val)
    return val

reset ¤

reset()

Reset downloaded settings, as well as clearing the cache.

Source code in meringue/conf/__init__.py
def reset(self):
    """
    Reset downloaded settings, as well as clearing the cache.
    """

    for attr in self._cached_attrs:
        delattr(self, attr)
    self._cached_attrs = set()
    self.user_params = getattr(settings, self.setting_key, {})

import_from_string ¤

import_from_string(val: str, attr: str) -> Any

Imports a dotted module path and returns the attribute/class.

Attributes:

  • val

    Dotted path to imported module.

  • attr

    The name of the parameter in the library settings.

Raises:

Returns:

  • Any

    Imported attribute/class.

Source code in meringue/conf/__init__.py
def import_from_string(val: str, attr: str) -> Any:
    """
    Imports a dotted module path and returns the attribute/class.

    Attributes:
        val: Dotted path to imported module.
        attr: The name of the parameter in the library settings.

    Raises:
        ImportError: Attribute/class not exists.

    Returns:
        Imported attribute/class.
    """

    try:
        return import_string(val)
    except ImportError as e:
        msg = f"Could not import '{val}' for API setting '{attr}'.\n{e.__class__.__name__}: {e}."
        raise ImportError(msg) from None

reset_settings ¤

reset_settings(*args, **kwargs)

Settings change signal handler.

Source code in meringue/conf/__init__.py
@receiver(setting_changed)
def reset_settings(*args, **kwargs):
    """
    Settings change signal handler.
    """

    if kwargs["setting"] == SETTING_KEY:
        m_settings.reset()