Skip to content

Commit 54dba34

Browse files
authored
Bump botocore dependency specification (#1348)
1 parent 3126e16 commit 54dba34

File tree

5 files changed

+95
-16
lines changed

5 files changed

+95
-16
lines changed

CHANGES.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Changes
77
* patch ``AioEndpoint.__init__()``
88
* patch ``EventStream._parse_event()``, ``ResponseParser`` and subclasses
99
* use SPDX license identifier for project metadata
10+
* bump botocore dependency specification
1011

1112
2.21.1 (2025-03-04)
1213
^^^^^^^^^^^^^^^^^^^

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]

tests/test_patches.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,15 @@
6262
from botocore.paginate import PageIterator, ResultKeyIterator
6363
from botocore.parsers import (
6464
PROTOCOL_PARSERS,
65+
BaseRpcV2Parser,
6566
EC2QueryParser,
6667
JSONParser,
6768
QueryParser,
6869
ResponseParser,
6970
ResponseParserFactory,
7071
RestJSONParser,
7172
RestXMLParser,
73+
RpcV2CBORParser,
7274
create_parser,
7375
)
7476
from botocore.regions import EndpointRulesetResolver
@@ -139,7 +141,14 @@
139141
# REPLACE = backwards incompatible change
140142
# APPEND = officially supporting more versions of botocore/aiohttp
141143

142-
_PROTOCOL_PARSER_CONTENT = {'ec2', 'query', 'json', 'rest-json', 'rest-xml'}
144+
_PROTOCOL_PARSER_CONTENT = {
145+
'ec2',
146+
'query',
147+
'json',
148+
'rest-json',
149+
'rest-xml',
150+
'smithy-rpc-v2-cbor',
151+
}
143152

144153

145154
def test_protocol_parsers():
@@ -839,12 +848,30 @@ def test_protocol_parsers():
839848
'3cf7bb1ecff0d72bafd7e7fd6625595b4060abd6',
840849
},
841850
),
851+
(
852+
BaseRpcV2Parser._do_parse,
853+
{
854+
'e2d884a116d830f57c5ca41f315d3baac49372eb',
855+
},
856+
),
842857
(
843858
RestJSONParser._create_event_stream,
844859
{
845860
'0564ba55383a71cc1ba3e5be7110549d7e9992f5',
846861
},
847862
),
863+
(
864+
RpcV2CBORParser.EVENT_STREAM_PARSER_CLS,
865+
{
866+
'10c1f773f07e22929ecac791729c1a30a4091bd3',
867+
},
868+
),
869+
(
870+
RpcV2CBORParser._handle_event_stream,
871+
{
872+
'2aa007aaca55b37c7e327b7ef8c86237f19690cc',
873+
},
874+
),
848875
(
849876
create_parser,
850877
{

uv.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)