Skip to content

Commit c79b963

Browse files
committed
refactor(streaming): add from __future__ import annotations
and update code according to ruff rules TCH, UP006, UP007, UP037 and FA100.
1 parent 0fb2fc0 commit c79b963

File tree

2 files changed

+31
-54
lines changed

2 files changed

+31
-54
lines changed

aws_lambda_powertools/utilities/streaming/_s3_seekable_io.py

+14-23
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,8 @@
1+
from __future__ import annotations
2+
13
import io
24
import logging
3-
from typing import (
4-
IO,
5-
TYPE_CHECKING,
6-
Any,
7-
Iterable,
8-
List,
9-
Optional,
10-
Sequence,
11-
TypeVar,
12-
Union,
13-
cast,
14-
)
5+
from typing import IO, TYPE_CHECKING, Any, Iterable, Sequence, TypeVar, cast
156

167
import boto3
178

@@ -51,8 +42,8 @@ def __init__(
5142
self,
5243
bucket: str,
5344
key: str,
54-
version_id: Optional[str] = None,
55-
boto3_client: Optional["S3Client"] = None,
45+
version_id: str | None = None,
46+
boto3_client: S3Client | None = None,
5647
**sdk_options,
5748
):
5849
self.bucket = bucket
@@ -65,10 +56,10 @@ def __init__(
6556
self._closed: bool = False
6657

6758
# Caches the size of the object
68-
self._size: Optional[int] = None
59+
self._size: int | None = None
6960

7061
self._s3_client = boto3_client
71-
self._raw_stream: Optional[PowertoolsStreamingBody] = None
62+
self._raw_stream: PowertoolsStreamingBody | None = None
7263

7364
self._sdk_options = sdk_options
7465
self._sdk_options["Bucket"] = bucket
@@ -78,7 +69,7 @@ def __init__(
7869
self._sdk_options["VersionId"] = version_id
7970

8071
@property
81-
def s3_client(self) -> "S3Client":
72+
def s3_client(self) -> S3Client:
8273
"""
8374
Returns a boto3 S3 client
8475
"""
@@ -152,19 +143,19 @@ def writable(self) -> bool:
152143
def tell(self) -> int:
153144
return self._position
154145

155-
def read(self, size: Optional[int] = -1) -> bytes:
146+
def read(self, size: int | None = -1) -> bytes:
156147
size = None if size == -1 else size
157148
data = self.raw_stream.read(size)
158149
if data is not None:
159150
self._position += len(data)
160151
return data
161152

162-
def readline(self, size: Optional[int] = None) -> bytes:
153+
def readline(self, size: int | None = None) -> bytes:
163154
data = self.raw_stream.readline(size)
164155
self._position += len(data)
165156
return data
166157

167-
def readlines(self, hint: int = -1) -> List[bytes]:
158+
def readlines(self, hint: int = -1) -> list[bytes]:
168159
# boto3's StreamingResponse doesn't implement the "hint" parameter
169160
data = self.raw_stream.readlines()
170161
self._position += sum(len(line) for line in data)
@@ -199,14 +190,14 @@ def flush(self) -> None:
199190
def isatty(self) -> bool:
200191
return False
201192

202-
def truncate(self, size: Optional[int] = 0) -> int:
193+
def truncate(self, size: int | None = 0) -> int:
203194
raise NotImplementedError("this stream is not writable")
204195

205-
def write(self, data: Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]) -> int:
196+
def write(self, data: bytes | bytearray | memoryview | Sequence[Any] | mmap | _CData) -> int:
206197
raise NotImplementedError("this stream is not writable")
207198

208199
def writelines(
209200
self,
210-
data: Iterable[Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]],
201+
data: Iterable[bytes | bytearray | memoryview | Sequence[Any] | mmap | _CData],
211202
) -> None:
212203
raise NotImplementedError("this stream is not writable")

aws_lambda_powertools/utilities/streaming/s3_object.py

+17-31
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,22 @@
11
from __future__ import annotations
22

33
import io
4-
from typing import (
5-
IO,
6-
TYPE_CHECKING,
7-
Any,
8-
Iterable,
9-
List,
10-
Literal,
11-
Optional,
12-
Sequence,
13-
TypeVar,
14-
Union,
15-
cast,
16-
overload,
17-
)
4+
from typing import IO, TYPE_CHECKING, Any, Iterable, Literal, Sequence, TypeVar, cast, overload
185

196
from aws_lambda_powertools.utilities.streaming._s3_seekable_io import _S3SeekableIO
207
from aws_lambda_powertools.utilities.streaming.transformations import (
218
CsvTransform,
229
GzipTransform,
2310
)
24-
from aws_lambda_powertools.utilities.streaming.transformations.base import (
25-
BaseTransform,
26-
T,
27-
)
11+
from aws_lambda_powertools.utilities.streaming.transformations.base import T
2812

2913
if TYPE_CHECKING:
3014
from mmap import mmap
3115

3216
from mypy_boto3_s3.client import S3Client
3317

18+
from aws_lambda_powertools.utilities.streaming.transformations.base import BaseTransform
19+
3420
_CData = TypeVar("_CData")
3521

3622

@@ -74,10 +60,10 @@ def __init__(
7460
self,
7561
bucket: str,
7662
key: str,
77-
version_id: Optional[str] = None,
78-
boto3_client: Optional[S3Client] = None,
79-
is_gzip: Optional[bool] = False,
80-
is_csv: Optional[bool] = False,
63+
version_id: str | None = None,
64+
boto3_client: S3Client | None = None,
65+
is_gzip: bool | None = False,
66+
is_csv: bool | None = False,
8167
**sdk_options,
8268
):
8369
self.bucket = bucket
@@ -94,14 +80,14 @@ def __init__(
9480
)
9581

9682
# Stores the list of data transformations
97-
self._data_transformations: List[BaseTransform] = []
83+
self._data_transformations: list[BaseTransform] = []
9884
if is_gzip:
9985
self._data_transformations.append(GzipTransform())
10086
if is_csv:
10187
self._data_transformations.append(CsvTransform())
10288

10389
# Stores the cached transformed stream
104-
self._transformed_stream: Optional[IO[bytes]] = None
90+
self._transformed_stream: IO[bytes] | None = None
10591

10692
@property
10793
def size(self) -> int:
@@ -152,8 +138,8 @@ def transform(self, transformations: BaseTransform[T] | Sequence[BaseTransform[T
152138
def transform(
153139
self,
154140
transformations: BaseTransform[T] | Sequence[BaseTransform[T]],
155-
in_place: Optional[bool] = False,
156-
) -> Optional[T]:
141+
in_place: bool | None = False,
142+
) -> T | None:
157143
"""
158144
Applies one or more data transformations to the stream.
159145
@@ -241,10 +227,10 @@ def close(self):
241227
def read(self, size: int = -1) -> bytes:
242228
return self.transformed_stream.read(size)
243229

244-
def readline(self, size: Optional[int] = -1) -> bytes:
230+
def readline(self, size: int | None = -1) -> bytes:
245231
return self.transformed_stream.readline()
246232

247-
def readlines(self, hint: int = -1) -> List[bytes]:
233+
def readlines(self, hint: int = -1) -> list[bytes]:
248234
return self.transformed_stream.readlines(hint)
249235

250236
def __next__(self):
@@ -262,14 +248,14 @@ def flush(self) -> None:
262248
def isatty(self) -> bool:
263249
return False
264250

265-
def truncate(self, size: Optional[int] = 0) -> int:
251+
def truncate(self, size: int | None = 0) -> int:
266252
raise NotImplementedError("this stream is not writable")
267253

268-
def write(self, data: Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]) -> int:
254+
def write(self, data: bytes | bytearray | memoryview | Sequence[Any] | mmap | _CData) -> int:
269255
raise NotImplementedError("this stream is not writable")
270256

271257
def writelines(
272258
self,
273-
data: Iterable[Union[bytes, Union[bytearray, memoryview, Sequence[Any], "mmap", "_CData"]]],
259+
data: Iterable[bytes | bytearray | memoryview | Sequence[Any] | mmap | _CData],
274260
) -> None:
275261
raise NotImplementedError("this stream is not writable")

0 commit comments

Comments
 (0)