-
Notifications
You must be signed in to change notification settings - Fork 0
/
__init__.py
53 lines (47 loc) · 1.5 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""
Handlers for Ciciol
Handlers are called to get notifications from some source of information
(like Twitter, rss feeds, ...)
"""
import threading
from time import sleep
class HandlerRunner(threading.Thread):
"""
Runner for threaded handlers
"""
def __init__(self, Handler, config):
"""
Receives an Handler and a config object
"""
self.running = True
if hasattr(Handler, "handler_config"):
h_config = config.get_handler_config(Handler.handler_config)
self.handler = Handler(h_config)
else:
self.handler = Handler()
self.config = config
self.backends = [Backend() for Backend in self.config["backends"]]
super(HandlerRunner, self).__init__()
def stop(self):
"""
Stops the thread execution
"""
self.running = False
def run(self):
"""
Thread run method
Checks for new notifications and sends it to all backends
"""
while self.running:
notifications = self.handler.get_notifications()
if notifications:
for backend in self.backends:
backend.notify(notifications)
try:
interval = self.handler.config["interval"]
except (AttributeError, KeyError):
interval = self.config["default_interval"]
for _ in range(interval):
if not self.running:
break
sleep(1)