Don't rely on parameter file extension for downloading

This patch also adds unittests and docstrings for the
show_validations_parameters method.

Change-Id: I7da1ef5607f6a7b164f87dace3a49a14e6cbf06f
Signed-off-by: Gael Chamoulaud (Strider) <gchamoul@redhat.com>
This commit is contained in:
Gael Chamoulaud (Strider) 2020-11-03 07:02:11 +01:00
parent 410c03c88e
commit 9192d5826c
No known key found for this signature in database
GPG Key ID: 4119D0305C651D66
3 changed files with 60 additions and 4 deletions

View File

@ -27,6 +27,7 @@
files: files:
- ^doc/.* - ^doc/.*
- ^README.rst - ^README.rst
- ^validations_libs/.*
- validations-libs-functional - validations-libs-functional
gate: gate:
jobs: jobs:

View File

@ -199,6 +199,13 @@ class TestValidationActions(TestCase):
self.assertEqual(result, json.dumps(mock_get_param.return_value, self.assertEqual(result, json.dumps(mock_get_param.return_value,
indent=4, sort_keys=True)) indent=4, sort_keys=True))
@mock.patch('six.moves.builtins.open')
def test_show_validations_parameters_non_supported_format(self, mock_open):
v_actions = ValidationActions()
self.assertRaises(RuntimeError,
v_actions.show_validations_parameters,
validation='foo', format='bar')
@mock.patch('validations_libs.validation_logs.ValidationLogs.' @mock.patch('validations_libs.validation_logs.ValidationLogs.'
'get_logfile_by_validation', 'get_logfile_by_validation',
return_value=['/tmp/123_foo_2020-03-30T13:17:22.447857Z.json']) return_value=['/tmp/123_foo_2020-03-30T13:17:22.447857Z.json'])

View File

@ -158,22 +158,70 @@ class ValidationActions(object):
column_name = ("Groups", "Description", "Number of Validations") column_name = ("Groups", "Description", "Number of Validations")
return (column_name, group_info) return (column_name, group_info)
def show_validations_parameters(self, validation, group=None, def show_validations_parameters(self, validation=None, group=None,
format='json', download_file=None): format='json', download_file=None):
"""Return Validations Parameters""" """
Return Validations Parameters for one or several validations by their
names or their groups.
:param validation: List of validation name(s)
:type validation: `list`
:param group: List of validation group(s)
:type group: `list`
:param format: Output format (Supported format are JSON or YAML)
:type format: `string`
:param download_file: Path of a file in which the parameters will be
stored
:type download_file: `string`
:return: A JSON or a YAML dump (By default, JSON).
if `download_file` is used, a file containing only the
parameters will be created in the file system.
:exemple:
>>> validation = ['check-cpu', 'check-ram']
>>> group = None
>>> format = 'json'
>>> show_validations_parameters(validation, group, format)
{
"check-cpu": {
"parameters": {
"minimal_cpu_count": 8
}
},
"check-ram": {
"parameters": {
"minimal_ram_gb": 24
}
}
}
"""
if not validation:
validation = []
if not group:
group = []
supported_format = ['json', 'yaml']
if format not in supported_format:
raise RuntimeError("{} format not supported".format(format))
validations = v_utils.get_validations_playbook( validations = v_utils.get_validations_playbook(
self.validation_path, validation, group) self.validation_path, validation, group)
params = v_utils.get_validations_parameters(validations, validation, params = v_utils.get_validations_parameters(validations, validation,
group, format) group, format)
if download_file: if download_file:
params_only = {} params_only = {}
ext = os.splitext(download_file)[1][1:]
with open(download_file, 'w') as f: with open(download_file, 'w') as f:
for val_name in params.keys(): for val_name in params.keys():
for k, v in params[val_name].get('parameters').items(): for k, v in params[val_name].get('parameters').items():
params_only[k] = v params_only[k] = v
if ext == 'json': if format == 'json':
f.write(json.dumps(params_only, f.write(json.dumps(params_only,
indent=4, indent=4,
sort_keys=True)) sort_keys=True))