44
55import ydb
66
7+ from ydb ._topic_reader .events import OnPartitionGetStartOffsetResponse
8+
79
810@pytest .mark .asyncio
911class TestTopicReaderAsyncIO :
@@ -253,6 +255,11 @@ async def wait(fut):
253255 await reader1 .close ()
254256
255257
258+ @pytest .fixture ()
259+ def topic_selector (topic_with_messages ):
260+ return ydb .TopicReaderSelector (path = topic_with_messages , partitions = [0 ])
261+
262+
256263@pytest .mark .asyncio
257264class TestTopicNoConsumerReaderAsyncIO :
258265 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
262269 consumer = None ,
263270 )
264271
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 )
271283 msg = await reader .receive_message ()
272284
273285 assert msg .seqno == 1
274286
275287 await reader .close ()
276288
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 )
281294
282295 reader = driver .topic_client .reader (
283- topic_with_messages ,
296+ topic_selector ,
284297 consumer = None ,
285- partition_ids = [0 ],
286- get_start_offset_lambda = sync_lambda ,
298+ event_handler = CustomEventHandler (),
287299 )
300+
288301 msg = await reader .receive_message ()
289302
290303 assert msg .seqno == 2
291304
292305 await reader .close ()
293306
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 )
298312
299313 reader = driver .topic_client .reader (
300- topic_with_messages ,
314+ topic_selector ,
301315 consumer = None ,
302- partition_ids = [0 ],
303- get_start_offset_lambda = async_lambda ,
316+ event_handler = CustomEventHandler (),
304317 )
318+
305319 msg = await reader .receive_message ()
306320
307321 assert msg .seqno == 2
308322
309323 await reader .close ()
310324
311- async def test_commit_not_allowed (self , driver , topic_with_messages ):
325+ async def test_commit_not_allowed (self , driver , topic_selector ):
312326 reader = driver .topic_client .reader (
313- topic_with_messages ,
327+ topic_selector ,
314328 consumer = None ,
315- partition_ids = [0 ],
316329 )
317330 batch = await reader .receive_batch ()
318331
@@ -324,18 +337,18 @@ async def test_commit_not_allowed(self, driver, topic_with_messages):
324337
325338 await reader .close ()
326339
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 ):
328341 current_offset = 0
329342
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 )
333347
334348 reader = driver .topic_client .reader (
335- topic_with_messages ,
349+ topic_selector ,
336350 consumer = None ,
337- partition_ids = [0 ],
338- get_start_offset_lambda = get_start_offset_lambda ,
351+ event_handler = CustomEventHandler (),
339352 )
340353 msg = await reader .receive_message ()
341354
@@ -361,57 +374,63 @@ def test_reader_with_no_partition_ids_raises(self, driver_sync, topic_with_messa
361374 consumer = None ,
362375 )
363376
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 )
370388 msg = reader .receive_message ()
371389
372390 assert msg .seqno == 1
373391
374392 reader .close ()
375393
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 )
380399
381400 reader = driver_sync .topic_client .reader (
382- topic_with_messages ,
401+ topic_selector ,
383402 consumer = None ,
384- partition_ids = [0 ],
385- get_start_offset_lambda = sync_lambda ,
403+ event_handler = CustomEventHandler (),
386404 )
405+
387406 msg = reader .receive_message ()
388407
389408 assert msg .seqno == 2
390409
391410 reader .close ()
392411
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 )
397417
398418 reader = driver_sync .topic_client .reader (
399- topic_with_messages ,
419+ topic_selector ,
400420 consumer = None ,
401- partition_ids = [0 ],
402- get_start_offset_lambda = async_lambda ,
421+ event_handler = CustomEventHandler (),
403422 )
423+
404424 msg = reader .receive_message ()
405425
406426 assert msg .seqno == 2
407427
408428 reader .close ()
409429
410- def test_commit_not_allowed (self , driver_sync , topic_with_messages ):
430+ def test_commit_not_allowed (self , driver_sync , topic_selector ):
411431 reader = driver_sync .topic_client .reader (
412- topic_with_messages ,
432+ topic_selector ,
413433 consumer = None ,
414- partition_ids = [0 ],
415434 )
416435 batch = reader .receive_batch ()
417436
@@ -421,23 +440,20 @@ def test_commit_not_allowed(self, driver_sync, topic_with_messages):
421440 with pytest .raises (ydb .Error ):
422441 reader .commit_with_ack (batch )
423442
424- with pytest .raises (ydb .Error ):
425- reader .async_commit_with_ack (batch )
426-
427443 reader .close ()
428444
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 ):
430446 current_offset = 0
431447
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 )
435452
436453 reader = driver_sync .topic_client .reader (
437- topic_with_messages ,
454+ topic_selector ,
438455 consumer = None ,
439- partition_ids = [0 ],
440- get_start_offset_lambda = get_start_offset_lambda ,
456+ event_handler = CustomEventHandler (),
441457 )
442458 msg = reader .receive_message ()
443459
0 commit comments