Skip to content

Commit 36f41f8

Browse files
committed
Add support for endpoint_url, user_agent_extra, and sdk_ua_app_id
1 parent 3cbe664 commit 36f41f8

5 files changed

Lines changed: 90 additions & 18 deletions

File tree

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,30 @@ private AwsConfiguration() {}
6060
.build())
6161
.defaultValue("RetryStrategyOptions(retry_mode=\"standard\")")
6262
.build();
63+
64+
public static final ConfigProperty USER_AGENT_EXTRA = ConfigProperty.builder()
65+
.name("user_agent_extra")
66+
.type(Symbol.builder().name("str").build())
67+
.documentation("Additional suffix to be appended to the User-Agent header.")
68+
.nullable(false)
69+
.useDescriptor(true)
70+
.defaultValue("''")
71+
.build();
72+
73+
public static final ConfigProperty SDK_UA_APP_ID = ConfigProperty.builder()
74+
.name("sdk_ua_app_id")
75+
.type(Symbol.builder().name("str").build())
76+
.documentation("A unique and opaque application ID that is appended to the User-Agent header.")
77+
.nullable(false)
78+
.useDescriptor(true)
79+
.defaultValue("''")
80+
.build();
81+
82+
public static final ConfigProperty ENDPOINT_URL = ConfigProperty.builder()
83+
.name("endpoint_url")
84+
.type(Symbol.builder().name("str").build())
85+
.documentation("The endpoint URL to use for requests. If not set, the standard endpoint for the service and region will be used.")
86+
.nullable(true)
87+
.useDescriptor(true)
88+
.build();
6389
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package software.amazon.smithy.python.aws.codegen;
66

7+
import static software.amazon.smithy.python.aws.codegen.AwsConfiguration.ENDPOINT_URL;
78
import static software.amazon.smithy.python.aws.codegen.AwsConfiguration.REGION;
89

910
import java.util.List;
@@ -23,6 +24,7 @@ public List<RuntimeClientPlugin> getClientPlugins(GenerationContext context) {
2324
return List.of(
2425
RuntimeClientPlugin.builder()
2526
.addConfigProperty(REGION)
27+
.addConfigProperty(ENDPOINT_URL)
2628
.build());
2729
} else {
2830
return List.of();

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

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
import software.amazon.smithy.codegen.core.Symbol;
1010
import software.amazon.smithy.codegen.core.SymbolReference;
1111
import software.amazon.smithy.python.codegen.CodegenUtils;
12-
import software.amazon.smithy.python.codegen.ConfigProperty;
1312
import software.amazon.smithy.python.codegen.GenerationContext;
1413
import software.amazon.smithy.python.codegen.integrations.PythonIntegration;
1514
import software.amazon.smithy.python.codegen.integrations.RuntimeClientPlugin;
1615
import software.amazon.smithy.utils.SmithyInternalApi;
1716

17+
import static software.amazon.smithy.python.aws.codegen.AwsConfiguration.SDK_UA_APP_ID;
18+
import static software.amazon.smithy.python.aws.codegen.AwsConfiguration.USER_AGENT_EXTRA;
19+
1820
/**
1921
* Adds a runtime plugin to set user agent.
2022
*/
@@ -36,21 +38,6 @@ def aws_user_agent_plugin(config: $1T):
3638
@Override
3739
public List<RuntimeClientPlugin> getClientPlugins(GenerationContext context) {
3840
if (context.applicationProtocol().isHttpProtocol()) {
39-
final ConfigProperty userAgentExtra = ConfigProperty.builder()
40-
.name("user_agent_extra")
41-
.documentation("Additional suffix to be added to the User-Agent header.")
42-
.type(Symbol.builder().name("str").build())
43-
.nullable(true)
44-
.build();
45-
46-
final ConfigProperty uaAppId = ConfigProperty.builder()
47-
.name("sdk_ua_app_id")
48-
.documentation(
49-
"A unique and opaque application ID that is appended to the User-Agent header.")
50-
.type(Symbol.builder().name("str").build())
51-
.nullable(true)
52-
.build();
53-
5441
final String user_agent_plugin_file = "user_agent";
5542

5643
final String moduleName = context.settings().moduleName();
@@ -86,8 +73,8 @@ public List<RuntimeClientPlugin> getClientPlugins(GenerationContext context) {
8673

8774
return List.of(
8875
RuntimeClientPlugin.builder()
89-
.addConfigProperty(userAgentExtra)
90-
.addConfigProperty(uaAppId)
76+
.addConfigProperty(USER_AGENT_EXTRA)
77+
.addConfigProperty(SDK_UA_APP_ID)
9178
.pythonPlugin(userAgentPlugin)
9279
.writeAdditionalFiles((c) -> {
9380
String filename = "src/%s/%s.py".formatted(moduleName, user_agent_plugin_file);

codegen/core/src/main/java/software/amazon/smithy/python/codegen/generators/ConfigGenerator.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,22 @@ public final class ConfigGenerator implements Runnable {
9797
.build())
9898
.build())
9999
.documentation("The retry strategy or options for configuring retry behavior. Can be either a configured RetryStrategy or RetryStrategyOptions to create one.")
100+
.build(),
101+
ConfigProperty.builder()
102+
.name("user_agent_extra")
103+
.type(Symbol.builder().name("str").build())
104+
.documentation("Additional suffix to be appended to the User-Agent header.")
105+
.build(),
106+
ConfigProperty.builder()
107+
.name("sdk_ua_app_id")
108+
.type(Symbol.builder().name("str").build())
109+
.documentation("A unique and opaque application ID that is appended to the User-Agent header.")
110+
.build(),
111+
ConfigProperty.builder()
112+
.name("endpoint_url")
113+
.type(Symbol.builder().name("str").build())
114+
.documentation("The endpoint URL to use for requests. If not set, the standard endpoint for the service and region will be used.")
115+
.nullable(true)
100116
.build());
101117

102118
// This list contains any properties that must be added to any http-based

packages/smithy-core/tests/unit/config/test_property.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,47 @@ def test_different_properties_resolve_independently(self) -> None:
8787
assert region == "us-west-2"
8888
assert retry_mode == "adaptive"
8989

90+
def test_unresolved_ua_extra_defaults_to_empty_string(self) -> None:
91+
class ConfigWithEmptyDefault:
92+
user_agent_extra = ConfigProperty(
93+
"user_agent_extra",
94+
default_value="",
95+
)
96+
97+
def __init__(self, resolver: ConfigResolver) -> None:
98+
self._resolver = resolver
99+
100+
source = StubSource("environment", {})
101+
resolver = ConfigResolver(sources=[source])
102+
config = ConfigWithEmptyDefault(resolver)
103+
104+
result = config.user_agent_extra
105+
106+
assert result == ""
107+
assert getattr(config, "_cache_user_agent_extra") == (
108+
"",
109+
SimpleSource("default"),
110+
)
111+
112+
def test_endpoint_url_defaults_to_none(self) -> None:
113+
class ConfigWithNoDefault:
114+
endpoint_url = ConfigProperty("endpoint_url")
115+
116+
def __init__(self, resolver: ConfigResolver) -> None:
117+
self._resolver = resolver
118+
119+
source = StubSource("environment", {})
120+
resolver = ConfigResolver(sources=[source])
121+
config = ConfigWithNoDefault(resolver)
122+
123+
result = config.endpoint_url
124+
125+
assert result is None
126+
assert getattr(config, "_cache_endpoint_url") == (
127+
None,
128+
SimpleSource("default"),
129+
)
130+
90131

91132
class TestConfigPropertyValidation:
92133
"""Test suite for ConfigProperty validation behavior."""

0 commit comments

Comments
 (0)