Skip to content

Commit e1ef44b

Browse files
committed
init additionalProperties in schema for defaults
1 parent 3543ad1 commit e1ef44b

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

st2common/st2common/util/config_loader.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,16 @@ def _get_values_for_config(self, config_schema_db, config_db):
101101
return config
102102

103103
@staticmethod
104-
def _get_object_property_schema(object_schema):
104+
def _get_object_property_schema(object_schema, init_additional_properties=None):
105105
additional_properties = object_schema.get("additionalProperties", {})
106-
if isinstance(additional_properties, dict):
106+
if additional_properties and isinstance(additional_properties, dict):
107107
property_schema = defaultdict(lambda: additional_properties)
108108
else:
109109
property_schema = {}
110+
if init_additional_properties:
111+
# ensure that these keys are present in the object (vs just defaultdict)
112+
for key in init_additional_properties:
113+
property_schema.__missing__(key)
110114
property_schema.update(object_schema.get("properties", {}))
111115
return property_schema
112116

@@ -206,7 +210,14 @@ def _assign_default_values(self, schema, config):
206210
if not config.get(schema_item_key, None):
207211
config[schema_item_key] = {}
208212

209-
property_schema = self._get_object_property_schema(schema_item)
213+
property_schema = self._get_object_property_schema(
214+
schema_item,
215+
init_additional_properties=(
216+
config[schema_item_key].keys()
217+
if has_additional_properties
218+
else None
219+
),
220+
)
210221

211222
self._assign_default_values(
212223
schema=property_schema, config=config[schema_item_key]

st2common/tests/unit/test_config_loader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ def test_get_config_dynamic_config_item_under_additional_properties(self):
557557
self.assertEqual(
558558
config_rendered,
559559
{
560-
"regions": ["us-east-1"],
560+
"regions": "us-east-1",
561561
"profiles": {
562562
"dev": {
563563
"host": "127.0.0.3",

0 commit comments

Comments
 (0)