示例#1
0
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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
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)
示例#8
0
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)
示例#9
0
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)
示例#10
0
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}