config: Keep known options defined on CLI

If the validation or dumping script is given some options, they should
only be removed if they are not valid. We have to remove the invalid
ones, otherwise that would cause a warning about unknown options.

Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
master
Lubomír Sedlář 4 years ago
parent d063217d6f
commit 32a6415e58

@ -112,8 +112,7 @@ def process_file(
# Clean up defines from the final final config. We don't want to keep them
# as they would cause warnings during validation.
for key in defines:
del conf[key]
config_utils.remove_unknown(conf, defines)
if callback:
callback(conf)

@ -92,8 +92,7 @@ def run(config, topdir, has_old, offline, defined_variables):
# Load actual configuration
conf = pungi.util.load_config(config, defined_variables)
# Remove the dummy variables used for defaults.
for key in defined_variables:
del conf[key]
config_utils.remove_unknown(conf, defined_variables)
errors, warnings = pungi.checks.validate(conf, offline=offline)
if errors or warnings:

@ -3,6 +3,8 @@
import argparse
import re
from pungi.checks import make_schema
def validate_definition(value):
"""Check that the variable name is a valid Python variable name, and that
@ -18,3 +20,11 @@ def validate_definition(value):
def extract_defines(args):
"""Given an iterable of "key=value" strings, parse them into a dict."""
return dict(var.split("=", 1) for var in args)
def remove_unknown(conf, keys):
"""Remove given keys from the config unless they are known Pungi options."""
schema = make_schema()
for key in keys:
if key not in schema["properties"]:
del conf[key]

@ -35,3 +35,13 @@ class TestDefineHelpers(unittest.TestCase):
def test_validate_define_incorrect(self, value):
with self.assertRaises(argparse.ArgumentTypeError):
config_utils.validate_definition(value)
def test_remove_unknown(self):
conf = {"foo": "bar"}
config_utils.remove_unknown(conf, ["foo"])
self.assertEqual(conf, {})
def test_remove_known(self):
conf = {"release_name": "bar"}
config_utils.remove_unknown(conf, ["release_name"])
self.assertEqual(conf, {"release_name": "bar"})

Loading…
Cancel
Save