Skip to content
This repository was archived by the owner on Mar 31, 2026. It is now read-only.

Commit ad68e91

Browse files
committed
fix lint errors
1 parent 8c81047 commit ad68e91

5 files changed

Lines changed: 77 additions & 65 deletions

File tree

google/cloud/storage/_experimental/asyncio/retry/writes_resumption_strategy.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from typing import Any, Dict, IO, List, Optional, Union
1616

1717
import google_crc32c
18-
from google.api_core import exceptions
1918
from google.cloud._storage_v2.types import storage as storage_type
2019
from google.cloud._storage_v2.types.storage import BidiWriteObjectRedirectedError
2120
from google.cloud.storage._experimental.asyncio.retry.base_strategy import (

tests/unit/asyncio/retry/test_writes_resumption_strategy.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,16 +133,16 @@ def test_generate_requests_flush_logic_exact_interval(self, strategy):
133133
requests = strategy.generate_requests(state)
134134

135135
# Request index 1 (4 bytes total) should have flush=True
136-
assert requests[0].flush == False
137-
assert requests[1].flush == True
136+
assert requests[0].flush is False
137+
assert requests[1].flush is True
138138

139139
# Request index 2 (8 bytes total) should have flush=True
140-
assert requests[2].flush == False
141-
assert requests[3].flush == True
140+
assert requests[2].flush is False
141+
assert requests[3].flush is True
142142

143143
# Request index 3 (12 bytes total) should have flush=True
144-
assert requests[4].flush == False
145-
assert requests[5].flush == True
144+
assert requests[4].flush is False
145+
assert requests[5].flush is True
146146

147147
# Verify counter reset in state
148148
assert write_state.bytes_since_last_flush == 0
@@ -158,7 +158,7 @@ def test_generate_requests_flush_logic_none_interval(self, strategy):
158158
requests = strategy.generate_requests(state)
159159

160160
for req in requests:
161-
assert req.flush == False
161+
assert req.flush is False
162162

163163
def test_generate_requests_flush_logic_data_less_than_interval(self, strategy):
164164
"""Verify flush is not set if data sent is less than interval."""
@@ -173,7 +173,7 @@ def test_generate_requests_flush_logic_data_less_than_interval(self, strategy):
173173

174174
# Total 5 bytes < 10 bytes interval
175175
for req in requests:
176-
assert req.flush == False
176+
assert req.flush is False
177177

178178
assert write_state.bytes_since_last_flush == 5
179179

@@ -298,7 +298,8 @@ async def test_recover_state_on_failure_direct_redirect(self, strategy):
298298
state = {"write_state": write_state}
299299

300300
redirect = BidiWriteObjectRedirectedError(
301-
routing_token="tok-1", write_handle=storage_type.BidiWriteHandle(handle=b"h-1"),
301+
routing_token="tok-1",
302+
write_handle=storage_type.BidiWriteHandle(handle=b"h-1"),
302303
)
303304

304305
await strategy.recover_state_on_failure(redirect, state)
@@ -327,7 +328,9 @@ async def test_recover_state_on_failure_trailer_metadata_redirect(self, strategy
327328
redirect_proto = BidiWriteObjectRedirectedError(routing_token="metadata-token")
328329
status = status_pb2.Status()
329330
detail = status.details.add()
330-
detail.type_url = "type.googleapis.com/google.storage.v2.BidiWriteObjectRedirectedError"
331+
detail.type_url = (
332+
"type.googleapis.com/google.storage.v2.BidiWriteObjectRedirectedError"
333+
)
331334
detail.value = BidiWriteObjectRedirectedError.serialize(redirect_proto)
332335

333336
# FIX: No spec= here, because Aborted doesn't have trailing_metadata in its base definition
@@ -337,8 +340,13 @@ async def test_recover_state_on_failure_trailer_metadata_redirect(self, strategy
337340
("grpc-status-details-bin", status.SerializeToString())
338341
]
339342

340-
with mock.patch("google.cloud.storage._experimental.asyncio.retry.writes_resumption_strategy._extract_bidi_writes_redirect_proto", return_value=redirect_proto):
341-
await strategy.recover_state_on_failure(mock_error, {"write_state": write_state})
343+
with mock.patch(
344+
"google.cloud.storage._experimental.asyncio.retry.writes_resumption_strategy._extract_bidi_writes_redirect_proto",
345+
return_value=redirect_proto,
346+
):
347+
await strategy.recover_state_on_failure(
348+
mock_error, {"write_state": write_state}
349+
)
342350

343351
assert write_state.routing_token == "metadata-token"
344352

tests/unit/asyncio/test_async_appendable_object_writer.py

Lines changed: 54 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
# limitations under the License.
1414

1515
import io
16-
import unittest
1716
import unittest.mock as mock
1817
from unittest.mock import AsyncMock, MagicMock
1918
import 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(),

tests/unit/asyncio/test_async_grpc_client.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import pytest
1615
from unittest import mock
1716
from google.auth import credentials as auth_credentials
1817
from google.auth.credentials import AnonymousCredentials

tests/unit/asyncio/test_async_write_object_stream.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ def test_init_basic(self, mock_client):
5454
assert stream.bucket_name == BUCKET
5555
assert stream.object_name == OBJECT
5656
assert stream._full_bucket_name == FULL_BUCKET_PATH
57-
assert stream.metadata == (("x-goog-request-params", f"bucket={FULL_BUCKET_PATH}"),)
57+
assert stream.metadata == (
58+
("x-goog-request-params", f"bucket={FULL_BUCKET_PATH}"),
59+
)
5860
assert not stream.is_stream_open
5961

6062
def test_init_raises_value_error(self, mock_client):

0 commit comments

Comments
 (0)