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 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)
|
||||
|
|
|
@ -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']
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue