4
4
5
5
import ydb
6
6
7
+ from ydb ._topic_reader .events import OnPartitionGetStartOffsetResponse
8
+
7
9
8
10
@pytest .mark .asyncio
9
11
class TestTopicReaderAsyncIO :
@@ -253,6 +255,11 @@ async def wait(fut):
253
255
await reader1 .close ()
254
256
255
257
258
+ @pytest .fixture ()
259
+ def topic_selector (topic_with_messages ):
260
+ return ydb .TopicReaderSelector (path = topic_with_messages , partitions = [0 ])
261
+
262
+
256
263
@pytest .mark .asyncio
257
264
class TestTopicNoConsumerReaderAsyncIO :
258
265
async def test_reader_with_no_partition_ids_raises (self , driver , topic_with_messages ):
@@ -262,57 +269,63 @@ async def test_reader_with_no_partition_ids_raises(self, driver, topic_with_mess
262
269
consumer = None ,
263
270
)
264
271
265
- async def test_reader_with_default_lambda (self , driver , topic_with_messages ):
266
- reader = driver .topic_client .reader (
267
- topic_with_messages ,
268
- consumer = None ,
269
- partition_ids = [0 ],
270
- )
272
+ async def test_reader_with_no_partition_ids_selector_raises (self , driver , topic_selector ):
273
+ topic_selector .partitions = None
274
+
275
+ with pytest .raises (ydb .Error ):
276
+ driver .topic_client .reader (
277
+ topic_selector ,
278
+ consumer = None ,
279
+ )
280
+
281
+ async def test_reader_with_default_lambda (self , driver , topic_selector ):
282
+ reader = driver .topic_client .reader (topic_selector , consumer = None )
271
283
msg = await reader .receive_message ()
272
284
273
285
assert msg .seqno == 1
274
286
275
287
await reader .close ()
276
288
277
- async def test_reader_with_sync_lambda (self , driver , topic_with_messages ):
278
- def sync_lambda (partition_id : int ):
279
- assert partition_id == 0
280
- return 1
289
+ async def test_reader_with_sync_lambda (self , driver , topic_selector ):
290
+ class CustomEventHandler (ydb .TopicReaderEventHandler ):
291
+ def on_partition_get_start_offset (self , event ):
292
+ assert event .partition_id == 0
293
+ return OnPartitionGetStartOffsetResponse (1 )
281
294
282
295
reader = driver .topic_client .reader (
283
- topic_with_messages ,
296
+ topic_selector ,
284
297
consumer = None ,
285
- partition_ids = [0 ],
286
- get_start_offset_lambda = sync_lambda ,
298
+ event_handler = CustomEventHandler (),
287
299
)
300
+
288
301
msg = await reader .receive_message ()
289
302
290
303
assert msg .seqno == 2
291
304
292
305
await reader .close ()
293
306
294
- async def test_reader_with_async_lambda (self , driver , topic_with_messages ):
295
- async def async_lambda (partition_id : int ) -> int :
296
- assert partition_id == 0
297
- return 1
307
+ async def test_reader_with_async_lambda (self , driver , topic_selector ):
308
+ class CustomEventHandler (ydb .TopicReaderEventHandler ):
309
+ async def on_partition_get_start_offset (self , event ):
310
+ assert event .partition_id == 0
311
+ return OnPartitionGetStartOffsetResponse (1 )
298
312
299
313
reader = driver .topic_client .reader (
300
- topic_with_messages ,
314
+ topic_selector ,
301
315
consumer = None ,
302
- partition_ids = [0 ],
303
- get_start_offset_lambda = async_lambda ,
316
+ event_handler = CustomEventHandler (),
304
317
)
318
+
305
319
msg = await reader .receive_message ()
306
320
307
321
assert msg .seqno == 2
308
322
309
323
await reader .close ()
310
324
311
- async def test_commit_not_allowed (self , driver , topic_with_messages ):
325
+ async def test_commit_not_allowed (self , driver , topic_selector ):
312
326
reader = driver .topic_client .reader (
313
- topic_with_messages ,
327
+ topic_selector ,
314
328
consumer = None ,
315
- partition_ids = [0 ],
316
329
)
317
330
batch = await reader .receive_batch ()
318
331
@@ -324,18 +337,18 @@ async def test_commit_not_allowed(self, driver, topic_with_messages):
324
337
325
338
await reader .close ()
326
339
327
- async def test_offsets_updated_after_reconnect (self , driver , topic_with_messages ):
340
+ async def test_offsets_updated_after_reconnect (self , driver , topic_selector ):
328
341
current_offset = 0
329
342
330
- def get_start_offset_lambda (partition_id : int ) -> int :
331
- nonlocal current_offset
332
- return current_offset
343
+ class CustomEventHandler (ydb .TopicReaderEventHandler ):
344
+ def on_partition_get_start_offset (self , event ):
345
+ nonlocal current_offset
346
+ return OnPartitionGetStartOffsetResponse (current_offset )
333
347
334
348
reader = driver .topic_client .reader (
335
- topic_with_messages ,
349
+ topic_selector ,
336
350
consumer = None ,
337
- partition_ids = [0 ],
338
- get_start_offset_lambda = get_start_offset_lambda ,
351
+ event_handler = CustomEventHandler (),
339
352
)
340
353
msg = await reader .receive_message ()
341
354
@@ -361,57 +374,63 @@ def test_reader_with_no_partition_ids_raises(self, driver_sync, topic_with_messa
361
374
consumer = None ,
362
375
)
363
376
364
- def test_reader_with_default_lambda (self , driver_sync , topic_with_messages ):
365
- reader = driver_sync .topic_client .reader (
366
- topic_with_messages ,
367
- consumer = None ,
368
- partition_ids = [0 ],
369
- )
377
+ def test_reader_with_no_partition_ids_selector_raises (self , driver_sync , topic_selector ):
378
+ topic_selector .partitions = None
379
+
380
+ with pytest .raises (ydb .Error ):
381
+ driver_sync .topic_client .reader (
382
+ topic_selector ,
383
+ consumer = None ,
384
+ )
385
+
386
+ def test_reader_with_default_lambda (self , driver_sync , topic_selector ):
387
+ reader = driver_sync .topic_client .reader (topic_selector , consumer = None )
370
388
msg = reader .receive_message ()
371
389
372
390
assert msg .seqno == 1
373
391
374
392
reader .close ()
375
393
376
- def test_reader_with_sync_lambda (self , driver_sync , topic_with_messages ):
377
- def sync_lambda (partition_id : int ):
378
- assert partition_id == 0
379
- return 1
394
+ def test_reader_with_sync_lambda (self , driver_sync , topic_selector ):
395
+ class CustomEventHandler (ydb .TopicReaderEventHandler ):
396
+ def on_partition_get_start_offset (self , event ):
397
+ assert event .partition_id == 0
398
+ return OnPartitionGetStartOffsetResponse (1 )
380
399
381
400
reader = driver_sync .topic_client .reader (
382
- topic_with_messages ,
401
+ topic_selector ,
383
402
consumer = None ,
384
- partition_ids = [0 ],
385
- get_start_offset_lambda = sync_lambda ,
403
+ event_handler = CustomEventHandler (),
386
404
)
405
+
387
406
msg = reader .receive_message ()
388
407
389
408
assert msg .seqno == 2
390
409
391
410
reader .close ()
392
411
393
- def test_reader_with_async_lambda (self , driver_sync , topic_with_messages ):
394
- async def async_lambda (partition_id : int ) -> int :
395
- assert partition_id == 0
396
- return 1
412
+ def test_reader_with_async_lambda (self , driver_sync , topic_selector ):
413
+ class CustomEventHandler (ydb .TopicReaderEventHandler ):
414
+ async def on_partition_get_start_offset (self , event ):
415
+ assert event .partition_id == 0
416
+ return OnPartitionGetStartOffsetResponse (1 )
397
417
398
418
reader = driver_sync .topic_client .reader (
399
- topic_with_messages ,
419
+ topic_selector ,
400
420
consumer = None ,
401
- partition_ids = [0 ],
402
- get_start_offset_lambda = async_lambda ,
421
+ event_handler = CustomEventHandler (),
403
422
)
423
+
404
424
msg = reader .receive_message ()
405
425
406
426
assert msg .seqno == 2
407
427
408
428
reader .close ()
409
429
410
- def test_commit_not_allowed (self , driver_sync , topic_with_messages ):
430
+ def test_commit_not_allowed (self , driver_sync , topic_selector ):
411
431
reader = driver_sync .topic_client .reader (
412
- topic_with_messages ,
432
+ topic_selector ,
413
433
consumer = None ,
414
- partition_ids = [0 ],
415
434
)
416
435
batch = reader .receive_batch ()
417
436
@@ -421,23 +440,20 @@ def test_commit_not_allowed(self, driver_sync, topic_with_messages):
421
440
with pytest .raises (ydb .Error ):
422
441
reader .commit_with_ack (batch )
423
442
424
- with pytest .raises (ydb .Error ):
425
- reader .async_commit_with_ack (batch )
426
-
427
443
reader .close ()
428
444
429
- def test_offsets_updated_after_reconnect (self , driver_sync , topic_with_messages ):
445
+ def test_offsets_updated_after_reconnect (self , driver_sync , topic_selector ):
430
446
current_offset = 0
431
447
432
- def get_start_offset_lambda (partition_id : int ) -> int :
433
- nonlocal current_offset
434
- return current_offset
448
+ class CustomEventHandler (ydb .TopicReaderEventHandler ):
449
+ def on_partition_get_start_offset (self , event ):
450
+ nonlocal current_offset
451
+ return OnPartitionGetStartOffsetResponse (current_offset )
435
452
436
453
reader = driver_sync .topic_client .reader (
437
- topic_with_messages ,
454
+ topic_selector ,
438
455
consumer = None ,
439
- partition_ids = [0 ],
440
- get_start_offset_lambda = get_start_offset_lambda ,
456
+ event_handler = CustomEventHandler (),
441
457
)
442
458
msg = reader .receive_message ()
443
459
0 commit comments