forked from openwallet-foundation/acapy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplugin_settings.py
81 lines (60 loc) · 2.25 KB
/
plugin_settings.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
"""Settings implementation for plugins."""
from typing import Any, Mapping, Optional
from .base import BaseSettings
PLUGIN_CONFIG_KEY = "plugin_config"
class PluginSettings(BaseSettings):
"""Retrieve immutable settings for plugins.
Plugin settings should be retrieved by calling:
PluginSettings.for_plugin(settings, "my_plugin", {"default": "values"})
This will extract the PLUGIN_CONFIG_KEY in "settings" and return a new
PluginSettings instance.
"""
def __init__(self, values: Optional[Mapping[str, Any]] = None):
"""Initialize a Settings object.
Args:
values: An optional dictionary of settings
"""
self._values = {}
if values:
self._values.update(values)
def __contains__(self, index):
"""Define 'in' operator."""
return index in self._values
def __iter__(self):
"""Iterate settings keys."""
return iter(self._values)
def __len__(self):
"""Fetch the length of the mapping."""
return len(self._values)
def __bool__(self):
"""Convert settings to a boolean."""
return True
def copy(self) -> BaseSettings:
"""Produce a copy of the settings instance."""
return PluginSettings(self._values)
def extend(self, other: Mapping[str, Any]) -> BaseSettings:
"""Merge another settings instance to produce a new instance."""
vals = self._values.copy()
vals.update(other)
return PluginSettings(vals)
def get_value(self, *var_names: str, default: Any = None):
"""Fetch a setting.
Args:
var_names: A list of variable name alternatives
default: The default value to return if none are defined
"""
for k in var_names:
if k in self._values:
return self._values[k]
return default
@classmethod
def for_plugin(
cls,
settings: BaseSettings,
plugin: str,
default: Optional[Mapping[str, Any]] = None,
) -> "PluginSettings":
"""Construct a PluginSettings object from another settings object.
PLUGIN_CONFIG_KEY is read from settings.
"""
return cls(settings.get(PLUGIN_CONFIG_KEY, {}).get(plugin, default))