Skip to content

Commit 58e2192

Browse files
Call read_data_stream on data streams
1 parent 618d663 commit 58e2192

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

codegen/core/src/main/java/software/amazon/smithy/python/codegen/generators/MemberDeserializerGenerator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import software.amazon.smithy.model.shapes.StructureShape;
2929
import software.amazon.smithy.model.shapes.TimestampShape;
3030
import software.amazon.smithy.model.shapes.UnionShape;
31+
import software.amazon.smithy.model.traits.StreamingTrait;
3132
import software.amazon.smithy.python.codegen.GenerationContext;
3233
import software.amazon.smithy.python.codegen.SymbolProperties;
3334
import software.amazon.smithy.python.codegen.writer.PythonWriter;
@@ -100,7 +101,11 @@ private void writeSchema() {
100101

101102
@Override
102103
public Void blobShape(BlobShape shape) {
103-
writeDeserializer(shape);
104+
if (shape.hasTrait(StreamingTrait.class)) {
105+
writeDeserializer("data_stream");
106+
} else {
107+
writeDeserializer(shape);
108+
}
104109
return null;
105110
}
106111

packages/smithy-http/src/smithy_http/deserializers.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
from base64 import b64decode
55
from collections.abc import Callable
66
from decimal import Decimal
7-
from typing import TYPE_CHECKING
7+
from inspect import iscoroutinefunction
8+
from typing import TYPE_CHECKING, Any, TypeGuard
89

10+
from smithy_core.aio.interfaces import AsyncByteStream
11+
from smithy_core.aio.types import AsyncBytesReader
912
from smithy_core.codecs import Codec
1013
from smithy_core.deserializers import ShapeDeserializer, SpecificShapeDeserializer
1114
from smithy_core.exceptions import UnsupportedStreamError
@@ -295,7 +298,14 @@ def read_blob(self, schema: Schema) -> bytes:
295298
return self._consume_payload()
296299

297300
def read_data_stream(self, schema: Schema) -> "AsyncStreamingBlob":
298-
return self._payload
301+
if self._is_async_reader(self._payload):
302+
return self._payload
303+
return AsyncBytesReader(self._payload)
304+
305+
def _is_async_reader(self, obj: Any) -> TypeGuard[AsyncByteStream]:
306+
return isinstance(obj, AsyncByteStream) and iscoroutinefunction(
307+
getattr(obj, "read")
308+
)
299309

300310
def _consume_payload(self) -> bytes:
301311
if isinstance(self._payload, bytes):

0 commit comments

Comments
 (0)