blob: 857452b8a85aab09f379e15e329f984ed15188d6 [file] [log] [blame]
Tony Mack79a49c82013-06-15 23:51:57 -04001import threading
2import requests, json
Sapan Bhatia66f4e612013-07-02 12:12:38 -04003
Tony Mack79a49c82013-06-15 23:51:57 -04004from core.models import *
Sapan Bhatia66f4e612013-07-02 12:12:38 -04005from planetstack.config import Config
Sapan Bhatiadbaf1932013-09-03 11:28:52 -04006from observer.deleters import deleters
Tony Mack79a49c82013-06-15 23:51:57 -04007
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 Bhatiab9c59342013-09-03 10:21:13 -040013# decorator that marks dispatachable event methods
Tony Mack79a49c82013-06-15 23:51:57 -040014def event(func):
Sapan Bhatiab9c59342013-09-03 10:21:13 -040015 setattr(func, 'event', func.__name__)
16 return func
Tony Mack79a49c82013-06-15 23:51:57 -040017
18class EventHandler:
Sapan Bhatiab9c59342013-09-03 10:21:13 -040019 # This code is currently not in use.
20 def __init__(self):
Tony Mack387a73f2013-09-18 07:59:14 -040021 pass
Tony Mack79a49c82013-06-15 23:51:57 -040022
Sapan Bhatiab9c59342013-09-03 10:21:13 -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 Bhatiab9c59342013-09-03 10:21:13 -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 Bhatiab9c59342013-09-03 10:21:13 -040038 def __init__(self,user=None,clientid=None):
39 try:
40 clid = Config().feefie_client_id
41 user = Config().feefie_client_user
42 except:
43 clid = 'planetstack_core_team'
44 user = 'pl'
Sapan Bhatia66f4e612013-07-02 12:12:38 -040045
Sapan Bhatiab9c59342013-09-03 10:21:13 -040046 self.fofum = Fofum(user=user)
47 self.fofum.make(clid)
Sapan Bhatia66f4e612013-07-02 12:12:38 -040048
Sapan Bhatiadbaf1932013-09-03 11:28:52 -040049 def fire(self,**args):
50 self.fofum.fire(json.dumps(args))
Tony Mack79a49c82013-06-15 23:51:57 -040051
52class EventListener:
Sapan Bhatiab9c59342013-09-03 10:21:13 -040053 def __init__(self,wake_up=None):
54 self.handler = EventHandler()
55 self.wake_up = wake_up
Tony Mack79a49c82013-06-15 23:51:57 -040056
Sapan Bhatiab9c59342013-09-03 10:21:13 -040057 def handle_event(self, payload):
58 payload_dict = json.loads(payload)
Sapan Bhatia43c3a772013-07-03 11:19:07 -040059
Sapan Bhatiab9c59342013-09-03 10:21:13 -040060 try:
61 deletion = payload_dict['deletion_flag']
62 if (deletion):
Sapan Bhatiadbaf1932013-09-03 11:28:52 -040063 model = payload_dict['model']
64 pk = payload_dict['pk']
65
66 for deleter in deleters[model]:
67 deleter(pk)
Sapan Bhatiab9c59342013-09-03 10:21:13 -040068 except:
69 deletion = False
Sapan Bhatia66f4e612013-07-02 12:12:38 -040070
Sapan Bhatiab9c59342013-09-03 10:21:13 -040071 if (not deletion and self.wake_up):
72 self.wake_up()
73
Sapan Bhatia9182b322013-06-25 16:22:14 -040074
Sapan Bhatiab9c59342013-09-03 10:21:13 -040075 def run(self):
76 # This is our unique client id, to be used when firing and receiving events
77 # It needs to be generated once and placed in the config file
Sapan Bhatia66f4e612013-07-02 12:12:38 -040078
Sapan Bhatiab9c59342013-09-03 10:21:13 -040079 try:
80 clid = Config().feefie_client_id
81 user = Config().feefie_client_user
82 except:
83 clid = 'planetstack_core_team'
84 user = 'pl'
85
86 f = Fofum(user=user)
87
88 listener_thread = threading.Thread(target=f.listen_for_event,args=(clid,self.handle_event))
89 listener_thread.start()