annotate sat/tools/config.py @ 3728:b15644cae50d

component AP gateway: JID/node ⟺ AP outbox conversion: - convert a combination of JID and optional pubsub node to AP actor handle (see `getJIDAndNode` for details) and vice versa - the gateway now provides a Pubsub service - retrieve pubsub node and convert it to AP collection, AP pagination is converted to RSM - do the opposite: convert AP collection to pubsub and handle RSM request. Due to ActivityStream collection pagination limitations, some RSM request produce inefficient requests, but caching should be used most of the time in the future and avoid the problem. - set specific name to HTTP Server - new `local_only` setting (`True` by default) to indicate if the gateway can request or not XMPP Pubsub nodes from other servers - disco info now specifies important features such as Pubsub RSM, and nodes metadata ticket 363
author Goffi <goffi@goffi.org>
date Tue, 25 Jan 2022 17:54:06 +0100
parents 3c7a64d6f49f
children 524856bd7b19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
3
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT: a jabber client
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3281
diff changeset
5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1445
diff changeset
6 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org)
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
7
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # This program is free software: you can redistribute it and/or modify
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # it under the terms of the GNU Affero General Public License as published by
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # the Free Software Foundation, either version 3 of the License, or
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
11 # (at your option) any later version.
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
12
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # This program is distributed in the hope that it will be useful,
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
16 # GNU Affero General Public License for more details.
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
17
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # You should have received a copy of the GNU Affero General Public License
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
20
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
21 """ Configuration related useful methods """
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
22
2835
6aa22011bc6d tools (config): log error message if config can't be read
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
23 import os
6aa22011bc6d tools (config): log error message if config can't be read
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
24 import csv
6aa22011bc6d tools (config): log error message if config can't be read
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
25 import json
3634
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
26 from typing import Any
3031
98d1f34ce5b9 tools (config), memory: renamed SafeConfigParser following Python 3 port
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
27 from configparser import ConfigParser, DEFAULTSECT, NoOptionError, NoSectionError
2835
6aa22011bc6d tools (config): log error message if config can't be read
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
28 from xdg import BaseDirectory
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
29 from sat.core.log import getLogger
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
30 from sat.core.constants import Const as C
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
31 from sat.core.i18n import _
1835
5b8a859d5bb4 core (config): getConfig now returns unicode and raise exceptions.ParsingError in case of parsing problem
Goffi <goffi@goffi.org>
parents: 1833
diff changeset
32 from sat.core import exceptions
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
33
2835
6aa22011bc6d tools (config): log error message if config can't be read
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
34 log = getLogger(__name__)
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
35
2965
121c4a2a567c core (config): if flatpak is detected, config is also looked after in /app
Goffi <goffi@goffi.org>
parents: 2836
diff changeset
36
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
37 def fixConfigOption(section, option, value, silent=True):
3281
a3639d6d9643 core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents: 3148
diff changeset
38 """Force a configuration option value
a3639d6d9643 core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents: 3148
diff changeset
39
a3639d6d9643 core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents: 3148
diff changeset
40 the option will be written in the first found user config file, a new user
a3639d6d9643 core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents: 3148
diff changeset
41 config will be created if none is found.
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
42
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
43 @param section (str): the config section
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
44 @param option (str): the config option
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
45 @param value (str): the new value
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
46 @param silent (boolean): toggle logging output (must be True when called from sat.sh)
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
47 """
3031
98d1f34ce5b9 tools (config), memory: renamed SafeConfigParser following Python 3 port
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
48 config = ConfigParser()
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
49 target_file = None
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
50 for file_ in C.CONFIG_FILES[::-1]:
2671
0fa217fafabf tools (common/template), jp: refactoring to handle multiple sites:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
51 # we will eventually update the existing file with the highest priority,
0fa217fafabf tools (common/template), jp: refactoring to handle multiple sites:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
52 # if it's a user personal file...
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
53 if not silent:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
54 log.debug(_("Testing file %s") % file_)
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
55 if os.path.isfile(file_):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
56 if file_.startswith(os.path.expanduser("~")):
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
57 config.read([file_])
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
58 target_file = file_
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
59 break
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
60 if not target_file:
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
61 # ... otherwise we create a new config file for that user
3482
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
62 target_file = (
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
63 f"{BaseDirectory.save_config_path(C.APP_NAME_FILE)}/{C.APP_NAME_FILE}.conf"
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
64 )
1056
a5cfa9bb4541 tools (config): fixConfigOption creates the section if it doesn't exist
souliane <souliane@mailoo.org>
parents: 1046
diff changeset
65 if section and section.upper() != DEFAULTSECT and not config.has_section(section):
a5cfa9bb4541 tools (config): fixConfigOption creates the section if it doesn't exist
souliane <souliane@mailoo.org>
parents: 1046
diff changeset
66 config.add_section(section)
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
67 config.set(section, option, value)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
68 with open(target_file, "wb") as configfile:
1046
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
69 config.write(configfile) # for the next time that user launches sat
a874a79ad0f5 tools: add missing file src/tools/config.py
souliane <souliane@mailoo.org>
parents:
diff changeset
70 if not silent:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
71 if option in ("passphrase",): # list here the options storing a password
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
72 value = "******"
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
73 log.warning(_("Config auto-update: {option} set to {value} in the file "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
74 "{config_file}.").format(option=option, value=value,
2671
0fa217fafabf tools (common/template), jp: refactoring to handle multiple sites:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
75 config_file=target_file))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
76
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
77
3148
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
78 def parseMainConf(log_filenames=False):
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
79 """Look for main .ini configuration file, and parse it
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
80
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
81 @param log_filenames(bool): if True, log filenames of read config files
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
82 """
3031
98d1f34ce5b9 tools (config), memory: renamed SafeConfigParser following Python 3 port
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
83 config = ConfigParser(defaults=C.DEFAULT_CONFIG)
1859
ac2ac7fe8a9b core (memory, config): moved parseMainConf to tools/config so it can be used by frontends too
Goffi <goffi@goffi.org>
parents: 1835
diff changeset
84 try:
3148
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
85 filenames = config.read(C.CONFIG_FILES)
2835
6aa22011bc6d tools (config): log error message if config can't be read
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
86 except Exception as e:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
87 log.error(_("Can't read main config: {msg}").format(msg=e), exc_info=True)
3148
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
88 else:
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
89 if log_filenames:
3482
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
90 if filenames:
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
91 log.info(
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
92 _("Configuration was read from: {filenames}").format(
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
93 filenames=', '.join(filenames)))
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
94 else:
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
95 log.warning(
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
96 _("No configuration file found, using default settings")
acb28399480f tools (config): show a warning when no config file has been found + don't use hardcoded filename in `fixConfigOption`
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
97 )
3148
60a9e47ef988 core: log filenames of read config files
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
98
1859
ac2ac7fe8a9b core (memory, config): moved parseMainConf to tools/config so it can be used by frontends too
Goffi <goffi@goffi.org>
parents: 1835
diff changeset
99 return config
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
100
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
101
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
102 def getConfig(config, section, name, default=None):
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
103 """Get a configuration option
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
104
3031
98d1f34ce5b9 tools (config), memory: renamed SafeConfigParser following Python 3 port
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
105 @param config (ConfigParser): the configuration instance
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
106 @param section (str): section of the config file (None or '' for DEFAULT)
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
107 @param name (str): name of the option
1235
80d2ed788b40 core (config): added the Exception default value which raise an exception instead of returning the default in getConfig
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
108 @param default: value to use if not found, or Exception to raise an exception
1835
5b8a859d5bb4 core (config): getConfig now returns unicode and raise exceptions.ParsingError in case of parsing problem
Goffi <goffi@goffi.org>
parents: 1833
diff changeset
109 @return (unicode, list, dict): parsed value
1235
80d2ed788b40 core (config): added the Exception default value which raise an exception instead of returning the default in getConfig
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
110 @raise: NoOptionError if option is not present and default is Exception
80d2ed788b40 core (config): added the Exception default value which raise an exception instead of returning the default in getConfig
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
111 NoSectionError if section doesn't exists and default is Exception
1835
5b8a859d5bb4 core (config): getConfig now returns unicode and raise exceptions.ParsingError in case of parsing problem
Goffi <goffi@goffi.org>
parents: 1833
diff changeset
112 exceptions.ParsingError error while parsing value
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
113 """
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
114 if not section:
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
115 section = DEFAULTSECT
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
116
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
117 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
118 value = config.get(section, name)
1235
80d2ed788b40 core (config): added the Exception default value which raise an exception instead of returning the default in getConfig
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
119 except (NoOptionError, NoSectionError) as e:
80d2ed788b40 core (config): added the Exception default value which raise an exception instead of returning the default in getConfig
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
120 if default is Exception:
80d2ed788b40 core (config): added the Exception default value which raise an exception instead of returning the default in getConfig
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
121 raise e
1234
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
122 return default
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
123
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
124 if name.endswith("_path") or name.endswith("_dir"):
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
125 value = os.path.expanduser(value)
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
126 # thx to Brian (http://stackoverflow.com/questions/186857/splitting-a-semicolon-separated-string-to-a-dictionary-in-python/186873#186873)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
127 elif name.endswith("_list"):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
128 value = next(csv.reader(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
129 [value], delimiter=",", quotechar='"', skipinitialspace=True
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
130 ))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
131 elif name.endswith("_dict"):
1835
5b8a859d5bb4 core (config): getConfig now returns unicode and raise exceptions.ParsingError in case of parsing problem
Goffi <goffi@goffi.org>
parents: 1833
diff changeset
132 try:
5b8a859d5bb4 core (config): getConfig now returns unicode and raise exceptions.ParsingError in case of parsing problem
Goffi <goffi@goffi.org>
parents: 1833
diff changeset
133 value = json.loads(value)
5b8a859d5bb4 core (config): getConfig now returns unicode and raise exceptions.ParsingError in case of parsing problem
Goffi <goffi@goffi.org>
parents: 1833
diff changeset
134 except ValueError as e:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
135 raise exceptions.ParsingError("Error while parsing data: {}".format(e))
1833
a123e881f9e5 core (config): _dict values are now handled with json syntax
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
136 if not isinstance(value, dict):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
137 raise exceptions.ParsingError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
138 "{name} value is not a dict: {value}".format(name=name, value=value)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
139 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
140 elif name.endswith("_json"):
2451
d1153ce68ca0 tools (config): complexe data can now be set using json and the "_json" suffix
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
141 try:
d1153ce68ca0 tools (config): complexe data can now be set using json and the "_json" suffix
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
142 value = json.loads(value)
d1153ce68ca0 tools (config): complexe data can now be set using json and the "_json" suffix
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
143 except ValueError as e:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2965
diff changeset
144 raise exceptions.ParsingError("Error while parsing data: {}".format(e))
1064
7ee9d9db67b9 memory, tools (config): move special config retrieval from memory to tools
souliane <souliane@mailoo.org>
parents: 1056
diff changeset
145 return value
3634
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
146
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
147
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
148 def getConf(
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
149 conf: ConfigParser,
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
150 prefix: str,
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
151 section: str,
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
152 name: str,
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
153 default: Any
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
154 ) -> Any:
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
155 """Get configuration value from environment or config file
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
156
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
157 @param str: prefix to use for the varilable name (see `name` below)
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
158 @param section: config section to use
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
159 @param name: unsuffixed name.
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
160 For environment variable, `LIBERVIA_<prefix>_` will be prefixed (and name
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
161 will be set to uppercase).
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
162 For config file, `<prefix>_` will be prefixed (and DEFAULT section will be
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
163 used).
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
164 Environment variable has priority over config values. If Environment variable
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
165 is set but empty string, config value will be used.
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
166 @param default: default value to use if varilable is set neither in environment,
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
167 nor in config
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
168 """
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
169 # XXX: This is a temporary method until parameters are refactored
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
170 value = os.getenv(f"LIBERVIA_{prefix}_{name}".upper())
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3482
diff changeset
171 return value or getConfig(conf, section, f"{prefix}_{name}", default)