20
20
from redis .utils import HIREDIS_AVAILABLE
21
21
from tests .conftest import get_protocol_version , skip_if_server_version_lt
22
22
23
- from .compat import create_task , mock
23
+ from .compat import aclosing , create_task , mock
24
24
25
25
26
26
def with_timeout (t ):
@@ -84,9 +84,8 @@ def make_subscribe_test_data(pubsub, type):
84
84
85
85
@pytest_asyncio .fixture ()
86
86
async def pubsub (r : redis .Redis ):
87
- p = r .pubsub ()
88
- yield p
89
- await p .close ()
87
+ async with r .pubsub () as p :
88
+ yield p
90
89
91
90
92
91
@pytest .mark .onlynoncluster
@@ -217,6 +216,44 @@ async def test_subscribe_property_with_patterns(self, pubsub):
217
216
kwargs = make_subscribe_test_data (pubsub , "pattern" )
218
217
await self ._test_subscribed_property (** kwargs )
219
218
219
+ async def test_aclosing (self , r : redis .Redis ):
220
+ p = r .pubsub ()
221
+ async with aclosing (p ):
222
+ assert p .subscribed is False
223
+ await p .subscribe ("foo" )
224
+ assert p .subscribed is True
225
+ assert p .subscribed is False
226
+
227
+ async def test_context_manager (self , r : redis .Redis ):
228
+ p = r .pubsub ()
229
+ async with p :
230
+ assert p .subscribed is False
231
+ await p .subscribe ("foo" )
232
+ assert p .subscribed is True
233
+ assert p .subscribed is False
234
+
235
+ async def test_close_is_aclose (self , r : redis .Redis ):
236
+ """
237
+ Test backwards compatible close method
238
+ """
239
+ p = r .pubsub ()
240
+ assert p .subscribed is False
241
+ await p .subscribe ("foo" )
242
+ assert p .subscribed is True
243
+ await p .close ()
244
+ assert p .subscribed is False
245
+
246
+ async def test_reset_is_aclose (self , r : redis .Redis ):
247
+ """
248
+ Test backwards compatible reset method
249
+ """
250
+ p = r .pubsub ()
251
+ assert p .subscribed is False
252
+ await p .subscribe ("foo" )
253
+ assert p .subscribed is True
254
+ await p .reset ()
255
+ assert p .subscribed is False
256
+
220
257
async def test_ignore_all_subscribe_messages (self , r : redis .Redis ):
221
258
p = r .pubsub (ignore_subscribe_messages = True )
222
259
@@ -233,7 +270,7 @@ async def test_ignore_all_subscribe_messages(self, r: redis.Redis):
233
270
assert p .subscribed is True
234
271
assert await wait_for_message (p ) is None
235
272
assert p .subscribed is False
236
- await p .close ()
273
+ await p .aclose ()
237
274
238
275
async def test_ignore_individual_subscribe_messages (self , pubsub ):
239
276
p = pubsub
@@ -350,7 +387,7 @@ async def test_channel_message_handler(self, r: redis.Redis):
350
387
assert await r .publish ("foo" , "test message" ) == 1
351
388
assert await wait_for_message (p ) is None
352
389
assert self .message == make_message ("message" , "foo" , "test message" )
353
- await p .close ()
390
+ await p .aclose ()
354
391
355
392
async def test_channel_async_message_handler (self , r ):
356
393
p = r .pubsub (ignore_subscribe_messages = True )
@@ -359,7 +396,7 @@ async def test_channel_async_message_handler(self, r):
359
396
assert await r .publish ("foo" , "test message" ) == 1
360
397
assert await wait_for_message (p ) is None
361
398
assert self .async_message == make_message ("message" , "foo" , "test message" )
362
- await p .close ()
399
+ await p .aclose ()
363
400
364
401
async def test_channel_sync_async_message_handler (self , r ):
365
402
p = r .pubsub (ignore_subscribe_messages = True )
@@ -371,7 +408,7 @@ async def test_channel_sync_async_message_handler(self, r):
371
408
assert await wait_for_message (p ) is None
372
409
assert self .message == make_message ("message" , "foo" , "test message" )
373
410
assert self .async_message == make_message ("message" , "bar" , "test message 2" )
374
- await p .close ()
411
+ await p .aclose ()
375
412
376
413
@pytest .mark .onlynoncluster
377
414
async def test_pattern_message_handler (self , r : redis .Redis ):
@@ -383,7 +420,7 @@ async def test_pattern_message_handler(self, r: redis.Redis):
383
420
assert self .message == make_message (
384
421
"pmessage" , "foo" , "test message" , pattern = "f*"
385
422
)
386
- await p .close ()
423
+ await p .aclose ()
387
424
388
425
async def test_unicode_channel_message_handler (self , r : redis .Redis ):
389
426
p = r .pubsub (ignore_subscribe_messages = True )
@@ -394,7 +431,7 @@ async def test_unicode_channel_message_handler(self, r: redis.Redis):
394
431
assert await r .publish (channel , "test message" ) == 1
395
432
assert await wait_for_message (p ) is None
396
433
assert self .message == make_message ("message" , channel , "test message" )
397
- await p .close ()
434
+ await p .aclose ()
398
435
399
436
@pytest .mark .onlynoncluster
400
437
# see: https://redis-py-cluster.readthedocs.io/en/stable/pubsub.html
@@ -410,7 +447,7 @@ async def test_unicode_pattern_message_handler(self, r: redis.Redis):
410
447
assert self .message == make_message (
411
448
"pmessage" , channel , "test message" , pattern = pattern
412
449
)
413
- await p .close ()
450
+ await p .aclose ()
414
451
415
452
async def test_get_message_without_subscribe (self , r : redis .Redis , pubsub ):
416
453
p = pubsub
@@ -524,7 +561,7 @@ async def test_channel_message_handler(self, r: redis.Redis):
524
561
await r .publish (self .channel , new_data )
525
562
assert await wait_for_message (p ) is None
526
563
assert self .message == self .make_message ("message" , self .channel , new_data )
527
- await p .close ()
564
+ await p .aclose ()
528
565
529
566
async def test_pattern_message_handler (self , r : redis .Redis ):
530
567
p = r .pubsub (ignore_subscribe_messages = True )
@@ -546,7 +583,7 @@ async def test_pattern_message_handler(self, r: redis.Redis):
546
583
assert self .message == self .make_message (
547
584
"pmessage" , self .channel , new_data , pattern = self .pattern
548
585
)
549
- await p .close ()
586
+ await p .aclose ()
550
587
551
588
async def test_context_manager (self , r : redis .Redis ):
552
589
async with r .pubsub () as pubsub :
@@ -556,7 +593,7 @@ async def test_context_manager(self, r: redis.Redis):
556
593
assert pubsub .connection is None
557
594
assert pubsub .channels == {}
558
595
assert pubsub .patterns == {}
559
- await pubsub .close ()
596
+ await pubsub .aclose ()
560
597
561
598
562
599
@pytest .mark .onlynoncluster
@@ -597,9 +634,9 @@ async def test_pubsub_numsub(self, r: redis.Redis):
597
634
598
635
channels = [(b"foo" , 1 ), (b"bar" , 2 ), (b"baz" , 3 )]
599
636
assert await r .pubsub_numsub ("foo" , "bar" , "baz" ) == channels
600
- await p1 .close ()
601
- await p2 .close ()
602
- await p3 .close ()
637
+ await p1 .aclose ()
638
+ await p2 .aclose ()
639
+ await p3 .aclose ()
603
640
604
641
@skip_if_server_version_lt ("2.8.0" )
605
642
async def test_pubsub_numpat (self , r : redis .Redis ):
@@ -608,7 +645,7 @@ async def test_pubsub_numpat(self, r: redis.Redis):
608
645
for i in range (3 ):
609
646
assert (await wait_for_message (p ))["type" ] == "psubscribe"
610
647
assert await r .pubsub_numpat () == 3
611
- await p .close ()
648
+ await p .aclose ()
612
649
613
650
614
651
@pytest .mark .onlynoncluster
@@ -621,7 +658,7 @@ async def test_send_pubsub_ping(self, r: redis.Redis):
621
658
assert await wait_for_message (p ) == make_message (
622
659
type = "pong" , channel = None , data = "" , pattern = None
623
660
)
624
- await p .close ()
661
+ await p .aclose ()
625
662
626
663
@skip_if_server_version_lt ("3.0.0" )
627
664
async def test_send_pubsub_ping_message (self , r : redis .Redis ):
@@ -631,7 +668,7 @@ async def test_send_pubsub_ping_message(self, r: redis.Redis):
631
668
assert await wait_for_message (p ) == make_message (
632
669
type = "pong" , channel = None , data = "hello world" , pattern = None
633
670
)
634
- await p .close ()
671
+ await p .aclose ()
635
672
636
673
637
674
@pytest .mark .onlynoncluster
0 commit comments