remove unnecessary import
[plstackapi.git] / planetstack / observer / event_manager.py
1 import threading
2 import requests, json
3
4 from planetstack.config import Config
5 from observer.deleters import deleters
6
7 import os
8 import base64
9 from fofum import Fofum
10 import json
11
12 # decorator that marks dispatachable event methods    
13 def event(func):
14     setattr(func, 'event', func.__name__)
15     return func         
16
17 class EventHandler:
18     # This code is currently not in use.
19     def __init__(self):
20         pass 
21
22     @staticmethod
23     def get_events():
24         events = []
25         for name in dir(EventHandler):
26             attribute = getattr(EventHandler, name)
27             if hasattr(attribute, 'event'):
28                 events.append(getattr(attribute, 'event'))
29         return events
30
31     def dispatch(self, event, *args, **kwds):
32         if hasattr(self, event):
33             return getattr(self, event)(*args, **kwds)
34             
35         
36 class EventSender:
37     def __init__(self,user=None,clientid=None):
38         try:
39             clid = Config().feefie_client_id
40             user = Config().feefie_client_user
41         except:
42             clid = 'planetstack_core_team'
43             user = 'pl'
44
45         self.fofum = Fofum(user=user)
46         self.fofum.make(clid)
47
48     def fire(self,**args):
49         self.fofum.fire(json.dumps(args))
50
51 class EventListener:
52     def __init__(self,wake_up=None):
53         self.handler = EventHandler()
54         self.wake_up = wake_up
55
56     def handle_event(self, payload):
57         payload_dict = json.loads(payload)
58
59         try:
60             deletion = payload_dict['deletion_flag']
61             if (deletion):
62                 model = payload_dict['model']
63                 pk = payload_dict['pk']
64
65                 for deleter in deleters[model]:
66                     deleter(pk)
67         except:
68             deletion = False
69
70         if (not deletion and self.wake_up):
71             self.wake_up()
72         
73
74     def run(self):
75         # This is our unique client id, to be used when firing and receiving events
76         # It needs to be generated once and placed in the config file
77
78         try:
79             clid = Config().feefie_client_id
80             user = Config().feefie_client_user
81         except:
82             clid = 'planetstack_core_team'
83             user = 'pl'
84
85         f = Fofum(user=user)
86         
87         listener_thread = threading.Thread(target=f.listen_for_event,args=(clid,self.handle_event))
88         listener_thread.start()