Skip to content

Commit fb0fbdb

Browse files
authored
Refactor core identity components to prevent circular imports (#538)
1 parent d0138f9 commit fb0fbdb

File tree

7 files changed

+80
-53
lines changed

7 files changed

+80
-53
lines changed
Lines changed: 20 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,26 @@
11
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
3-
from dataclasses import dataclass
4-
from datetime import datetime
5-
from typing import Protocol, TypedDict
6-
7-
from smithy_core.aio.interfaces.identity import IdentityResolver
8-
from smithy_core.interfaces.identity import Identity
93
from smithy_core.types import PropertyKey
104

11-
12-
@dataclass(kw_only=True)
13-
class AWSCredentialsIdentity(Identity):
14-
access_key_id: str
15-
"""A unique identifier for an AWS user or role."""
16-
17-
secret_access_key: str
18-
"""A secret key used in conjunction with the access key ID to authenticate
19-
programmatic access to AWS services."""
20-
21-
session_token: str | None = None
22-
"""A temporary token used to specify the current session for the supplied
23-
credentials."""
24-
25-
expiration: datetime | None = None
26-
"""The expiration time of the identity.
27-
28-
If time zone is provided, it is updated to UTC. The value must always be in UTC.
29-
"""
30-
31-
account_id: str | None = None
32-
"""The AWS account's ID."""
33-
34-
35-
class AWSIdentityProperties(TypedDict, total=False):
36-
access_key_id: str | None
37-
secret_access_key: str | None
38-
session_token: str | None
39-
40-
41-
type AWSCredentialsResolver = IdentityResolver[
42-
AWSCredentialsIdentity, AWSIdentityProperties
43-
]
44-
45-
46-
class AWSIdentityConfig(Protocol):
47-
aws_access_key_id: str | None
48-
aws_secret_access_key: str | None
49-
aws_session_token: str | None = None
50-
5+
from .components import (
6+
AWSCredentialsIdentity,
7+
AWSCredentialsResolver,
8+
AWSIdentityConfig,
9+
AWSIdentityProperties,
10+
)
11+
from .container import ContainerCredentialResolver
12+
from .environment import EnvironmentCredentialsResolver
13+
from .imds import IMDSCredentialsResolver
14+
from .static import StaticCredentialsResolver
15+
16+
__all__ = (
17+
"AWSCredentialsIdentity",
18+
"AWSCredentialsResolver",
19+
"AWSIdentityProperties",
20+
"ContainerCredentialResolver",
21+
"EnvironmentCredentialsResolver",
22+
"IMDSCredentialsResolver",
23+
"StaticCredentialsResolver",
24+
)
5125

5226
AWS_IDENTITY_CONFIG = PropertyKey(key="config", value_type=AWSIdentityConfig)

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
from smithy_core.aio.identity import ChainedIdentityResolver
44
from smithy_http.aio.interfaces import HTTPClient
55

6-
from smithy_aws_core.identity import AWSCredentialsIdentity
7-
8-
from . import AWSCredentialsResolver, AWSIdentityProperties
6+
from .components import (
7+
AWSCredentialsIdentity,
8+
AWSCredentialsResolver,
9+
AWSIdentityProperties,
10+
)
911
from .environment import EnvironmentCredentialsResolver
1012
from .imds import IMDSCredentialsResolver
1113
from .static import StaticCredentialsResolver
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
from dataclasses import dataclass
4+
from datetime import datetime
5+
from typing import Protocol, TypedDict
6+
7+
from smithy_core.aio.interfaces.identity import IdentityResolver
8+
from smithy_core.interfaces.identity import Identity
9+
10+
11+
@dataclass(kw_only=True)
12+
class AWSCredentialsIdentity(Identity):
13+
access_key_id: str
14+
"""A unique identifier for an AWS user or role."""
15+
16+
secret_access_key: str
17+
"""A secret key used in conjunction with the access key ID to authenticate
18+
programmatic access to AWS services."""
19+
20+
session_token: str | None = None
21+
"""A temporary token used to specify the current session for the supplied
22+
credentials."""
23+
24+
expiration: datetime | None = None
25+
"""The expiration time of the identity.
26+
27+
If time zone is provided, it is updated to UTC. The value must always be in UTC.
28+
"""
29+
30+
account_id: str | None = None
31+
"""The AWS account's ID."""
32+
33+
34+
class AWSIdentityProperties(TypedDict, total=False):
35+
access_key_id: str | None
36+
secret_access_key: str | None
37+
session_token: str | None
38+
39+
40+
type AWSCredentialsResolver = IdentityResolver[
41+
AWSCredentialsIdentity, AWSIdentityProperties
42+
]
43+
44+
45+
class AWSIdentityConfig(Protocol):
46+
aws_access_key_id: str | None
47+
aws_secret_access_key: str | None
48+
aws_session_token: str | None = None

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
from smithy_http.aio import HTTPRequest
1616
from smithy_http.aio.interfaces import HTTPClient, HTTPResponse
1717

18-
from smithy_aws_core.identity import AWSCredentialsIdentity, AWSIdentityProperties
18+
from smithy_aws_core.identity.components import (
19+
AWSCredentialsIdentity,
20+
AWSIdentityProperties,
21+
)
1922

2023
_CONTAINER_METADATA_IP = "169.254.170.2"
2124
_CONTAINER_METADATA_ALLOWED_HOSTS = {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from smithy_core.aio.interfaces.identity import IdentityResolver
66
from smithy_core.exceptions import SmithyIdentityError
77

8-
from . import AWSCredentialsIdentity, AWSIdentityProperties
8+
from .components import AWSCredentialsIdentity, AWSIdentityProperties
99

1010

1111
class EnvironmentCredentialsResolver(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from smithy_http.aio.interfaces import HTTPClient
1818

1919
from .. import __version__
20-
from ..identity import AWSCredentialsIdentity, AWSIdentityProperties
20+
from .components import AWSCredentialsIdentity, AWSIdentityProperties
2121

2222
_USER_AGENT_FIELD = Field(
2323
name="User-Agent",

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from smithy_core.aio.interfaces.identity import IdentityResolver
44
from smithy_core.exceptions import SmithyIdentityError
55

6-
from smithy_aws_core.identity import AWSCredentialsIdentity, AWSIdentityProperties
6+
from .components import AWSCredentialsIdentity, AWSIdentityProperties
77

88

99
class StaticCredentialsResolver(

0 commit comments

Comments
 (0)