From f6cfe9e160a04c3af7d4c6828a82db809ca1e5e4 Mon Sep 17 00:00:00 2001 From: Lorenz Vanthillo Date: Mon, 17 Mar 2025 20:40:39 +0100 Subject: [PATCH] feat(sam): allow generation of dict values in generate-event cmd --- .../event-mapping.json | 4 ++++ samcli/lib/generated_sample_events/events.py | 20 ++++++++++++++++++- .../events/apigateway/AwsProxy.json | 4 +--- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/samcli/lib/generated_sample_events/event-mapping.json b/samcli/lib/generated_sample_events/event-mapping.json index da70c9a240..917fa07dba 100644 --- a/samcli/lib/generated_sample_events/event-mapping.json +++ b/samcli/lib/generated_sample_events/event-mapping.json @@ -241,6 +241,10 @@ "type": "string", "default": "path/to/resource" }, + "querystringparameters": { + "type": "dict", + "default": "{\"foo\": \"bar\"}" + }, "account-id": { "default": "123456789012" }, diff --git a/samcli/lib/generated_sample_events/events.py b/samcli/lib/generated_sample_events/events.py index 5d8dd490ff..b52759a97e 100644 --- a/samcli/lib/generated_sample_events/events.py +++ b/samcli/lib/generated_sample_events/events.py @@ -95,6 +95,9 @@ def transform_val(self, properties, val): if hashing is not None: transformed = self.hash(hashing, transformed) + if properties.get("type") == "dict": + transformed = json.loads(transformed) + return transformed @staticmethod @@ -180,4 +183,19 @@ def generate_event(self, service_name: str, event_type: str, values_to_sub: Dict data = json.dumps(data, indent=2) # return the substituted file (A string containing the rendered template.) - return renderer.render(data, values_to_sub) + rendered = renderer.render(data, values_to_sub) + + # Parse the rendered result + rendered_json = json.loads(rendered) + + key_map = {k.lower(): k for k in rendered_json.keys()} + + # Update dictionary values in rendered result + for key, value in values_to_sub.items(): + if isinstance(value, dict): + original_key = key_map.get(key.lower()) + if original_key and isinstance(rendered_json[original_key], str): + rendered_json[original_key] = value + + # Return the final JSON with proper dictionary values + return json.dumps(rendered_json, indent=2) diff --git a/samcli/lib/generated_sample_events/events/apigateway/AwsProxy.json b/samcli/lib/generated_sample_events/events/apigateway/AwsProxy.json index 90ff8ecfed..ac07ebe17f 100644 --- a/samcli/lib/generated_sample_events/events/apigateway/AwsProxy.json +++ b/samcli/lib/generated_sample_events/events/apigateway/AwsProxy.json @@ -4,9 +4,7 @@ "path": "/{{{path}}}", "httpMethod": "{{{method}}}", "isBase64Encoded": true, - "queryStringParameters": { - "foo": "bar" - }, + "queryStringParameters": "{{{querystringparameters}}}", "multiValueQueryStringParameters": { "foo": [ "bar"