Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,093 changes: 942 additions & 1,151 deletions codegen-output/aws-json-1-0/src/awsjson10/_private/schemas.py

Large diffs are not rendered by default.

1,843 changes: 632 additions & 1,211 deletions codegen-output/aws-json-1-0/src/awsjson10/models.py

Large diffs are not rendered by default.

2,281 changes: 1,159 additions & 1,122 deletions codegen-output/aws-json-1-1/src/awsjson11/_private/schemas.py

Large diffs are not rendered by default.

2,014 changes: 723 additions & 1,291 deletions codegen-output/aws-json-1-1/src/awsjson11/models.py

Large diffs are not rendered by default.

2,980 changes: 1,421 additions & 1,559 deletions codegen-output/aws-query/src/awsquery/_private/schemas.py

Large diffs are not rendered by default.

2,329 changes: 899 additions & 1,430 deletions codegen-output/aws-query/src/awsquery/models.py

Large diffs are not rendered by default.

2,468 changes: 1,167 additions & 1,301 deletions codegen-output/ec2-query/src/ec2query/_private/schemas.py

Large diffs are not rendered by default.

1,909 changes: 718 additions & 1,191 deletions codegen-output/ec2-query/src/ec2query/models.py

Large diffs are not rendered by default.

9,798 changes: 4,110 additions & 5,688 deletions codegen-output/rest-json-1/src/restjson/_private/schemas.py

Large diffs are not rendered by default.

8,879 changes: 3,351 additions & 5,528 deletions codegen-output/rest-json-1/src/restjson/models.py

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

6,989 changes: 2,992 additions & 3,997 deletions codegen-output/rest-xml/src/restxml/_private/schemas.py

Large diffs are not rendered by default.

5,773 changes: 2,092 additions & 3,681 deletions codegen-output/rest-xml/src/restxml/models.py

Large diffs are not rendered by default.

1,846 changes: 869 additions & 977 deletions codegen-output/rpcv2-cbor/src/rpcv2cbor/_private/schemas.py

Large diffs are not rendered by default.

1,924 changes: 657 additions & 1,267 deletions codegen-output/rpcv2-cbor/src/rpcv2cbor/models.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ public final class RuntimeTypes {
public static final Symbol API_OPERATION =
createSymbol("schemas", "APIOperation", SmithyPythonDependency.SMITHY_CORE);

// smithy_core._schema_compact
public static final Symbol HYDRATE =
createSymbol("_schema_compact", "hydrate", SmithyPythonDependency.SMITHY_CORE);
public static final Symbol STATIC_SCHEMA =
createSymbol("_schema_compact", "StaticSchema", SmithyPythonDependency.SMITHY_CORE);
public static final Symbol STATIC_OPERATION_SCHEMA =
createSymbol("_schema_compact", "StaticOperationSchema", SmithyPythonDependency.SMITHY_CORE);

// smithy_core.shapes
public static final Symbol SHAPE_ID = createSymbol("shapes", "ShapeID", SmithyPythonDependency.SMITHY_CORE);
public static final Symbol SHAPE_TYPE = createSymbol("shapes", "ShapeType", SmithyPythonDependency.SMITHY_CORE);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
package software.amazon.smithy.python.codegen.generators;

import software.amazon.smithy.codegen.core.CodegenException;
import software.amazon.smithy.model.shapes.MemberShape;
import software.amazon.smithy.model.shapes.Shape;
import software.amazon.smithy.model.shapes.ShapeVisitor;
import software.amazon.smithy.python.codegen.GenerationContext;
import software.amazon.smithy.python.codegen.writer.PythonWriter;
import software.amazon.smithy.utils.SmithyInternalApi;

/**
* Shared base for the member serializer and deserializer generators, holding the
* schema-location logic that is identical between the two directions.
*/
@SmithyInternalApi
abstract class AbstractMemberGenerator extends ShapeVisitor.DataShapeVisitor<Void> {

protected final GenerationContext context;
protected final PythonWriter writer;
protected final MemberShape member;

AbstractMemberGenerator(GenerationContext context, PythonWriter writer, MemberShape member) {
this.context = context;
this.writer = writer;
this.member = member;
}

/** A list/map member reaches its schema through the container's element schema. */
protected void writeSchema() {
var parent = context.model().expectShape(member.getContainer());
if (parent.isListShape()) {
writer.writeInline("member_schema");
} else if (parent.isMapShape()) {
writer.writeInline("value_schema");
} else {
writer.writeInline("members[$L]", Integer.toString(memberIndex(parent)));
}
}

protected int memberIndex(Shape parent) {
int index = 0;
for (var m : parent.members()) {
if (m.getMemberName().equals(member.getMemberName())) {
return index;
}
index++;
}
throw new CodegenException("Member not found in container: " + member.getId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private void generateSerializer() {
var memberTarget = context.model().expectShape(shape.getMember().getTarget());
writer.write("""
def $1L(serializer: $2T, schema: $3T, value: $4T) -> None:
member_schema = schema.members["member"]
member_schema = schema.members_by_index[0]
with serializer.begin_list(schema, len(value)) as ls:
for e in value:
${?sparse}
Expand Down Expand Up @@ -79,7 +79,7 @@ private void generateDeserializer() {
def $1L(deserializer: $2T, schema: $3T) -> $4T:
result: $4T = []
${?includeSchema}
member_schema = schema.members["member"]
member_schema = schema.members_by_index[0]
${/includeSchema}
def _read_value(d: $2T):
if d.is_null():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ private void generateSerializer() {
writer.write("""
def $1L(serializer: $2T, schema: $3T, value: $4T) -> None:
with serializer.begin_map(schema, len(value)) as m:
value_schema = schema.members["value"]
value_schema = schema.members_by_index[1]
for k, v in value.items():
${?sparse}
if v is None:
Expand Down Expand Up @@ -80,7 +80,7 @@ private void generateDeserializer() {
writer.write("""
def $1L(deserializer: $2T, schema: $3T) -> $4T:
result: $4T = {}
value_schema = schema.members["value"]
value_schema = schema.members_by_index[1]
def _read_value(k: str, d: $2T):
if d.is_null():
d.read_null()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import software.amazon.smithy.model.shapes.MapShape;
import software.amazon.smithy.model.shapes.MemberShape;
import software.amazon.smithy.model.shapes.Shape;
import software.amazon.smithy.model.shapes.ShapeVisitor;
import software.amazon.smithy.model.shapes.ShortShape;
import software.amazon.smithy.model.shapes.StringShape;
import software.amazon.smithy.model.shapes.StructureShape;
Expand All @@ -38,11 +37,8 @@
* Generates calls to shape serializers for member shapes.
*/
@SmithyInternalApi
public class MemberDeserializerGenerator extends ShapeVisitor.DataShapeVisitor<Void> {
public class MemberDeserializerGenerator extends AbstractMemberGenerator {

private final GenerationContext context;
private final PythonWriter writer;
private final MemberShape member;
private final String deserializerName;

public MemberDeserializerGenerator(
Expand All @@ -51,9 +47,7 @@ public MemberDeserializerGenerator(
MemberShape member,
String deserializerName
) {
this.context = context;
this.writer = writer;
this.member = member;
super(context, writer, member);
this.deserializerName = deserializerName;
}

Expand Down Expand Up @@ -88,17 +82,6 @@ private void writeDeserializer(String shapeTypeName) {
//writer.popState();
}

private void writeSchema() {
var parent = context.model().expectShape(member.getContainer());
if (parent.isListShape()) {
writer.writeInline("member_schema");
} else if (parent.isMapShape()) {
writer.writeInline("value_schema");
} else {
writer.writeInline("${schema:T}.members[${member:S}]");
}
}

@Override
public Void blobShape(BlobShape shape) {
if (shape.hasTrait(StreamingTrait.class)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
package software.amazon.smithy.python.codegen.generators;

import java.util.Locale;
import java.util.logging.Logger;
import software.amazon.smithy.codegen.core.CodegenException;
import software.amazon.smithy.model.shapes.BigDecimalShape;
import software.amazon.smithy.model.shapes.BigIntegerShape;
Expand All @@ -23,7 +22,6 @@
import software.amazon.smithy.model.shapes.MapShape;
import software.amazon.smithy.model.shapes.MemberShape;
import software.amazon.smithy.model.shapes.Shape;
import software.amazon.smithy.model.shapes.ShapeVisitor;
import software.amazon.smithy.model.shapes.ShortShape;
import software.amazon.smithy.model.shapes.StringShape;
import software.amazon.smithy.model.shapes.StructureShape;
Expand All @@ -39,13 +37,8 @@
* Generates calls to shape serializers for member shapes.
*/
@SmithyInternalApi
public final class MemberSerializerGenerator extends ShapeVisitor.DataShapeVisitor<Void> {
public final class MemberSerializerGenerator extends AbstractMemberGenerator {

private static final Logger LOGGER = Logger.getLogger(MemberSerializerGenerator.class.getName());

private final GenerationContext context;
private final PythonWriter writer;
private final MemberShape member;
private final String serializerName;

public MemberSerializerGenerator(
Expand All @@ -54,9 +47,7 @@ public MemberSerializerGenerator(
MemberShape member,
String serializerName
) {
this.context = context;
this.writer = writer;
this.member = member;
super(context, writer, member);
this.serializerName = serializerName;
}

Expand Down Expand Up @@ -95,17 +86,6 @@ private void writeSerializer(String typeName) {

}

private void writeSchema() {
var parent = context.model().expectShape(member.getContainer());
if (parent.isListShape()) {
writer.writeInline("member_schema");
} else if (parent.isMapShape()) {
writer.writeInline("value_schema");
} else {
writer.writeInline("${schema:T}.members[${member:S}]");
}
}

@Override
public Void blobShape(BlobShape shape) {
if (shape.hasTrait(StreamingTrait.class)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,31 +50,23 @@ public void run() {
$1L = $2T(
input = $3T,
output = $4T,
schema = $5T,
input_schema = $6T,
output_schema = $7T,
error_registry = $8T({
$9C
static_schema = $5T,
error_registry = $6T({
$7C
}),
effective_auth_schemes = [
${10C}
${8C}
],
error_schemas = [
${11C}
]
)
""",
opSymbol.getName(),
RuntimeTypes.API_OPERATION,
inSymbol,
outSymbol,
opSymbol.expectProperty(SymbolProperties.SCHEMA),
inSymbol.expectProperty(SymbolProperties.SCHEMA),
outSymbol.expectProperty(SymbolProperties.SCHEMA),
RuntimeTypes.TYPE_REGISTRY,
writer.consumer(this::writeErrorTypeRegistry),
writer.consumer(this::writeAuthSchemes),
writer.consumer(this::writeErrorSchemas));
writer.consumer(this::writeAuthSchemes));
}

private void writeErrorTypeRegistry(PythonWriter writer) {
Expand All @@ -85,13 +77,6 @@ private void writeErrorTypeRegistry(PythonWriter writer) {
}
}

private void writeErrorSchemas(PythonWriter writer) {
for (var error : shape.getErrors()) {
var errSymbol = symbolProvider.toSymbol(model.expectShape(error));
writer.write("$T,", errSymbol.expectProperty(SymbolProperties.SCHEMA));
}
}

private void writeAuthSchemes(PythonWriter writer) {
var authSchemes = ServiceIndex.of(model)
.getEffectiveAuthSchemes(context.settings().service(),
Expand Down
Loading
Loading