1313# limitations under the License.
1414
1515import io
16- import unittest
1716import unittest .mock as mock
1817from unittest .mock import AsyncMock , MagicMock
1918import pytest
@@ -135,21 +134,24 @@ def test_init_defaults(self, mock_appendable_writer):
135134 assert writer .flush_interval == _DEFAULT_FLUSH_INTERVAL_BYTES
136135
137136 def test_init_with_writer_options (self , mock_appendable_writer ):
138- writer = self ._make_one (mock_appendable_writer ["mock_client" ], writer_options = {"FLUSH_INTERVAL_BYTES" : EIGHT_MIB })
137+ writer = self ._make_one (
138+ mock_appendable_writer ["mock_client" ],
139+ writer_options = {"FLUSH_INTERVAL_BYTES" : EIGHT_MIB },
140+ )
139141 assert writer .flush_interval == EIGHT_MIB
140142
141143 def test_init_validation_chunk_size_raises (self , mock_appendable_writer ):
142144 with pytest .raises (exceptions .OutOfRange ):
143145 self ._make_one (
144146 mock_appendable_writer ["mock_client" ],
145- writer_options = {"FLUSH_INTERVAL_BYTES" : _MAX_CHUNK_SIZE_BYTES - 1 }
147+ writer_options = {"FLUSH_INTERVAL_BYTES" : _MAX_CHUNK_SIZE_BYTES - 1 },
146148 )
147149
148150 def test_init_validation_multiple_raises (self , mock_appendable_writer ):
149151 with pytest .raises (exceptions .OutOfRange ):
150152 self ._make_one (
151153 mock_appendable_writer ["mock_client" ],
152- writer_options = {"FLUSH_INTERVAL_BYTES" : _MAX_CHUNK_SIZE_BYTES + 1 }
154+ writer_options = {"FLUSH_INTERVAL_BYTES" : _MAX_CHUNK_SIZE_BYTES + 1 },
153155 )
154156
155157 def test_init_raises_if_crc32c_missing (self , mock_appendable_writer ):
@@ -166,50 +168,50 @@ def test_init_raises_if_crc32c_missing(self, mock_appendable_writer):
166168
167169 @pytest .mark .asyncio
168170 async def test_state_lookup_success (self , mock_appendable_writer ):
169- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
171+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
170172 writer ._is_stream_open = True
171- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
173+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
172174
173- mock_appendable_writer ['mock_stream' ]. recv . return_value = storage_type . BidiWriteObjectResponse (
174- persisted_size = 100
175- )
175+ mock_appendable_writer [
176+ "mock_stream"
177+ ]. recv . return_value = storage_type . BidiWriteObjectResponse ( persisted_size = 100 )
176178
177179 size = await writer .state_lookup ()
178180
179- mock_appendable_writer [' mock_stream' ].send .assert_awaited_once ()
181+ mock_appendable_writer [" mock_stream" ].send .assert_awaited_once ()
180182 assert size == 100
181183 assert writer .persisted_size == 100
182184
183185 @pytest .mark .asyncio
184186 async def test_state_lookup_raises_if_not_open (self , mock_appendable_writer ):
185- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
187+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
186188 with pytest .raises (ValueError , match = "Stream is not open" ):
187189 await writer .state_lookup ()
188190
189191 @pytest .mark .asyncio
190192 async def test_open_success (self , mock_appendable_writer ):
191- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
192- mock_appendable_writer [' mock_stream' ].generation_number = 456
193- mock_appendable_writer [' mock_stream' ].write_handle = b"new-h"
194- mock_appendable_writer [' mock_stream' ].persisted_size = 0
193+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
194+ mock_appendable_writer [" mock_stream" ].generation_number = 456
195+ mock_appendable_writer [" mock_stream" ].write_handle = b"new-h"
196+ mock_appendable_writer [" mock_stream" ].persisted_size = 0
195197
196198 await writer .open ()
197199
198200 assert writer ._is_stream_open
199201 assert writer .generation == 456
200202 assert writer .write_handle == b"new-h"
201- mock_appendable_writer [' mock_stream' ].open .assert_awaited_once ()
203+ mock_appendable_writer [" mock_stream" ].open .assert_awaited_once ()
202204
203205 @pytest .mark .asyncio
204206 async def test_open_already_open_raises (self , mock_appendable_writer ):
205- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
207+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
206208 writer ._is_stream_open = True
207209 with pytest .raises (ValueError , match = "already open" ):
208210 await writer .open ()
209211
210212 def test_on_open_error_redirection (self , mock_appendable_writer ):
211213 """Verify redirect info is extracted from helper."""
212- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
214+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
213215 redirect = BidiWriteObjectRedirectedError (
214216 routing_token = "rt1" ,
215217 write_handle = storage_type .BidiWriteHandle (handle = b"h1" ),
@@ -233,9 +235,9 @@ def test_on_open_error_redirection(self, mock_appendable_writer):
233235 @pytest .mark .asyncio
234236 async def test_append_integration_basic (self , mock_appendable_writer ):
235237 """Verify append orchestrates manager and drives the internal generator."""
236- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
238+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
237239 writer ._is_stream_open = True
238- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
240+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
239241 writer .persisted_size = 0
240242
241243 data = b"test-data"
@@ -249,7 +251,7 @@ async def mock_execute(state, policy):
249251 dummy_reqs = [storage_type .BidiWriteObjectRequest ()]
250252 gen = factory (dummy_reqs , state )
251253
252- mock_appendable_writer [' mock_stream' ].recv .side_effect = [
254+ mock_appendable_writer [" mock_stream" ].recv .side_effect = [
253255 storage_type .BidiWriteObjectResponse (
254256 persisted_size = len (data ),
255257 write_handle = storage_type .BidiWriteHandle (handle = b"h2" ),
@@ -263,21 +265,23 @@ async def mock_execute(state, policy):
263265 await writer .append (data )
264266
265267 assert writer .persisted_size == len (data )
266- sent_req = mock_appendable_writer [' mock_stream' ].send .call_args [0 ][0 ]
268+ sent_req = mock_appendable_writer [" mock_stream" ].send .call_args [0 ][0 ]
267269 assert sent_req .state_lookup
268270 assert sent_req .flush
269271
270272 @pytest .mark .asyncio
271273 async def test_append_recovery_reopens_stream (self , mock_appendable_writer ):
272274 """Verifies re-opening logic on retry."""
273- writer = self ._make_one (mock_appendable_writer ['mock_client' ], write_handle = b"h1" )
275+ writer = self ._make_one (
276+ mock_appendable_writer ["mock_client" ], write_handle = b"h1"
277+ )
274278 writer ._is_stream_open = True
275- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
279+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
276280 # Setup mock to allow close() call
277- mock_appendable_writer [' mock_stream' ].is_stream_open = True
281+ mock_appendable_writer [" mock_stream" ].is_stream_open = True
278282
279283 async def mock_open (metadata = None ):
280- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
284+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
281285 writer ._is_stream_open = True
282286 writer .persisted_size = 5
283287 writer .write_handle = b"h_recovered"
@@ -299,20 +303,20 @@ async def mock_execute(state, policy):
299303 pass
300304 # Simulate Attempt 2
301305 gen2 = factory ([], state )
302- mock_appendable_writer [' mock_stream' ].recv .return_value = None
306+ mock_appendable_writer [" mock_stream" ].recv .return_value = None
303307 async for _ in gen2 :
304308 pass
305309
306310 MockManager .return_value .execute .side_effect = mock_execute
307311 await writer .append (b"0123456789" )
308312
309- mock_appendable_writer [' mock_stream' ].close .assert_awaited ()
313+ mock_appendable_writer [" mock_stream" ].close .assert_awaited ()
310314 mock_writer_open .assert_awaited ()
311315 assert writer .persisted_size == 5
312316
313317 @pytest .mark .asyncio
314318 async def test_append_unimplemented_string_raises (self , mock_appendable_writer ):
315- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
319+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
316320 with pytest .raises (NotImplementedError ):
317321 await writer .append_from_string ("test" )
318322
@@ -322,14 +326,14 @@ async def test_append_unimplemented_string_raises(self, mock_appendable_writer):
322326
323327 @pytest .mark .asyncio
324328 async def test_flush_resets_counters (self , mock_appendable_writer ):
325- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
329+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
326330 writer ._is_stream_open = True
327- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
331+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
328332 writer .bytes_appended_since_last_flush = 100
329333
330- mock_appendable_writer ['mock_stream' ]. recv . return_value = storage_type . BidiWriteObjectResponse (
331- persisted_size = 200
332- )
334+ mock_appendable_writer [
335+ "mock_stream"
336+ ]. recv . return_value = storage_type . BidiWriteObjectResponse ( persisted_size = 200 )
333337
334338 await writer .flush ()
335339
@@ -338,55 +342,55 @@ async def test_flush_resets_counters(self, mock_appendable_writer):
338342
339343 @pytest .mark .asyncio
340344 async def test_simple_flush (self , mock_appendable_writer ):
341- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
345+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
342346 writer ._is_stream_open = True
343- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
347+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
344348 writer .bytes_appended_since_last_flush = 50
345349
346350 await writer .simple_flush ()
347351
348- mock_appendable_writer [' mock_stream' ].send .assert_awaited_with (
352+ mock_appendable_writer [" mock_stream" ].send .assert_awaited_with (
349353 storage_type .BidiWriteObjectRequest (flush = True )
350354 )
351355 assert writer .bytes_appended_since_last_flush == 0
352356
353357 @pytest .mark .asyncio
354358 async def test_close_without_finalize (self , mock_appendable_writer ):
355- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
359+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
356360 writer ._is_stream_open = True
357- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
361+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
358362 writer .persisted_size = 50
359363
360364 size = await writer .close ()
361365
362- mock_appendable_writer [' mock_stream' ].close .assert_awaited ()
366+ mock_appendable_writer [" mock_stream" ].close .assert_awaited ()
363367 assert not writer ._is_stream_open
364368 assert size == 50
365369
366370 @pytest .mark .asyncio
367371 async def test_finalize_lifecycle (self , mock_appendable_writer ):
368- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
372+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
369373 writer ._is_stream_open = True
370- writer .write_obj_stream = mock_appendable_writer [' mock_stream' ]
374+ writer .write_obj_stream = mock_appendable_writer [" mock_stream" ]
371375
372376 resource = storage_type .Object (size = 999 )
373- mock_appendable_writer ['mock_stream' ]. recv . return_value = storage_type . BidiWriteObjectResponse (
374- resource = resource
375- )
377+ mock_appendable_writer [
378+ "mock_stream"
379+ ]. recv . return_value = storage_type . BidiWriteObjectResponse ( resource = resource )
376380
377381 res = await writer .finalize ()
378382
379383 assert res == resource
380384 assert writer .persisted_size == 999
381- mock_appendable_writer [' mock_stream' ].send .assert_awaited_with (
385+ mock_appendable_writer [" mock_stream" ].send .assert_awaited_with (
382386 storage_type .BidiWriteObjectRequest (finish_write = True )
383387 )
384- mock_appendable_writer [' mock_stream' ].close .assert_awaited ()
388+ mock_appendable_writer [" mock_stream" ].close .assert_awaited ()
385389 assert not writer ._is_stream_open
386390
387391 @pytest .mark .asyncio
388392 async def test_close_with_finalize_on_close (self , mock_appendable_writer ):
389- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
393+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
390394 writer ._is_stream_open = True
391395 writer .finalize = AsyncMock ()
392396
@@ -399,7 +403,7 @@ async def test_close_with_finalize_on_close(self, mock_appendable_writer):
399403
400404 @pytest .mark .asyncio
401405 async def test_append_from_file_integration (self , mock_appendable_writer ):
402- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
406+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
403407 writer ._is_stream_open = True
404408 writer .append = AsyncMock ()
405409
@@ -410,7 +414,7 @@ async def test_append_from_file_integration(self, mock_appendable_writer):
410414
411415 @pytest .mark .asyncio
412416 async def test_methods_require_open_stream_raises (self , mock_appendable_writer ):
413- writer = self ._make_one (mock_appendable_writer [' mock_client' ])
417+ writer = self ._make_one (mock_appendable_writer [" mock_client" ])
414418 methods = [
415419 writer .append (b"data" ),
416420 writer .flush (),
0 commit comments