mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Support Configuration
as an array item
This commit is contained in:
parent
51e76c3a38
commit
237023dde0
2 changed files with 42 additions and 6 deletions
|
@ -921,15 +921,17 @@ class ArrayConfig(BaseConfigItem):
|
|||
if items:
|
||||
if isinstance(items, (list, tuple)):
|
||||
for item in items:
|
||||
if not isinstance(item, BaseItem):
|
||||
if not isinstance(item, (Configuration, BaseItem)):
|
||||
raise RuntimeError(
|
||||
'All items passed in the item argument tuple/list must be '
|
||||
'a subclass of BaseItem/BaseConfigItem, not {0}'.format(type(item))
|
||||
'a subclass of Configuration, BaseItem or BaseConfigItem, '
|
||||
'not {0}'.format(type(item))
|
||||
)
|
||||
elif not isinstance(items, BaseItem):
|
||||
elif not isinstance(items, (Configuration, BaseItem)):
|
||||
raise RuntimeError(
|
||||
'The items argument passed must be a subclass of '
|
||||
'BaseConfigItem, not {0}'.format(type(item))
|
||||
'Configuration, BaseItem or BaseConfigItem, not '
|
||||
'{0}'.format(type(items))
|
||||
)
|
||||
self.items = items
|
||||
self.min_items = min_items
|
||||
|
@ -939,8 +941,9 @@ class ArrayConfig(BaseConfigItem):
|
|||
super(ArrayConfig, self).__init__(**kwargs)
|
||||
|
||||
def __get_items__(self):
|
||||
if isinstance(self.items, BaseItem):
|
||||
# This is a BaseConfigItem, return it in it's serialized form
|
||||
if isinstance(self.items, (Configuration, BaseItem)):
|
||||
# This is either a Configuration or a Basetem, return it in it's
|
||||
# serialized form
|
||||
return self.items.serialize()
|
||||
if isinstance(self.items, (tuple, list)):
|
||||
items = []
|
||||
|
|
|
@ -832,6 +832,39 @@ class ConfigTestCase(TestCase):
|
|||
}
|
||||
)
|
||||
|
||||
class HowManyConfig(config.Configuration):
|
||||
item = config.IntegerConfig(title='How many dogs', description='Question')
|
||||
|
||||
item = config.ArrayConfig(title='Dog Names',
|
||||
description='Name your dogs',
|
||||
items=HowManyConfig())
|
||||
self.assertDictEqual(
|
||||
item.serialize(), {
|
||||
'type': 'array',
|
||||
'title': item.title,
|
||||
'description': item.description,
|
||||
'items': HowManyConfig.serialize()
|
||||
}
|
||||
)
|
||||
|
||||
class AgesConfig(config.Configuration):
|
||||
item = config.IntegerConfig()
|
||||
|
||||
item = config.ArrayConfig(title='Dog Names',
|
||||
description='Name your dogs',
|
||||
items=(HowManyConfig(), AgesConfig()))
|
||||
self.assertDictEqual(
|
||||
item.serialize(), {
|
||||
'type': 'array',
|
||||
'title': item.title,
|
||||
'description': item.description,
|
||||
'items': [
|
||||
HowManyConfig.serialize(),
|
||||
AgesConfig.serialize()
|
||||
]
|
||||
}
|
||||
)
|
||||
|
||||
@skipIf(HAS_JSONSCHEMA is False, 'The \'jsonschema\' library is missing')
|
||||
def test_array_config_validation(self):
|
||||
class TestConf(config.Configuration):
|
||||
|
|
Loading…
Add table
Reference in a new issue