from collections import OrderedDict import dateutil.parser import pytz import json import datetime import cherrypy LEVEL_DEBUG=0 LEVEL_INFO=50 LEVEL_WARN=75 LEVEL_ERR=100 EXCHANGE="secpi" QUEUE_LOG="secpi-log" QUEUE_DATA="secpi-data" QUEUE_ALARM="secpi-alarm" QUEUE_ON_OFF="secpi-on_off" QUEUE_ACTION="secpi-action-" QUEUE_CONFIG="secpi-config-" QUEUE_INIT_CONFIG="secpi-init_config" def filter_fields(fields, filter): filtered_data = OrderedDict() for k,v in fields.iteritems(): if filter in v['visible']: filtered_data[k] = v return filtered_data def str_to_value(val): # print("checking %s: %s\n"%(val, type(val))) if(type(val) is str or type(val) is unicode): if(val=="None"): return None if(val.lower()=="true"): return True if(val.lower()=="false"): return False try: return int(val) except ValueError: try: return float(val) except ValueError: try: dat = dateutil.parser.parse(val) return dat.replace(tzinfo=None) #pytz.UTC.localize(dat) except: return val return val def check_late_arrival(date_message): date_now = datetime.datetime.now() if (date_now - date_message) < datetime.timedelta(0,30): #TODO: make delta configurable? return False else: return True class SpecialJSONEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime.date): return obj.isoformat() return json.JSONEncoder.default(obj) json_encoder = SpecialJSONEncoder() def json_handler(*args, **kwargs): # Adapted from cherrypy/lib/jsontools.py value = cherrypy.serving.request._json_inner_handler(*args, **kwargs) return json_encoder.iterencode(value)