Skip to content

Commit f673368

Browse files
authored
chore(typing): move backwards compat types to shared types (aws-powertools#3092)
1 parent 86619e5 commit f673368

File tree

15 files changed

+70
-68
lines changed

15 files changed

+70
-68
lines changed

aws_lambda_powertools/event_handler/middlewares/base.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
from abc import ABC, abstractmethod
22
from typing import Generic
33

4-
from typing_extensions import Protocol
5-
64
from aws_lambda_powertools.event_handler.api_gateway import Response
75
from aws_lambda_powertools.event_handler.types import EventHandlerInstance
6+
from aws_lambda_powertools.shared.types import Protocol
87

98

109
class NextMiddleware(Protocol):

aws_lambda_powertools/logging/types.py

+2-17
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
11
from __future__ import annotations
22

3-
import sys
4-
5-
if sys.version_info >= (3, 11):
6-
from typing import NotRequired
7-
else:
8-
from typing_extensions import NotRequired
9-
10-
if sys.version_info >= (3, 8):
11-
from typing import TypedDict
12-
else:
13-
from typing_extensions import TypedDict
14-
15-
if sys.version_info >= (3, 10):
16-
from typing import TypeAlias
17-
else:
18-
from typing_extensions import TypeAlias
19-
203
from typing import Any, Dict, List, Union
214

5+
from aws_lambda_powertools.shared.types import NotRequired, TypeAlias, TypedDict
6+
227
LogRecord: TypeAlias = Union[Dict[str, Any], "PowertoolsLogRecord"]
238

249

aws_lambda_powertools/metrics/functions.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
from __future__ import annotations
22

3-
from typing import List
4-
53
from aws_lambda_powertools.metrics.provider.cloudwatch_emf.exceptions import (
64
MetricResolutionError,
75
MetricUnitError,
86
)
97
from aws_lambda_powertools.metrics.provider.cloudwatch_emf.metric_properties import MetricResolution, MetricUnit
8+
from aws_lambda_powertools.shared.types import List
109

1110

1211
def extract_cloudwatch_metric_resolution_value(metric_resolutions: List, resolution: int | MetricResolution) -> int:

aws_lambda_powertools/metrics/provider/cloudwatch_emf/types.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
from typing import List
2-
3-
from typing_extensions import NotRequired, TypedDict
1+
from aws_lambda_powertools.shared.types import List, NotRequired, TypedDict
42

53

64
class CloudWatchEMFMetric(TypedDict):

aws_lambda_powertools/metrics/types.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing_extensions import NotRequired, TypedDict
1+
from aws_lambda_powertools.shared.types import NotRequired, TypedDict
22

33

44
class MetricNameUnitResolution(TypedDict):

aws_lambda_powertools/shared/cookies.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from datetime import datetime
22
from enum import Enum
33
from io import StringIO
4-
from typing import List, Optional
4+
from typing import Optional
5+
6+
from aws_lambda_powertools.shared.types import List
57

68

79
class SameSite(Enum):

aws_lambda_powertools/shared/types.py

+18-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
import sys
22
from typing import Any, Callable, Dict, List, TypeVar, Union
33

4-
AnyCallableT = TypeVar("AnyCallableT", bound=Callable[..., Any]) # noqa: VNE001
5-
# JSON primitives only, mypy doesn't support recursive tho
6-
JSONType = Union[str, int, float, bool, None, Dict[str, Any], List[Any]]
4+
if sys.version_info >= (3, 8):
5+
from typing import Literal, Protocol, TypedDict
6+
else:
7+
from typing_extensions import Literal, Protocol, TypedDict
78

89

9-
if sys.version_info >= (3, 8):
10-
from typing import Protocol
10+
if sys.version_info >= (3, 11):
11+
from typing import NotRequired
1112
else:
12-
from typing_extensions import Protocol
13+
from typing_extensions import NotRequired
14+
15+
16+
if sys.version_info >= (3, 10):
17+
from typing import TypeAlias
18+
else:
19+
from typing_extensions import TypeAlias
20+
21+
AnyCallableT = TypeVar("AnyCallableT", bound=Callable[..., Any]) # noqa: VNE001
22+
# JSON primitives only, mypy doesn't support recursive tho
23+
JSONType = Union[str, int, float, bool, None, Dict[str, Any], List[Any]]
1324

14-
__all__ = ["Protocol"]
25+
__all__ = ["Protocol", "TypedDict", "Literal", "NotRequired", "TypeAlias"]

aws_lambda_powertools/utilities/batch/types.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
#
2-
# type specifics
3-
#
41
import sys
5-
from typing import List, Optional, Type, Union
2+
from typing import Optional, Type, Union
63

7-
from typing_extensions import TypedDict
4+
from aws_lambda_powertools.shared.types import List, TypedDict
85

96
has_pydantic = "pydantic" in sys.modules
107

aws_lambda_powertools/utilities/data_classes/secrets_manager_event.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
from typing_extensions import Literal
2-
1+
from aws_lambda_powertools.shared.types import Literal
32
from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
43

54

aws_lambda_powertools/utilities/parameters/ssm.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88

99
import boto3
1010
from botocore.config import Config
11-
from typing_extensions import Literal
1211

1312
from aws_lambda_powertools.shared import constants
1413
from aws_lambda_powertools.shared.functions import (
1514
resolve_max_age,
1615
resolve_truthy_env_var_choice,
1716
slice_dictionary,
1817
)
18+
from aws_lambda_powertools.shared.types import Literal
1919

2020
from .base import DEFAULT_MAX_AGE_SECS, DEFAULT_PROVIDERS, BaseProvider, transform_value
2121
from .exceptions import GetParameterError
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from typing_extensions import Literal
1+
from aws_lambda_powertools.shared.types import Literal
22

33
TransformOptions = Literal["json", "binary", "auto", None]

aws_lambda_powertools/utilities/parser/models/cloudwatch.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import logging
44
import zlib
55
from datetime import datetime
6-
from typing import List, Type, Union
6+
from typing import Type, Union
77

88
from pydantic import BaseModel, Field, validator
99

10+
from aws_lambda_powertools.shared.types import List
11+
1012
logger = logging.getLogger(__name__)
1113

1214

aws_lambda_powertools/utilities/parser/types.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
"""Generics and other shared types used across parser"""
22

3-
import sys
43
from typing import Any, Dict, Type, TypeVar, Union
54

65
from pydantic import BaseModel, Json
76

8-
# We only need typing_extensions for python versions <3.8
9-
if sys.version_info >= (3, 8):
10-
from typing import Literal
11-
else:
12-
from typing_extensions import Literal
7+
from aws_lambda_powertools.shared.types import Literal
138

149
Model = TypeVar("Model", bound=BaseModel)
1510
EnvelopeModel = TypeVar("EnvelopeModel")

aws_lambda_powertools/utilities/streaming/s3_object.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
overload,
1616
)
1717

18-
from typing_extensions import Literal
19-
18+
from aws_lambda_powertools.shared.types import Literal
2019
from aws_lambda_powertools.utilities.streaming._s3_seekable_io import _S3SeekableIO
2120
from aws_lambda_powertools.utilities.streaming.transformations import (
2221
CsvTransform,

ruff.toml

+33-17
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,59 @@
11
# Enable rules.
22
select = [
3-
"A", # flake8-builtins - https://beta.ruff.rs/docs/rules/#flake8-builtins-a
4-
"B", # flake8-bugbear-b - https://beta.ruff.rs/docs/rules/#flake8-bugbear-b
5-
"C4", # flake8-comprehensions - https://beta.ruff.rs/docs/rules/#flake8-comprehensions-c4
3+
"A", # flake8-builtins - https://beta.ruff.rs/docs/rules/#flake8-builtins-a
4+
"B", # flake8-bugbear-b - https://beta.ruff.rs/docs/rules/#flake8-bugbear-b
5+
"C4", # flake8-comprehensions - https://beta.ruff.rs/docs/rules/#flake8-comprehensions-c4
66
"C90", # mccabe - https://beta.ruff.rs/docs/rules/#mccabe-c90
77
"COM", # flak8-commas - https://beta.ruff.rs/docs/rules/#flake8-commas-com
88
#"D", # pydocstyle - not enabled temporarily
9-
"E", # pycodestyle error - https://beta.ruff.rs/docs/rules/#error-e
9+
"E", # pycodestyle error - https://beta.ruff.rs/docs/rules/#error-e
1010
"ERA", # flake8-eradicate - https://beta.ruff.rs/docs/rules/#eradicate-era
11-
"FA", # flake8-future-annotations - https://beta.ruff.rs/docs/rules/#flake8-future-annotations-fa
11+
"FA", # flake8-future-annotations - https://beta.ruff.rs/docs/rules/#flake8-future-annotations-fa
1212
"FIX", # flake8-fixme - https://beta.ruff.rs/docs/rules/#flake8-fixme-fix
13-
"F", # pyflakes - https://beta.ruff.rs/docs/rules/#pyflakes-f
14-
"I", # isort - https://beta.ruff.rs/docs/rules/#isort-i
13+
"F", # pyflakes - https://beta.ruff.rs/docs/rules/#pyflakes-f
14+
"I", # isort - https://beta.ruff.rs/docs/rules/#isort-i
1515
"ICN", # flake8-import-conventions - https://beta.ruff.rs/docs/rules/#flake8-import-conventions-icn
1616
"ISC", # flake8-implicit-str-concat - https://beta.ruff.rs/docs/rules/#flake8-implicit-str-concat-isc
1717
"PLE", # pylint error - https://beta.ruff.rs/docs/rules/#error-ple
1818
"PLC", # pylint convention - https://beta.ruff.rs/docs/rules/#convention-plc
1919
"PLR", # pylint refactoring - https://beta.ruff.rs/docs/rules/#refactor-plr
2020
"PLW", # pylint warning - https://beta.ruff.rs/docs/rules/#warning-plw
21-
"PL", # pylint - https://beta.ruff.rs/docs/rules/#pylint-pl
21+
"PL", # pylint - https://beta.ruff.rs/docs/rules/#pylint-pl
2222
"PYI", # flake8-pyi - https://beta.ruff.rs/docs/rules/#flake8-pyi-pyi
23-
"Q", # flake8-quotes - https://beta.ruff.rs/docs/rules/#flake8-quotes-q
23+
"Q", # flake8-quotes - https://beta.ruff.rs/docs/rules/#flake8-quotes-q
2424
"PTH", # flake8-use-pathlib - https://beta.ruff.rs/docs/rules/#flake8-use-pathlib-pth
2525
"T10", # flake8-debugger https://beta.ruff.rs/docs/rules/#flake8-debugger-t10
26-
"TD", # flake8-todo - https://beta.ruff.rs/docs/rules/#flake8-todos-td
27-
"W" # pycodestyle warning - https://beta.ruff.rs/docs/rules/#warning-w
26+
"TD", # flake8-todo - https://beta.ruff.rs/docs/rules/#flake8-todos-td
27+
"W", # pycodestyle warning - https://beta.ruff.rs/docs/rules/#warning-w
2828
]
2929

3030
# Ignore specific rules
3131
ignore = [
32-
"W291", # https://beta.ruff.rs/docs/rules/trailing-whitespace/
32+
"W291", # https://beta.ruff.rs/docs/rules/trailing-whitespace/
3333
"PLR0913", # https://beta.ruff.rs/docs/rules/too-many-arguments/
3434
"PLR2004", #https://beta.ruff.rs/docs/rules/magic-value-comparison/
3535
"PLW0603", #https://beta.ruff.rs/docs/rules/global-statement/
36-
"B904", # raise-without-from-inside-except - disabled temporarily
36+
"B904", # raise-without-from-inside-except - disabled temporarily
3737
"PLC1901", # Compare-to-empty-string - disabled temporarily
3838
"PYI024",
39-
"FA100" # Enable this rule when drop support to Python 3.7
40-
]
39+
"FA100", # Enable this rule when drop support to Python 3.7
40+
]
4141

4242
# Exclude files and directories
43-
exclude = ["docs", ".eggs", "setup.py", "example", ".aws-sam", ".git", "dist", ".md", ".yaml", "example/samconfig.toml", ".txt", ".ini"]
43+
exclude = [
44+
"docs",
45+
".eggs",
46+
"setup.py",
47+
"example",
48+
".aws-sam",
49+
".git",
50+
"dist",
51+
".md",
52+
".yaml",
53+
"example/samconfig.toml",
54+
".txt",
55+
".ini",
56+
]
4457

4558
# Maximum line length
4659
line-length = 120
@@ -50,7 +63,10 @@ fix = true
5063
fixable = ["I", "COM812", "W"]
5164

5265
# See: https://github.com/astral-sh/ruff/issues/128
53-
typing-modules = ["aws_lambda_powertools.utilities.parser.types"]
66+
typing-modules = [
67+
"aws_lambda_powertools.utilities.parser.types",
68+
"aws_lambda_powertools.shared.types",
69+
]
5470

5571
[mccabe]
5672
# Maximum cyclomatic complexity

0 commit comments

Comments
 (0)