expose additional configuration files to CLI
This adds the --add-config-file, --add-email-overrides-file options and as a side effect allows to specify any number of either which will be applied in order to the respective configuration objects. Signed-off-by: Nils Philippsen <nils@redhat.com>
This commit is contained in:
parent
8cfa616073
commit
4ccfc9b5e6
2 changed files with 22 additions and 10 deletions
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
import os
|
import os
|
||||||
|
from typing import Optional, Sequence
|
||||||
|
|
||||||
import toml
|
import toml
|
||||||
|
|
||||||
|
@ -84,12 +85,18 @@ class ConfigDict(dict):
|
||||||
self[k] = v
|
self[k] = v
|
||||||
|
|
||||||
|
|
||||||
def load_configuration(addl_config_file=None, addl_email_overrides_file=None):
|
def load_configuration(addl_config_files: Optional[Sequence[str]] = None,
|
||||||
|
addl_email_overrides_files: Optional[Sequence[str]] = None):
|
||||||
"""Load stored configuration.
|
"""Load stored configuration.
|
||||||
|
|
||||||
This function loads default, system-wide, and if specified, additional
|
This function loads default, system-wide, and if specified, additional
|
||||||
configuration files into the `config` and `email_overrides`
|
configuration files into the `config` and `email_overrides`
|
||||||
dictionaries."""
|
dictionaries."""
|
||||||
|
if addl_config_files is None:
|
||||||
|
addl_config_files = ()
|
||||||
|
if addl_email_overrides_files is None:
|
||||||
|
addl_email_overrides_files = ()
|
||||||
|
|
||||||
# Load default files.
|
# Load default files.
|
||||||
try:
|
try:
|
||||||
default_config = toml.load(config_files['default']['configuration'])
|
default_config = toml.load(config_files['default']['configuration'])
|
||||||
|
@ -117,25 +124,23 @@ def load_configuration(addl_config_file=None, addl_email_overrides_file=None):
|
||||||
system_email_overrides = {}
|
system_email_overrides = {}
|
||||||
|
|
||||||
# Load additional files (say, specified on the command line), if any.
|
# Load additional files (say, specified on the command line), if any.
|
||||||
if addl_config_file:
|
addl_config = ConfigDict()
|
||||||
|
for addl_config_file in addl_config_files:
|
||||||
try:
|
try:
|
||||||
addl_config = toml.load(addl_config_file)
|
addl_config.update(toml.load(addl_config_file))
|
||||||
except FileNotFoundError as e:
|
except FileNotFoundError as e:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
f"Additional configuration file {addl_config_file} not found."
|
f"Additional configuration file {addl_config_file} not found."
|
||||||
) from e
|
) from e
|
||||||
else:
|
|
||||||
addl_config = {}
|
|
||||||
|
|
||||||
if addl_email_overrides_file:
|
addl_email_overrides = ConfigDict()
|
||||||
|
for addl_email_overrides_file in addl_email_overrides_files:
|
||||||
try:
|
try:
|
||||||
addl_email_overrides = toml.load(addl_email_overrides_file)
|
addl_email_overrides.update(toml.load(addl_email_overrides_file))
|
||||||
except FileNotFoundError as e:
|
except FileNotFoundError as e:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
f"Additional email overrides file {addl_email_overrides_file} not found."
|
f"Additional email overrides file {addl_email_overrides_file} not found."
|
||||||
) from e
|
) from e
|
||||||
else:
|
|
||||||
addl_email_overrides = {}
|
|
||||||
|
|
||||||
config.clear()
|
config.clear()
|
||||||
config.update(default_config)
|
config.update(default_config)
|
||||||
|
|
|
@ -486,6 +486,12 @@ class DistgitBugzillaSync:
|
||||||
'--env', dest='env',
|
'--env', dest='env',
|
||||||
help='Run the script for a specific environment, overrides the one '
|
help='Run the script for a specific environment, overrides the one '
|
||||||
'set in the configuration file')
|
'set in the configuration file')
|
||||||
|
parser.add_argument('--add-config-file', metavar='CONFIG_FILE',
|
||||||
|
dest='addl_config_files', action='append',
|
||||||
|
help="File(s) from which to read overriding configuration")
|
||||||
|
parser.add_argument('--add-email-overrides-file', metavar='EMAIL_OVERRIDES_FILE',
|
||||||
|
dest='addl_email_overrides_files', action='append',
|
||||||
|
help="File(s) from which to read additional email overrides")
|
||||||
|
|
||||||
self.args = parser.parse_args()
|
self.args = parser.parse_args()
|
||||||
|
|
||||||
|
@ -615,7 +621,8 @@ class DistgitBugzillaSync:
|
||||||
|
|
||||||
self.get_cli_arguments()
|
self.get_cli_arguments()
|
||||||
|
|
||||||
load_configuration()
|
load_configuration(addl_config_files=self.args.addl_config_files,
|
||||||
|
addl_email_overrides_files=self.args.addl_email_overrides_files)
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
envname = self.config['environment']
|
envname = self.config['environment']
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue