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>
This commit is contained in:
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
|
# Clean up defines from the final final config. We don't want to keep them
|
||||||
# as they would cause warnings during validation.
|
# as they would cause warnings during validation.
|
||||||
for key in defines:
|
config_utils.remove_unknown(conf, defines)
|
||||||
del conf[key]
|
|
||||||
|
|
||||||
if callback:
|
if callback:
|
||||||
callback(conf)
|
callback(conf)
|
||||||
|
@ -92,8 +92,7 @@ def run(config, topdir, has_old, offline, defined_variables):
|
|||||||
# Load actual configuration
|
# Load actual configuration
|
||||||
conf = pungi.util.load_config(config, defined_variables)
|
conf = pungi.util.load_config(config, defined_variables)
|
||||||
# Remove the dummy variables used for defaults.
|
# Remove the dummy variables used for defaults.
|
||||||
for key in defined_variables:
|
config_utils.remove_unknown(conf, defined_variables)
|
||||||
del conf[key]
|
|
||||||
|
|
||||||
errors, warnings = pungi.checks.validate(conf, offline=offline)
|
errors, warnings = pungi.checks.validate(conf, offline=offline)
|
||||||
if errors or warnings:
|
if errors or warnings:
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from pungi.checks import make_schema
|
||||||
|
|
||||||
|
|
||||||
def validate_definition(value):
|
def validate_definition(value):
|
||||||
"""Check that the variable name is a valid Python variable name, and that
|
"""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):
|
def extract_defines(args):
|
||||||
"""Given an iterable of "key=value" strings, parse them into a dict."""
|
"""Given an iterable of "key=value" strings, parse them into a dict."""
|
||||||
return dict(var.split("=", 1) for var in args)
|
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):
|
def test_validate_define_incorrect(self, value):
|
||||||
with self.assertRaises(argparse.ArgumentTypeError):
|
with self.assertRaises(argparse.ArgumentTypeError):
|
||||||
config_utils.validate_definition(value)
|
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…
Reference in New Issue
Block a user