#
# See LICENCE for detail
# Copyright (c) 2014 IRI
#
import copy
import datetime
import uuid
import json
from dateutil.tz import tzutc
from models import insert_annot_async
class BaseProtocol(object) :
def _init_props(self, ws_factory, conn):
self.conn = conn
self.ws_factory = ws_factory
"""
Mixin class to add helper methods
"""
def process_annotation(self, params):
now = datetime.datetime.now(tzutc())
ts = params.setdefault('ts', now)
if ts.tzinfo is None:
ts = ts.replace(tzinfo=tzutc())
params['ts'] = ts
uuid_val = params.setdefault('uuid', uuid.uuid4())
params_broadcast = copy.copy(params)
params_broadcast.update({ 'ts' : ts.isoformat() })
params_broadcast['ts_server'] = now.isoformat()
params_broadcast['uuid'] = str(params_broadcast['uuid'])
#broadcast to websocket
self.ws_factory.broadcast(json.dumps(params_broadcast), params_broadcast)
#TODO treat errors
return insert_annot_async(params, self.conn)