aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenz Diener <[email protected]>2017-11-24 15:08:34 +0100
committerLorenz Diener <[email protected]>2017-11-24 15:08:34 +0100
commite220e7cc60839ee1e3b27781b3b1cb609e593f85 (patch)
tree0575d9a30ad250247f7b3bb171cedfb0d4e8af60 /mastodon/streaming.py
parentcea4d4251a0b998ae734811ee78651d60a138d3e (diff)
downloadmastodon.py-e220e7cc60839ee1e3b27781b3b1cb609e593f85.tar.gz
Many fixes for streaming stuff
Diffstat (limited to 'mastodon/streaming.py')
-rw-r--r--mastodon/streaming.py44
1 files changed, 38 insertions, 6 deletions
diff --git a/mastodon/streaming.py b/mastodon/streaming.py
index cac2456..92a02dc 100644
--- a/mastodon/streaming.py
+++ b/mastodon/streaming.py
@@ -67,10 +67,6 @@ class StreamListener(object):
67 else: 67 else:
68 event[key] = value 68 event[key] = value
69 69
70 # end of stream
71 if event:
72 log.warn("outstanding partial event at end of stream: %s", event)
73
74 def _dispatch(self, event): 70 def _dispatch(self, event):
75 try: 71 try:
76 name = event['event'] 72 name = event['event']
@@ -92,8 +88,44 @@ class StreamListener(object):
92 handler_name = 'on_' + name 88 handler_name = 'on_' + name
93 try: 89 try:
94 handler = getattr(self, handler_name) 90 handler = getattr(self, handler_name)
95 except AttributeError: 91 except AttributeError as err:
96 log.warn("Unhandled event '%s'", name) 92 six.raise_from(
93 MastodonMalformedEventError('Bad event type', name),
94 err
95 )
97 else: 96 else:
98 # TODO: allow handlers to return/raise to stop streaming cleanly 97 # TODO: allow handlers to return/raise to stop streaming cleanly
99 handler(payload) 98 handler(payload)
99
100class CallbackStreamListener(StreamListener):
101 """
102 Simple callback stream handler class.
103 Can optionally additionally send local update events to a separate handler.
104 """
105 def __init__(self, update_handler = None, local_update_handler = None, delete_handler = None, notification_handler = None):
106 super(CallbackStreamListener, self).__init__()
107 self.update_handler = update_handler
108 self.local_update_handler = local_update_handler
109 self.delete_handler = delete_handler
110 self.notification_handler = notification_handler
111
112 def on_update(self, status):
113 if self.update_handler != None:
114 self.update_handler(status)
115
116 try:
117 if self.local_update_handler != None and not "@" in status["account"]["acct"]:
118 self.local_update_handler(status)
119 except Exception as err:
120 six.raise_from(
121 MastodonMalformedEventError('received bad update', status),
122 err
123 )
124
125 def on_delete(self, deleted_id):
126 if self.delete_handler != None:
127 self.delete_handler(deleted_id)
128
129 def on_notification(self, notification):
130 if self.notification_handler != None:
131 self.notification_handler(notification) \ No newline at end of file
Powered by cgit v1.2.3 (git 2.41.0)