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:
Nils Philippsen 2019-11-20 17:36:17 +01:00
parent 8cfa616073
commit 4ccfc9b5e6
2 changed files with 22 additions and 10 deletions

View file

@ -17,6 +17,7 @@
import copy
import os
from typing import Optional, Sequence
import toml
@ -84,12 +85,18 @@ class ConfigDict(dict):
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.
This function loads default, system-wide, and if specified, additional
configuration files into the `config` and `email_overrides`
dictionaries."""
if addl_config_files is None:
addl_config_files = ()
if addl_email_overrides_files is None:
addl_email_overrides_files = ()
# Load default files.
try:
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 = {}
# 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:
addl_config = toml.load(addl_config_file)
addl_config.update(toml.load(addl_config_file))
except FileNotFoundError as e:
raise RuntimeError(
f"Additional configuration file {addl_config_file} not found."
) 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:
addl_email_overrides = toml.load(addl_email_overrides_file)
addl_email_overrides.update(toml.load(addl_email_overrides_file))
except FileNotFoundError as e:
raise RuntimeError(
f"Additional email overrides file {addl_email_overrides_file} not found."
) from e
else:
addl_email_overrides = {}
config.clear()
config.update(default_config)

View file

@ -486,6 +486,12 @@ class DistgitBugzillaSync:
'--env', dest='env',
help='Run the script for a specific environment, overrides the one '
'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()
@ -615,7 +621,8 @@ class DistgitBugzillaSync:
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
envname = self.config['environment']