Skip to content

Commit 13967c4

Browse files
authored
Rename from ContainerCredentialResolver to ContainerCredentialsResolver (#551)
1 parent 9da8ba6 commit 13967c4

File tree

3 files changed

+43
-39
lines changed

3 files changed

+43
-39
lines changed

packages/smithy-aws-core/src/smithy_aws_core/identity/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
AWSIdentityConfig,
99
AWSIdentityProperties,
1010
)
11-
from .container import ContainerCredentialResolver
11+
from .container import ContainerCredentialsResolver
1212
from .environment import EnvironmentCredentialsResolver
1313
from .imds import IMDSCredentialsResolver
1414
from .static import StaticCredentialsResolver
@@ -17,7 +17,7 @@
1717
"AWSCredentialsIdentity",
1818
"AWSCredentialsResolver",
1919
"AWSIdentityProperties",
20-
"ContainerCredentialResolver",
20+
"ContainerCredentialsResolver",
2121
"EnvironmentCredentialsResolver",
2222
"IMDSCredentialsResolver",
2323
"StaticCredentialsResolver",

packages/smithy-aws-core/src/smithy_aws_core/identity/container.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434

3535
@dataclass
36-
class ContainerCredentialConfig:
36+
class ContainerCredentialsConfig:
3737
"""Configuration for container credential retrieval operations."""
3838

3939
timeout: int = _DEFAULT_TIMEOUT
@@ -43,7 +43,7 @@ class ContainerCredentialConfig:
4343
class ContainerMetadataClient:
4444
"""Client for remote credential retrieval in Container environments like ECS/EKS."""
4545

46-
def __init__(self, http_client: HTTPClient, config: ContainerCredentialConfig):
46+
def __init__(self, http_client: HTTPClient, config: ContainerCredentialsConfig):
4747
self._http_client = http_client
4848
self._config = config
4949

@@ -103,7 +103,7 @@ def _is_allowed_container_metadata_host(self, hostname: str) -> bool:
103103
return hostname in _CONTAINER_METADATA_ALLOWED_HOSTS
104104

105105

106-
class ContainerCredentialResolver(
106+
class ContainerCredentialsResolver(
107107
IdentityResolver[AWSCredentialsIdentity, AWSIdentityProperties]
108108
):
109109
"""Resolves AWS Credentials from container credential sources."""
@@ -116,10 +116,10 @@ class ContainerCredentialResolver(
116116
def __init__(
117117
self,
118118
http_client: HTTPClient,
119-
config: ContainerCredentialConfig | None = None,
119+
config: ContainerCredentialsConfig | None = None,
120120
):
121121
self._http_client = http_client
122-
self._config = config or ContainerCredentialConfig()
122+
self._config = config or ContainerCredentialsConfig()
123123
self._client = ContainerMetadataClient(http_client, self._config)
124124
self._credentials = None
125125

packages/smithy-aws-core/tests/unit/identity/test_container.py

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import pytest
1212
from smithy_aws_core.identity import AWSCredentialsIdentity
1313
from smithy_aws_core.identity.container import (
14-
ContainerCredentialConfig,
15-
ContainerCredentialResolver,
14+
ContainerCredentialsConfig,
15+
ContainerCredentialsResolver,
1616
ContainerMetadataClient,
1717
)
1818
from smithy_core import URI
@@ -32,7 +32,7 @@
3232

3333

3434
def test_config_custom_values():
35-
config = ContainerCredentialConfig(timeout=10, retries=5)
35+
config = ContainerCredentialsConfig(timeout=10, retries=5)
3636
assert config.timeout == 10
3737
assert config.retries == 5
3838

@@ -62,7 +62,7 @@ def _assert_expected_credentials(
6262
async def test_metadata_client_valid_host(host: str):
6363
resp_body = json.dumps(DEFAULT_RESPONSE_DATA)
6464
http_client = mock_http_client_response(200, resp_body.encode("utf-8"))
65-
config = ContainerCredentialConfig()
65+
config = ContainerCredentialsConfig()
6666
client = ContainerMetadataClient(http_client, config)
6767

6868
# Valid Host
@@ -76,7 +76,7 @@ async def test_metadata_client_valid_host(host: str):
7676
async def test_metadata_client_https_host():
7777
resp_body = json.dumps(DEFAULT_RESPONSE_DATA)
7878
http_client = mock_http_client_response(200, resp_body.encode("utf-8"))
79-
config = ContainerCredentialConfig()
79+
config = ContainerCredentialsConfig()
8080
client = ContainerMetadataClient(http_client, config)
8181

8282
# Valid HTTPS Host
@@ -90,7 +90,7 @@ async def test_metadata_client_https_host():
9090
async def test_metadata_client_invalid_host():
9191
resp_body = json.dumps(DEFAULT_RESPONSE_DATA)
9292
http_client = mock_http_client_response(200, resp_body.encode("utf-8"))
93-
config = ContainerCredentialConfig(retries=0)
93+
config = ContainerCredentialsConfig(retries=0)
9494
client = ContainerMetadataClient(http_client, config)
9595

9696
# Invalid Host
@@ -103,7 +103,7 @@ async def test_metadata_client_invalid_host():
103103
@pytest.mark.asyncio
104104
async def test_metadata_client_non_200_response():
105105
http_client = mock_http_client_response(404, b"not found")
106-
config = ContainerCredentialConfig(retries=1)
106+
config = ContainerCredentialsConfig(retries=1)
107107
client = ContainerMetadataClient(http_client, config)
108108

109109
uri = URI(scheme="http", host="169.254.170.2")
@@ -120,7 +120,7 @@ async def test_metadata_client_invalid_json():
120120
http_client = mock_http_client_response(
121121
200, b"<!DOCTYPE html><head><title>proxy</title>"
122122
)
123-
config = ContainerCredentialConfig(retries=1)
123+
config = ContainerCredentialsConfig(retries=1)
124124
client = ContainerMetadataClient(http_client, config)
125125

126126
uri = URI(scheme="http", host="169.254.170.2")
@@ -137,7 +137,7 @@ def _assert_expected_identity(identity: AWSCredentialsIdentity) -> None:
137137
@pytest.mark.asyncio
138138
async def test_metadata_client_retries():
139139
http_client = AsyncMock()
140-
config = ContainerCredentialConfig(retries=2)
140+
config = ContainerCredentialsConfig(retries=2)
141141
client = ContainerMetadataClient(http_client, config)
142142
uri = URI(scheme="http", host="169.254.170.2", path="/task")
143143
http_client.send.side_effect = Exception()
@@ -153,9 +153,9 @@ async def test_resolver_env_relative():
153153
http_client = mock_http_client_response(200, resp_body.encode("utf-8"))
154154

155155
with patch.dict(
156-
os.environ, {ContainerCredentialResolver.ENV_VAR: "/test"}, clear=True
156+
os.environ, {ContainerCredentialsResolver.ENV_VAR: "/test"}, clear=True
157157
):
158-
resolver = ContainerCredentialResolver(http_client)
158+
resolver = ContainerCredentialsResolver(http_client)
159159
identity = await resolver.get_identity(properties={})
160160

161161
# Ensure we derive the correct destination
@@ -177,10 +177,10 @@ async def test_resolver_env_full():
177177

178178
with patch.dict(
179179
os.environ,
180-
{ContainerCredentialResolver.ENV_VAR_FULL: "http://169.254.170.23/full"},
180+
{ContainerCredentialsResolver.ENV_VAR_FULL: "http://169.254.170.23/full"},
181181
clear=True,
182182
):
183-
resolver = ContainerCredentialResolver(http_client)
183+
resolver = ContainerCredentialsResolver(http_client)
184184
identity = await resolver.get_identity(properties={})
185185

186186
# Ensure we derive the correct destination
@@ -203,12 +203,12 @@ async def test_resolver_env_token():
203203
with patch.dict(
204204
os.environ,
205205
{
206-
ContainerCredentialResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
207-
ContainerCredentialResolver.ENV_VAR_AUTH_TOKEN: "Bearer foobar",
206+
ContainerCredentialsResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
207+
ContainerCredentialsResolver.ENV_VAR_AUTH_TOKEN: "Bearer foobar",
208208
},
209209
clear=True,
210210
):
211-
resolver = ContainerCredentialResolver(http_client)
211+
resolver = ContainerCredentialsResolver(http_client)
212212
identity = await resolver.get_identity(properties={})
213213

214214
# Ensure we derive the correct destination and fields
@@ -238,12 +238,12 @@ async def test_resolver_env_token_file(tmp_path: pathlib.Path):
238238
with patch.dict(
239239
os.environ,
240240
{
241-
ContainerCredentialResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
242-
ContainerCredentialResolver.ENV_VAR_AUTH_TOKEN_FILE: str(token_file),
241+
ContainerCredentialsResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
242+
ContainerCredentialsResolver.ENV_VAR_AUTH_TOKEN_FILE: str(token_file),
243243
},
244244
clear=True,
245245
):
246-
resolver = ContainerCredentialResolver(http_client)
246+
resolver = ContainerCredentialsResolver(http_client)
247247
identity = await resolver.get_identity(properties={})
248248

249249
# Ensure we derive the correct destination and fields
@@ -273,12 +273,12 @@ async def test_resolver_env_token_file_invalid_bytes(tmp_path: pathlib.Path):
273273
with patch.dict(
274274
os.environ,
275275
{
276-
ContainerCredentialResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
277-
ContainerCredentialResolver.ENV_VAR_AUTH_TOKEN_FILE: str(token_file),
276+
ContainerCredentialsResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
277+
ContainerCredentialsResolver.ENV_VAR_AUTH_TOKEN_FILE: str(token_file),
278278
},
279279
clear=True,
280280
):
281-
resolver = ContainerCredentialResolver(http_client)
281+
resolver = ContainerCredentialsResolver(http_client)
282282
with pytest.raises(SmithyIdentityError) as e:
283283
await resolver.get_identity(properties={})
284284
assert "Unable to read valid utf-8 bytes from " in str(e.value)
@@ -296,13 +296,13 @@ async def test_resolver_env_token_file_precedence(tmp_path: pathlib.Path):
296296
with patch.dict(
297297
os.environ,
298298
{
299-
ContainerCredentialResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
300-
ContainerCredentialResolver.ENV_VAR_AUTH_TOKEN_FILE: str(token_file),
301-
ContainerCredentialResolver.ENV_VAR_AUTH_TOKEN: "Bearer foobar",
299+
ContainerCredentialsResolver.ENV_VAR_FULL: "http://169.254.170.23/full",
300+
ContainerCredentialsResolver.ENV_VAR_AUTH_TOKEN_FILE: str(token_file),
301+
ContainerCredentialsResolver.ENV_VAR_AUTH_TOKEN: "Bearer foobar",
302302
},
303303
clear=True,
304304
):
305-
resolver = ContainerCredentialResolver(http_client)
305+
resolver = ContainerCredentialsResolver(http_client)
306306
identity = await resolver.get_identity(properties={})
307307

308308
# Ensure we derive the correct destination and fields
@@ -331,9 +331,9 @@ async def test_resolver_valid_credentials_reused():
331331
http_client = mock_http_client_response(200, resp_body.encode("utf-8"))
332332

333333
with patch.dict(
334-
os.environ, {ContainerCredentialResolver.ENV_VAR: "/test"}, clear=True
334+
os.environ, {ContainerCredentialsResolver.ENV_VAR: "/test"}, clear=True
335335
):
336-
resolver = ContainerCredentialResolver(http_client)
336+
resolver = ContainerCredentialsResolver(http_client)
337337
identity_one = await resolver.get_identity(properties={})
338338
identity_two = await resolver.get_identity(properties={})
339339

@@ -352,9 +352,9 @@ async def test_resolver_expired_credentials_refreshed():
352352
http_client = mock_http_client_response(200, resp_body.encode("utf-8"))
353353

354354
with patch.dict(
355-
os.environ, {ContainerCredentialResolver.ENV_VAR: "/test"}, clear=True
355+
os.environ, {ContainerCredentialsResolver.ENV_VAR: "/test"}, clear=True
356356
):
357-
resolver = ContainerCredentialResolver(http_client)
357+
resolver = ContainerCredentialsResolver(http_client)
358358
identity_one = await resolver.get_identity(properties={})
359359
identity_two = await resolver.get_identity(properties={})
360360

@@ -372,7 +372,11 @@ async def test_resolver_missing_env():
372372
resp_body = json.dumps(DEFAULT_RESPONSE_DATA)
373373
http_client = mock_http_client_response(200, resp_body.encode("utf-8"))
374374

375-
with patch.dict(os.environ, {}, clear=True):
376-
resolver = ContainerCredentialResolver(http_client)
375+
with patch.dict(
376+
os.environ,
377+
{},
378+
clear=True,
379+
):
380+
resolver = ContainerCredentialsResolver(http_client)
377381
with pytest.raises(SmithyIdentityError):
378382
await resolver.get_identity(properties={})

0 commit comments

Comments
 (0)