55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
import copy
|
|
|
|
__all__ = 'HandlerEvent',
|
|
|
|
|
|
class HandlerEvent:
|
|
tb = 'event'
|
|
|
|
def __init__(self, db_client):
|
|
self.event = dict()
|
|
self.db_client = db_client
|
|
|
|
def merge_update(self, a: dict, b: dict):
|
|
"""
|
|
可更新事件 合并
|
|
:param a:
|
|
:param b:
|
|
:return:
|
|
"""
|
|
if 'properties' not in b or not isinstance(b['properties'], dict):
|
|
return
|
|
for k, v in b['properties'].items():
|
|
a[k] = v
|
|
|
|
def track(self, db, data):
|
|
event = self.event.setdefault(db, {})
|
|
event[len(event)] = data
|
|
|
|
def track_update(self, db, data):
|
|
if '#event_id' not in data:
|
|
return
|
|
old_event = self.db_client.get_one(db, self.tb, {'#event_id': data['#event_id']})
|
|
old_event['sign'] = -1
|
|
event = self.event.setdefault(db, {})
|
|
event[len(event)] = old_event
|
|
|
|
new_event = copy.deepcopy(old_event)
|
|
self.merge_update(new_event, data)
|
|
new_event['sign'] = 1
|
|
event[len(event)] = new_event
|
|
|
|
def track_overwrite(self, db, data):
|
|
if '#event_id' not in data:
|
|
return
|
|
old_event = self.db_client.get_one(db, self.tb, {'#event_id': data['#event_id']})
|
|
old_event['sign'] = -1
|
|
event = self.event.setdefault(db, {})
|
|
event[len(event)] = old_event
|
|
|
|
event[len(event)] = data
|
|
|
|
@property
|
|
def buffer_pool(self):
|
|
return self.tb, self.event
|