From 6c6fb06a01b41143cb7ed8a7f4bbae4add2ee161 Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Thu, 26 Jun 2025 17:28:59 +0200 Subject: [PATCH] Prune empty values before creating instance --- src/servala/core/models/service.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/servala/core/models/service.py b/src/servala/core/models/service.py index e87a972..a35e493 100644 --- a/src/servala/core/models/service.py +++ b/src/servala/core/models/service.py @@ -305,6 +305,31 @@ def validate_api_definition(value): return validate_dict(value, required_fields) +def prune_empty_data(data): + """ + Recursively remove empty values from dictionaries and lists. + Empty values include: None, empty strings, empty lists, empty dicts. + """ + + def is_empty(value): + return value is None or value == "" or value == [] or value == {} + + if isinstance(data, dict): + return { + key: pruned_value + for key, value in data.items() + if not is_empty(pruned_value := prune_empty_data(value)) + } + elif isinstance(data, list): + return [ + pruned_item + for item in data + if not is_empty(pruned_item := prune_empty_data(item)) + ] + else: + return data + + class ServiceDefinition(ServalaModelMixin, models.Model): """ Configuration/service implementation: contains information on which @@ -588,6 +613,7 @@ class ServiceInstance(ServalaModelMixin, models.Model): try: spec_data = spec_data or {} + spec_data = prune_empty_data(spec_data) if "writeConnectionSecretToRef" not in spec_data: spec_data["writeConnectionSecretToRef"] = {}