Skip to content

Commit 3cb5682

Browse files
committed
Update botocore to 1.37.3
Adds new RCP V2 CBOR parser. Copies upstream protocol tests and adjust them to support asyncio.
1 parent d2d8f2b commit 3cb5682

19 files changed

+23889
-16
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Changes
77
* patch ``AioEndpoint.__init__()``
88
* patch ``EventStream._parse_event()``, ``ResponseParser`` and subclasses
99
* use SPDX license identifier for project metadata
10+
* upstream support for the smithy-rpc-v2-cbor protocol
11+
* bump botocore dependency specification
1012

1113
2.21.1 (2025-03-04)
1214
^^^^^^^^^^^^^^^^^^^

aiobotocore/parsers.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
from botocore.parsers import (
22
LOG,
3+
BaseCBORParser,
34
BaseEventStreamParser,
45
BaseJSONParser,
56
BaseRestParser,
7+
BaseRpcV2Parser,
68
BaseXMLResponseParser,
79
EC2QueryParser,
10+
EventStreamCBORParser,
811
EventStreamJSONParser,
912
EventStreamXMLParser,
1013
JSONParser,
@@ -15,6 +18,7 @@
1518
ResponseParserFactory,
1619
RestJSONParser,
1720
RestXMLParser,
21+
RpcV2CBORParser,
1822
lowercase_dict,
1923
)
2024

@@ -88,6 +92,10 @@ class AioBaseJSONParser(BaseJSONParser, AioResponseParser):
8892
pass
8993

9094

95+
class AioBaseCBORParser(BaseCBORParser, AioResponseParser):
96+
pass
97+
98+
9199
class AioBaseEventStreamParser(BaseEventStreamParser, AioResponseParser):
92100
pass
93101

@@ -104,6 +112,12 @@ class AioEventStreamXMLParser(
104112
pass
105113

106114

115+
class AioEventStreamCBORParser(
116+
EventStreamCBORParser, AioBaseEventStreamParser, AioBaseCBORParser
117+
):
118+
pass
119+
120+
107121
class AioJSONParser(JSONParser, AioBaseJSONParser):
108122
EVENT_STREAM_PARSER_CLS = AioEventStreamJSONParser
109123

@@ -137,10 +151,46 @@ class AioBaseRestParser(BaseRestParser, AioResponseParser):
137151
pass
138152

139153

154+
class AioBaseRpcV2Parser(BaseRpcV2Parser, AioResponseParser):
155+
async def _do_parse(self, response, shape):
156+
parsed = {}
157+
if shape is not None:
158+
event_stream_name = shape.event_stream_name
159+
if event_stream_name:
160+
parsed = await self._handle_event_stream(
161+
response, shape, event_stream_name
162+
)
163+
else:
164+
parsed = {}
165+
self._parse_payload(response, shape, parsed)
166+
parsed['ResponseMetadata'] = self._populate_response_metadata(
167+
response
168+
)
169+
return parsed
170+
171+
140172
class AioRestJSONParser(RestJSONParser, AioBaseRestParser, AioBaseJSONParser):
141173
EVENT_STREAM_PARSER_CLS = AioEventStreamJSONParser
142174

143175

176+
class AioRpcV2CBORParser(
177+
RpcV2CBORParser, AioBaseRpcV2Parser, AioBaseCBORParser
178+
):
179+
EVENT_STREAM_PARSER_CLS = AioEventStreamCBORParser
180+
181+
async def _handle_event_stream(self, response, shape, event_name):
182+
event_stream_shape = shape.members[event_name]
183+
event_stream = self._create_event_stream(response, event_stream_shape)
184+
try:
185+
event = await event_stream.get_initial_response()
186+
except NoInitialResponseError:
187+
error_msg = 'First event was not of type initial-response'
188+
raise ResponseParserError(error_msg)
189+
parsed = self._initial_body_parse(event.payload)
190+
parsed[event_name] = event_stream
191+
return parsed
192+
193+
144194
class AioRestXMLParser(
145195
RestXMLParser, AioBaseRestParser, AioBaseXMLResponseParser
146196
):
@@ -153,4 +203,5 @@ class AioRestXMLParser(
153203
'json': AioJSONParser,
154204
'rest-json': AioRestJSONParser,
155205
'rest-xml': AioRestXMLParser,
206+
'smithy-rpc-v2-cbor': AioRpcV2CBORParser,
156207
}

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ dynamic = ["version", "readme"]
3232
dependencies = [
3333
"aiohttp >= 3.9.2, < 4.0.0",
3434
"aioitertools >= 0.5.1, < 1.0.0",
35-
"botocore >= 1.37.0, < 1.37.2", # NOTE: When updating, always keep `project.optional-dependencies` aligned
35+
"botocore >= 1.37.2, < 1.37.4", # NOTE: When updating, always keep `project.optional-dependencies` aligned
3636
"python-dateutil >= 2.1, < 3.0.0",
3737
"jmespath >= 0.7.1, < 2.0.0",
3838
"multidict >= 6.0.0, < 7.0.0",
@@ -41,10 +41,10 @@ dependencies = [
4141

4242
[project.optional-dependencies]
4343
awscli = [
44-
"awscli >= 1.38.0, < 1.38.2",
44+
"awscli >= 1.38.2, < 1.38.4",
4545
]
4646
boto3 = [
47-
"boto3 >= 1.37.0, < 1.37.2",
47+
"boto3 >= 1.37.2, < 1.37.4",
4848
]
4949

5050
[project.urls]

0 commit comments

Comments
 (0)