Skip to content

Commit 23de0dd

Browse files
author
Sebastian Molenda
committed
improve error handling
1 parent 3d2372b commit 23de0dd

4 files changed

Lines changed: 16 additions & 1 deletion

File tree

pubnub/event_engine/effects.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,9 @@ def emit_message(self, invocation: invocations.EmitMessagesInvocation):
455455
self.message_worker._process_incoming_payload(subscribe_message)
456456

457457
def emit_status(self, invocation: invocations.EmitStatusInvocation):
458+
if isinstance(invocation.status, PNStatus):
459+
self.pubnub._subscription_manager._listener_manager.announce_status(invocation.status)
460+
return
458461
pn_status = PNStatus()
459462
pn_status.category = invocation.status
460463
pn_status.operation = invocation.operation

pubnub/event_engine/models/states.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from pubnub.event_engine.models import events
55
from pubnub.exceptions import PubNubException
66
from typing import List, Union
7+
from pubnub.models.consumer.pn_error_data import PNErrorData
78

89

910
class PNContext(dict):
@@ -272,6 +273,13 @@ def give_up(self, event: events.HandshakeReconnectGiveupEvent, context: PNContex
272273
if isinstance(event, Exception) and 'status' in event.reason:
273274
status_invocation = invocations.EmitStatusInvocation(status=event.reason.status.category,
274275
operation=PNOperationType.PNUnsubscribeOperation)
276+
elif isinstance(context.reason, PNErrorData):
277+
status_invocation = invocations.EmitStatusInvocation(PNStatusCategory.PNConnectionErrorCategory,
278+
context=self._context)
279+
elif isinstance(context.reason, PubNubException):
280+
status = context.reason.status
281+
status.category = PNStatusCategory.PNConnectionErrorCategory
282+
status_invocation = invocations.EmitStatusInvocation(status)
275283
else:
276284
status_invocation = invocations.EmitStatusInvocation(PNStatusCategory.PNConnectionErrorCategory)
277285

pubnub/utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ def is_subscribed_event(status):
9797

9898
def is_unsubscribed_event(status):
9999
assert isinstance(status, PNStatus)
100-
is_disconnect = status.category == PNStatusCategory.PNDisconnectedCategory
100+
is_disconnect = status.category in [PNStatusCategory.PNDisconnectedCategory,
101+
PNStatusCategory.PNUnexpectedDisconnectCategory,
102+
PNStatusCategory.PNConnectionErrorCategory]
103+
101104
is_unsubscribe = status.category == PNStatusCategory.PNAcknowledgmentCategory \
102105
and status.operation == PNOperationType.PNUnsubscribeOperation
103106
return is_disconnect or is_unsubscribe

tests/integrational/asyncio/test_heartbeat.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,4 @@ async def test_timeout_event_on_broken_heartbeat():
7171

7272
await pubnub.stop()
7373
await pubnub_listener.stop()
74+
await asyncio.sleep(0.5)

0 commit comments

Comments
 (0)