1 - | import typing
|
2 - |
|
3 - | class Blob:
|
4 - | """
|
5 - | Python Wrapper for [aws_smithy_types::Blob].
|
6 - | """
|
7 - |
|
8 - | data: bytes
|
9 - | """
|
10 - | Python getter for the `Blob` byte array.
|
11 - | """
|
12 - |
|
13 - | def __init__(self, input: bytes) -> None:
|
14 - | ...
|
15 - |
|
16 - |
|
17 - | class ByteStream:
|
18 - | """
|
19 - | Python Wrapper for [aws_smithy_types::byte_stream::ByteStream].
|
20 - |
|
21 - | ByteStream provides misuse-resistant primitives to make it easier to handle common patterns with streaming data.
|
22 - |
|
23 - | On the Rust side, The Python implementation wraps the original [ByteStream](aws_smithy_types::byte_stream::ByteStream)
|
24 - | in a clonable structure and implements the [Stream](futures::stream::Stream) trait for it to
|
25 - | allow Rust to handle the type transparently.
|
26 - |
|
27 - | On the Python side both sync and async iterators are exposed by implementing `__iter__()` and `__aiter__()` magic methods,
|
28 - | which allows to just loop over the stream chunks.
|
29 - |
|
30 - | ### Example of async streaming:
|
31 - |
|
32 - | ```python
|
33 - | stream = await ByteStream.from_path("/tmp/music.mp3")
|
34 - | async for chunk in stream:
|
35 - | print(chunk)
|
36 - | ```
|
37 - |
|
38 - | ### Example of sync streaming:
|
39 - |
|
40 - | ```python
|
41 - | stream = ByteStream.from_stream_blocking("/tmp/music.mp3")
|
42 - | for chunk in stream:
|
43 - | print(chunk)
|
44 - | ```
|
45 - |
|
46 - | The main difference between the two implementations is that the async one is scheduling the Python coroutines as Rust futures,
|
47 - | effectively maintaining the asyncronous behavior that Rust exposes, while the sync one is blocking the Tokio runtime to be able
|
48 - | to await one chunk at a time.
|
49 - |
|
50 - | The original Rust [ByteStream](aws_smithy_types::byte_stream::ByteStream) is wrapped inside a `Arc<Mutex>` to allow the type to be
|
51 - | [Clone] (required by PyO3) and to allow internal mutability, required to fetch the next chunk of data.
|
52 - | """
|
53 - |
|
54 - | @staticmethod
|
55 - | def from_path(path: str) -> typing.Awaitable[ByteStream]:
|
56 - | """
|
57 - | Create a new [ByteStream](aws_smithy_types::byte_stream::ByteStream) from a path, forcing
|
58 - | Python to await this coroutine.
|
59 - | """
|
60 - | ...
|
61 - |
|
62 - |
|
63 - | @staticmethod
|
64 - | def from_path_blocking(path: str) -> ByteStream:
|
65 - | """
|
66 - | Create a new [ByteStream](aws_smithy_types::byte_stream::ByteStream) from a path, without
|
67 - | requiring Python to await this method.
|
68 - |
|
69 - | **NOTE:** This method will block the Rust event loop when it is running.
|
70 - | """
|
71 - | ...
|
72 - |
|
73 - |
|
74 - | def __init__(self, input: bytes) -> None:
|
75 - | ...
|
76 - |
|
77 - |
|
78 - | class DateTime:
|
79 - | """
|
80 - | Python Wrapper for [aws_smithy_types::date_time::DateTime].
|
81 - | """
|
82 - |
|
83 - | def as_nanos(self) -> int:
|
84 - | """
|
85 - | Returns the number of nanoseconds since the Unix epoch that this `DateTime` represents.
|
86 - | """
|
87 - | ...
|
88 - |
|
89 - |
|
90 - | def as_secs_f64(self) -> float:
|
91 - | """
|
92 - | Returns the `DateTime` value as an `f64` representing the seconds since the Unix epoch.
|
93 - | """
|
94 - | ...
|
95 - |
|
96 - |
|
97 - | @staticmethod
|
98 - | def from_fractional_secs(epoch_seconds: int, fraction: float) -> DateTime:
|
99 - | """
|
100 - | Creates a `DateTime` from a number of seconds and a fractional second since the Unix epoch.
|
101 - | """
|
102 - | ...
|
103 - |
|
104 - |
|
105 - | @staticmethod
|
106 - | def from_millis(epoch_millis: int) -> DateTime:
|
107 - | """
|
108 - | Creates a `DateTime` from a number of milliseconds since the Unix epoch.
|
109 - | """
|
110 - | ...
|
111 - |
|
112 - |
|
113 - | @staticmethod
|
114 - | def from_nanos(epoch_nanos: int) -> DateTime:
|
115 - | """
|
116 - | Creates a `DateTime` from a number of nanoseconds since the Unix epoch.
|
117 - | """
|
118 - | ...
|
119 - |
|
120 - |
|
121 - | @staticmethod
|
122 - | def from_secs(epoch_seconds: int) -> DateTime:
|
123 - | """
|
124 - | Creates a `DateTime` from a number of seconds since the Unix epoch.
|
125 - | """
|
126 - | ...
|
127 - |
|
128 - |
|
129 - | @staticmethod
|
130 - | def from_secs_and_nanos(seconds: int, subsecond_nanos: int) -> DateTime:
|
131 - | """
|
132 - | Creates a `DateTime` from a number of seconds and sub-second nanos since the Unix epoch.
|
133 - | """
|
134 - | ...
|
135 - |
|
136 - |
|
137 - | @staticmethod
|
138 - | def from_secs_f64(epoch_seconds: float) -> DateTime:
|
139 - | """
|
140 - | Creates a `DateTime` from an `f64` representing the number of seconds since the Unix epoch.
|
141 - | """
|
142 - | ...
|
143 - |
|
144 - |
|
145 - | @staticmethod
|
146 - | def from_str(s: str, format: Format) -> DateTime:
|
147 - | """
|
148 - | Parses a `DateTime` from a string using the given `format`.
|
149 - | """
|
150 - | ...
|
151 - |
|
152 - |
|
153 - | def has_subsec_nanos(self) -> bool:
|
154 - | """
|
155 - | Returns true if sub-second nanos is greater than zero.
|
156 - | """
|
157 - | ...
|
158 - |
|
159 - |
|
160 - | @staticmethod
|
161 - | def read(format: Format, delim: str) -> typing.Tuple[DateTime, str]:
|
162 - | """
|
163 - | Read 1 date of `format` from `s`, expecting either `delim` or EOF.
|
164 - |
|
165 - | TODO(PythonTyping): How do we represent `char` in Python?
|
166 - | """
|
167 - | ...
|
168 - |
|
169 - |
|
170 - | def secs(self) -> int:
|
171 - | """
|
172 - | Returns the epoch seconds component of the `DateTime`.
|
173 - | """
|
174 - | ...
|
175 - |
|
176 - |
|
177 - | def subsec_nanos(self) -> int:
|
178 - | """
|
179 - | Returns the sub-second nanos component of the `DateTime`.
|
180 - | """
|
181 - | ...
|
182 - |
|
183 - |
|
184 - | def to_millis(self) -> int:
|
185 - | """
|
186 - | Converts the `DateTime` to the number of milliseconds since the Unix epoch.
|
187 - | """
|
188 - | ...
|
189 - |
|
190 - |
|
191 - | class Format:
|
192 - | """
|
193 - | Formats for representing a `DateTime` in the Smithy protocols.
|
194 - | """
|
195 - |
|
196 - | DateTime: Format
|
197 - | """
|
198 - | Formats for representing a `DateTime` in the Smithy protocols.
|
199 - | """
|
200 - |
|
201 - | EpochSeconds: Format
|
202 - | """
|
203 - | Formats for representing a `DateTime` in the Smithy protocols.
|
204 - | """
|
205 - |
|
206 - | HttpDate: Format
|
207 - | """
|
208 - | Formats for representing a `DateTime` in the Smithy protocols.
|
209 - | """
|