Mercurial > libervia-backend
annotate sat/tools/config.py @ 3696:52ee22d78e18
plugin XEP-0384: fix encryption for user own devices:
our own jid is added automatically by OMEMO library, but during the generation of the
stanza, our list of jids was used to get the keys (and thus our own jid and devices keys
was missing).
fix 402
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 22 Oct 2021 18:46:51 +0200 |
parents | 3c7a64d6f49f |
children | 524856bd7b19 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 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 | 5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
1766 | 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 | 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 | 73 log.warning(_("Config auto-update: {option} set to {value} in the file " |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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) |