blob: 8ec3fc25fc7a024da37f6bb193107b0fd4de67dc [file] [log] [blame]
Tony Mack79a49c82013-06-15 23:51:57 -04001import threading
2import requests, json
Sapan Bhatia66f4e612013-07-02 12:12:38 -04003
Sapan Bhatia66f4e612013-07-02 12:12:38 -04004from planetstack.config import Config
Sapan Bhatiadbaf1932013-09-03 11:28:52 -04005from observer.deleters import deleters
Tony Mack79a49c82013-06-15 23:51:57 -04006
Scott Bakerc1c45f82014-01-21 16:23:51 -08007import uuid
Sapan Bhatia9182b322013-06-25 16:22:14 -04008import os
9import base64
Tony Mack5c0c4552013-07-03 09:36:51 -040010from fofum import Fofum
Sapan Bhatiadbaf1932013-09-03 11:28:52 -040011import json
Sapan Bhatia9182b322013-06-25 16:22:14 -040012
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040013# decorator that marks dispatachable event methods
Tony Mack79a49c82013-06-15 23:51:57 -040014def event(func):
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040015 setattr(func, 'event', func.__name__)
16 return func
Tony Mack79a49c82013-06-15 23:51:57 -040017
18class EventHandler:
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040019 # This code is currently not in use.
20 def __init__(self):
21 pass
Tony Mack79a49c82013-06-15 23:51:57 -040022
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040023 @staticmethod
24 def get_events():
25 events = []
26 for name in dir(EventHandler):
27 attribute = getattr(EventHandler, name)
28 if hasattr(attribute, 'event'):
29 events.append(getattr(attribute, 'event'))
30 return events
Tony Mack79a49c82013-06-15 23:51:57 -040031
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040032 def dispatch(self, event, *args, **kwds):
33 if hasattr(self, event):
34 return getattr(self, event)(*args, **kwds)
35
36
Sapan Bhatia66f4e612013-07-02 12:12:38 -040037class EventSender:
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040038 def __init__(self,user=None,clientid=None):
39 try:
40 user = Config().feefie_client_user
41 except:
42 user = 'pl'
Sapan Bhatia66f4e612013-07-02 12:12:38 -040043
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040044 try:
45 clid = Config().feefie_client_id
46 except:
47 clid = self.random_client_id()
48
Sapan Bhatia66f4e612013-07-02 12:12:38 -040049
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040050 self.fofum = Fofum(user=user)
51 self.fofum.make(clid)
52
Scott Bakerc1c45f82014-01-21 16:23:51 -080053 def fire(self,**kwargs):
54 kwargs["uuid"] = str(uuid.uuid1())
55 print "YYY fire", kwargs
56 self.fofum.fire(json.dumps(kwargs))
Tony Mack79a49c82013-06-15 23:51:57 -040057
58class EventListener:
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040059 def __init__(self,wake_up=None):
60 self.handler = EventHandler()
61 self.wake_up = wake_up
Tony Mack79a49c82013-06-15 23:51:57 -040062
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040063 def handle_event(self, payload):
64 payload_dict = json.loads(payload)
Sapan Bhatia43c3a772013-07-03 11:19:07 -040065
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040066 try:
Scott Bakerc1c45f82014-01-21 16:23:51 -080067 deletion = payload_dict.get('delete_flag', False)
68 print "XXX", payload_dict, deletion
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040069 if (deletion):
70 model = payload_dict['model']
71 pk = payload_dict['pk']
Sapan Bhatiadbaf1932013-09-03 11:28:52 -040072
Scott Bakerc1c45f82014-01-21 16:23:51 -080073 print "XXX", model, pk, deleters
74
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040075 for deleter in deleters[model]:
Scott Bakerc1c45f82014-01-21 16:23:51 -080076 print "ZZZ executing deleter"
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040077 deleter(pk)
78 except:
79 deletion = False
Sapan Bhatia66f4e612013-07-02 12:12:38 -040080
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040081 if (not deletion and self.wake_up):
82 self.wake_up()
Scott Bakerc1c45f82014-01-21 16:23:51 -080083
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040084 def random_client_id(self):
Sapan Bhatia012ecff2013-10-09 10:56:06 -040085 try:
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040086 return self.client_id
Sapan Bhatia012ecff2013-10-09 10:56:06 -040087 except AttributeError:
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040088 self.client_id = base64.urlsafe_b64encode(os.urandom(12))
89 return self.client_id
Scott Bakerc1c45f82014-01-21 16:23:51 -080090
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040091 def run(self):
92 # This is our unique client id, to be used when firing and receiving events
93 # It needs to be generated once and placed in the config file
Sapan Bhatia66f4e612013-07-02 12:12:38 -040094
Sapan Bhatia9faf7b02013-10-09 10:27:14 -040095 try:
96 user = Config().feefie_client_user
97 except:
98 user = 'pl'
Sapan Bhatiab9c59342013-09-03 10:21:13 -040099
Sapan Bhatia9faf7b02013-10-09 10:27:14 -0400100 try:
101 clid = Config().feefie_client_id
102 except:
103 clid = self.random_client_id()
104
105 f = Fofum(user=user)
106
107 listener_thread = threading.Thread(target=f.listen_for_event,args=(clid,self.handle_event))
108 listener_thread.start()