Skip to content

Commit dda850b

Browse files
Update endpoint resolver generation
1 parent c93c717 commit dda850b

File tree

10 files changed

+199
-230
lines changed

10 files changed

+199
-230
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
package software.amazon.smithy.python.codegen.test;
6+
7+
import java.nio.file.Path;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.io.TempDir;
10+
import software.amazon.smithy.build.FileManifest;
11+
import software.amazon.smithy.build.PluginContext;
12+
import software.amazon.smithy.model.Model;
13+
import software.amazon.smithy.model.node.ObjectNode;
14+
import software.amazon.smithy.python.codegen.PythonClientCodegenPlugin;
15+
16+
/**
17+
* Simple test that executes the Python client codegen plugin for an AWS-like service.
18+
*/
19+
public class AwsCodegenTest {
20+
21+
@Test
22+
public void testCodegen(@TempDir Path tempDir) {
23+
PythonClientCodegenPlugin plugin = new PythonClientCodegenPlugin();
24+
Model model = Model.assembler(AwsCodegenTest.class.getClassLoader())
25+
.discoverModels(AwsCodegenTest.class.getClassLoader())
26+
.assemble()
27+
.unwrap();
28+
PluginContext context = PluginContext.builder()
29+
.fileManifest(FileManifest.create(tempDir))
30+
.settings(
31+
ObjectNode.builder()
32+
.withMember("service", "example.aws#RestJsonService")
33+
.withMember("module", "restjson")
34+
.withMember("moduleVersion", "0.0.1")
35+
.build())
36+
.model(model)
37+
.build();
38+
plugin.execute(context);
39+
}
40+
41+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
$version: "2.0"
2+
3+
namespace example.aws
4+
5+
use aws.protocols#restJson1
6+
use aws.api#service
7+
8+
/// A test service that renders a restJson1 service with AWS traits
9+
@restJson1(
10+
http: ["h2", "http/1.1"]
11+
eventStreamHttp: ["h2"]
12+
)
13+
@service(
14+
sdkId: "REST JSON",
15+
endpointPrefix: "rest-json-1"
16+
)
17+
@title("AWS REST JSON Service")
18+
@paginated(inputToken: "nextToken", outputToken: "nextToken", pageSize: "pageSize")
19+
@httpApiKeyAuth(name: "weather-auth", in: "header")
20+
service RestJsonService {
21+
version: "2006-03-01"
22+
operations: [
23+
BasicOperation
24+
]
25+
}
26+
27+
@http(code: 200, method: "POST", uri: "/basic-operation")
28+
operation BasicOperation {
29+
input := {
30+
message: String
31+
}
32+
output := {
33+
message: String
34+
}
35+
}
36+
37+
@http(code: 200, method: "POST", uri: "/input-stream")
38+
operation InputStream {
39+
input := {
40+
stream: EventStream
41+
}
42+
}
43+
44+
@http(code: 200, method: "POST", uri: "/output-stream")
45+
operation OutputStream {
46+
output := {
47+
stream: EventStream
48+
}
49+
}
50+
51+
@http(code: 200, method: "POST", uri: "/duplex-stream")
52+
operation DuplexStream {
53+
input := {
54+
stream: EventStream
55+
}
56+
output := {
57+
stream: EventStream
58+
}
59+
}
60+
61+
62+
@streaming
63+
union EventStream {
64+
message: MessageEvent
65+
}
66+
67+
structure MessageEvent {
68+
message: String
69+
}
70+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
main.smithy

codegen/aws/core/src/main/java/software/amazon/smithy/python/aws/codegen/AwsStandardRegionalEndpointsIntegration.java

Lines changed: 5 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@
88

99
import java.util.List;
1010
import software.amazon.smithy.aws.traits.ServiceTrait;
11-
import software.amazon.smithy.python.codegen.CodegenUtils;
1211
import software.amazon.smithy.python.codegen.GenerationContext;
1312
import software.amazon.smithy.python.codegen.integrations.PythonIntegration;
1413
import software.amazon.smithy.python.codegen.integrations.RuntimeClientPlugin;
15-
import software.amazon.smithy.python.codegen.sections.EndpointParametersSection;
16-
import software.amazon.smithy.python.codegen.sections.EndpointResolverSection;
1714
import software.amazon.smithy.python.codegen.sections.InitDefaultEndpointResolverSection;
1815
import software.amazon.smithy.python.codegen.writer.PythonWriter;
1916
import software.amazon.smithy.utils.CodeInterceptor;
@@ -37,57 +34,9 @@ public List<? extends CodeInterceptor<? extends CodeSection, PythonWriter>> inte
3734
GenerationContext context
3835
) {
3936
return List.of(
40-
new RegionalEndpointParametersInterceptor(context),
41-
new RegionalEndpointResolverInterceptor(context),
4237
new RegionalInitEndpointResolverInterceptor(context));
4338
}
4439

45-
private static final class RegionalEndpointParametersInterceptor
46-
implements CodeInterceptor<EndpointParametersSection, PythonWriter> {
47-
48-
private final GenerationContext context;
49-
50-
public RegionalEndpointParametersInterceptor(GenerationContext context) {
51-
this.context = context;
52-
}
53-
54-
@Override
55-
public Class<EndpointParametersSection> sectionType() {
56-
return EndpointParametersSection.class;
57-
}
58-
59-
@Override
60-
public void write(PythonWriter writer, String previousText, EndpointParametersSection section) {
61-
var params = CodegenUtils.getEndpointParametersSymbol(context.settings());
62-
63-
writer.write("from smithy_aws_core.endpoints.standard_regional import RegionalEndpointParameters");
64-
writer.write("$L = RegionalEndpointParameters", params.getName());
65-
}
66-
}
67-
68-
private static final class RegionalEndpointResolverInterceptor
69-
implements CodeInterceptor<EndpointResolverSection, PythonWriter> {
70-
71-
private final GenerationContext context;
72-
73-
public RegionalEndpointResolverInterceptor(GenerationContext context) {
74-
this.context = context;
75-
}
76-
77-
@Override
78-
public Class<EndpointResolverSection> sectionType() {
79-
return EndpointResolverSection.class;
80-
}
81-
82-
@Override
83-
public void write(PythonWriter writer, String previousText, EndpointResolverSection section) {
84-
var resolver = CodegenUtils.getEndpointResolverSymbol(context.settings());
85-
86-
writer.write("from smithy_aws_core.endpoints.standard_regional import StandardRegionalEndpointsResolver");
87-
writer.write("$L = StandardRegionalEndpointsResolver", resolver.getName());
88-
}
89-
}
90-
9140
private static final class RegionalInitEndpointResolverInterceptor
9241
implements CodeInterceptor<InitDefaultEndpointResolverSection, PythonWriter> {
9342

@@ -104,16 +53,17 @@ public Class<InitDefaultEndpointResolverSection> sectionType() {
10453

10554
@Override
10655
public void write(PythonWriter writer, String previousText, InitDefaultEndpointResolverSection section) {
107-
var resolver = CodegenUtils.getEndpointResolverSymbol(context.settings());
108-
10956
String endpointPrefix = context.settings()
11057
.service(context.model())
11158
.getTrait(ServiceTrait.class)
11259
.map(ServiceTrait::getEndpointPrefix)
11360
.orElse(context.settings().service().getName());
11461

115-
writer.write("self.endpoint_resolver = endpoint_resolver or $T(endpoint_prefix=$S)",
116-
resolver,
62+
writer.addImport("smithy_aws_core.endpoints.standard_regional",
63+
"StandardRegionalEndpointsResolver",
64+
"_RegionalResolver");
65+
writer.write(
66+
"self.endpoint_resolver = endpoint_resolver or _RegionalResolver(endpoint_prefix=$S)",
11767
endpointPrefix);
11868

11969
}

0 commit comments

Comments
 (0)