def getTimeseriesEntries(time_type): if 'user' not in request.json: abort(401, "only a user can read his/her data") user_uuid = getUUID(request) key_list = request.json['key_list'] if 'from_local_date' in request.json and 'to_local_date' in request.json: start_time = request.json['from_local_date'] end_time = request.json['to_local_date'] time_query = esttc.TimeComponentQuery("metadata.write_ts", start_time, end_time) else: start_time = request.json['start_time'] end_time = request.json['end_time'] time_query = estt.TimeQuery("metadata.write_ts", start_time, end_time) # Note that queries from usercache are limited to 100,000 entries # and entries from timeseries are limited to 250,000, so we will # return at most 350,000 entries. So this means that we don't need # additional filtering, but this should be documented in # the API data_list = esdc.find_entries(user_uuid, key_list, time_query) return {'phone_data': data_list}
def getTimeseriesEntries(time_type): if 'user' not in request.json: abort(401, "only a user can read his/her data") user_uuid = getUUID(request) key_list = request.json['key_list'] if 'from_local_date' in request.json and 'to_local_date' in request.json: start_time = request.json['from_local_date'] end_time = request.json['to_local_date'] time_query = esttc.TimeComponentQuery("metadata.write_ts", start_time, end_time) else: start_time = request.json['start_time'] end_time = request.json['end_time'] time_query = estt.TimeQuery("metadata.write_ts", start_time, end_time) # Note that queries from usercache are limited to 100,000 entries # and entries from timeseries are limited to 250,000, so we will # return at most 350,000 entries. So this means that we don't need # additional filtering, but this should be documented in # the API data_list = esdc.find_entries(user_uuid, key_list, time_query) return {'phone_data': data_list}
def getUUID(request, inHeader=False): try: retUUID = enaa.getUUID(request, auth_method, inHeader) logging.debug("retUUID = %s" % retUUID) if retUUID is None: raise HTTPError(403, "token is valid, but no account found for user") return retUUID except ValueError as e: traceback.print_exc() abort(401, e.message)
def getUUID(request, inHeader=False): try: retUUID = enaa.getUUID(request, auth_method, inHeader) logging.debug("retUUID = %s" % retUUID) if retUUID is None: raise HTTPError(403, "token is valid, but no account found for user") return retUUID except ValueError as e: traceback.print_exc() abort(401, e.message)
def createUserProfile(): try: logging.debug("Called createUserProfile") userEmail = enaa._getEmail(request, auth_method) logging.debug("userEmail = %s" % userEmail) user = User.register(userEmail) logging.debug("Looked up user = %s" % user) logging.debug("Returning result %s" % {'uuid': str(user.uuid)}) return {'uuid': str(user.uuid)} except ValueError as e: traceback.print_exc() abort(403, e.message)
def createUserProfile(): try: logging.debug("Called createUserProfile") userEmail = enaa._getEmail(request, auth_method) logging.debug("userEmail = %s" % userEmail) user = User.register(userEmail) logging.debug("Looked up user = %s" % user) logging.debug("Returning result %s" % {'uuid': str(user.uuid)}) return {'uuid': str(user.uuid)} except ValueError as e: traceback.print_exc() abort(403, e.message)
def habiticaJoinGroup(group_id): if 'user' in request.json: user_uuid = getUUID(request) else: user_uuid = None inviter_id = request.json['inviter'] logging.debug("%s about to join party %s after invite from %s" % (user_uuid, group_id, inviter_id)) try: ret_val = habitproxy.setup_party(user_uuid, group_id, inviter_id) logging.debug("ret_val = %s after joining group" % bson.json_util.dumps(ret_val)) return {'result': ret_val} except RuntimeError as e: logging.info("Aborting call with message %s" % e.message) abort(400, e.message)
def habiticaJoinGroup(group_id): if 'user' in request.json: user_uuid = getUUID(request) else: user_uuid = None inviter_id = request.json['inviter'] logging.debug("%s about to join party %s after invite from %s" % (user_uuid, group_id, inviter_id)) try: ret_val = habitproxy.setup_party(user_uuid, group_id, inviter_id) logging.debug("ret_val = %s after joining group" % bson.json_util.dumps(ret_val)) return {'result': ret_val} except RuntimeError as e: logging.info("Aborting call with message %s" % e.message) abort(400, e.message)
def get_user_or_aggregate_auth(request): # If this is not an aggregate call, returns the uuid # If this is an aggregate call, returns None if the call is valid, otherwise aborts # we only support aggregates on a subset of calls, so we don't need the # `inHeader` parameter to `getUUID` aggregate_call_map = { "no_auth": lambda r: None, "user_only": lambda r: None if _get_uuid_bool_wrapper(request) else abort(403, "aggregations only available to users"), "never": lambda r: abort(404, "Aggregate calls not supported") } if request.json["aggregate"] == False: logging.debug("User specific call, returning UUID") return getUUID(request) else: logging.debug(f"Aggregate call, checking {aggregate_call_auth} policy") return aggregate_call_map[aggregate_call_auth](request)
def getTimeseriesEntries(time_type): if 'user' not in request.json: abort(401, "only a user can read his/her data") user_uuid = getUUID(request) key_list = request.json['key_list'] if 'from_local_date' in request.json and 'to_local_date' in request.json: start_time = request.json['from_local_date'] end_time = request.json['to_local_date'] time_key = request.json.get('key_local_date', 'metadata.write_ts') time_query = esttc.TimeComponentQuery(time_key, start_time, end_time) else: start_time = request.json['start_time'] end_time = request.json['end_time'] time_key = request.json.get('key_time', 'metadata.write_ts') time_query = estt.TimeQuery(time_key, start_time, end_time) # Note that queries from usercache are limited to 100,000 entries # and entries from timeseries are limited to 250,000, so we will # return at most 350,000 entries. So this means that we don't need # additional filtering, but this should be documented in # the API data_list = esdc.find_entries(user_uuid, key_list, time_query) if 'max_entries' in request.json: me = request.json['max_entries'] if (type(me) != int): logging.error("aborting: max entry count is %s, type %s, expected int" % (me, type(me))) abort(500, "Invalid max_entries %s" % me) if len(data_list) > me: if request.json['trunc_method'] == 'first': logging.debug("first n entries is %s" % me) data_list = data_list[:me] if request.json['trunc_method'] == 'last': logging.debug("first n entries is %s" % me) data_list = data_list[-me:] elif request.json["trunc_method"] == "sample": sample_rate = len(data_list)//me + 1 logging.debug("sampling rate is %s" % sample_rate) data_list = data_list[::sample_rate] else: logging.error("aborting: unexpected sampling method %s" % request.json["trunc_method"]) abort(500, "sampling method not specified while retriving limited data") else: logging.debug("Found %d entries < %s, no truncation" % (len(data_list), me)) logging.debug("successfully returning list of size %s" % len(data_list)) return {'phone_data': data_list}