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:
Lubomír Sedlář 2019-06-25 15:13:16 +02:00
parent d063217d6f
commit 32a6415e58
4 changed files with 22 additions and 4 deletions

View File

@ -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)

View File

@ -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:

View File

@ -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]

View File

@ -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"})