From 18555529c738a9c67f1d5f073fdd67a57d5a3ba8 Mon Sep 17 00:00:00 2001 From: JordonPhillips Date: Tue, 26 Nov 2024 12:42:20 +0100 Subject: [PATCH] Support error serialization This adds support for error serialization. This is needed for event streams, which can include error shapes. Consequently, this also moves errors from `errors.py` into `models.py` to avoid circular references. --- .../amazon/smithy/python/codegen/CodegenUtils.java | 12 ++++++------ .../smithy/python/codegen/StructureGenerator.java | 3 +++ .../amazon/smithy/python/codegen/SymbolVisitor.java | 3 +-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/CodegenUtils.java b/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/CodegenUtils.java index 80571f001..b65bd047b 100644 --- a/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/CodegenUtils.java +++ b/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/CodegenUtils.java @@ -106,8 +106,8 @@ public static Symbol getPluginSymbol(PythonSettings settings) { public static Symbol getServiceError(PythonSettings settings) { return Symbol.builder() .name("ServiceError") - .namespace(format("%s.errors", settings.moduleName()), ".") - .definitionFile(format("./%s/errors.py", settings.moduleName())) + .namespace(format("%s.models", settings.moduleName()), ".") + .definitionFile(format("./%s/models.py", settings.moduleName())) .build(); } @@ -123,8 +123,8 @@ public static Symbol getServiceError(PythonSettings settings) { public static Symbol getApiError(PythonSettings settings) { return Symbol.builder() .name("ApiError") - .namespace(format("%s.errors", settings.moduleName()), ".") - .definitionFile(format("./%s/errors.py", settings.moduleName())) + .namespace(format("%s.models", settings.moduleName()), ".") + .definitionFile(format("./%s/models.py", settings.moduleName())) .build(); } @@ -140,8 +140,8 @@ public static Symbol getApiError(PythonSettings settings) { public static Symbol getUnknownApiError(PythonSettings settings) { return Symbol.builder() .name("UnknownApiError") - .namespace(format("%s.errors", settings.moduleName()), ".") - .definitionFile(format("./%s/errors.py", settings.moduleName())) + .namespace(format("%s.models", settings.moduleName()), ".") + .definitionFile(format("./%s/models.py", settings.moduleName())) .build(); } diff --git a/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/StructureGenerator.java b/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/StructureGenerator.java index 6703ab5f1..b7eea5041 100644 --- a/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/StructureGenerator.java +++ b/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/StructureGenerator.java @@ -147,9 +147,12 @@ class $1L($2T): ${7C|} + ${8C|} + """, symbol.getName(), apiError, code, fault, writer.consumer(w -> writeClassDocs(true)), writer.consumer(w -> writeProperties()), + writer.consumer(w -> generateSerializeMethod()), writer.consumer(w -> generateDeserializeMethod())); } diff --git a/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/SymbolVisitor.java b/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/SymbolVisitor.java index ad6c64a0f..b57dc131d 100644 --- a/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/SymbolVisitor.java +++ b/codegen/smithy-python-codegen/src/main/java/software/amazon/smithy/python/codegen/SymbolVisitor.java @@ -330,8 +330,7 @@ private Symbol genericEnum(Shape shape) { @Override public Symbol structureShape(StructureShape shape) { String name = getDefaultShapeName(shape); - var file = shape.hasTrait(ErrorTrait.class) ? "errors" : SHAPES_FILE; - return createGeneratedSymbolBuilder(shape, name, file).build(); + return createGeneratedSymbolBuilder(shape, name, SHAPES_FILE).build(); } @Override