Example #1
0
                "<%s>, [location2poiprob] [KeyError] params=%s, should have key: %s"
                % (x_request_id, incoming_data, key))
            result['message'] = "Params content Error: can't find key=%s" % (
                key)
            result['code'] = 103
            return make_response(json.dumps(result), 400)

    user_id = incoming_data['userId']
    user_trace = incoming_data['user_trace']
    dev_key = incoming_data['dev_key']
    logger.info(
        '<%s>, [location2poiprob] params: userId=%s, user_trace=%s, dev_key=%s'
        % (x_request_id, user_id, user_trace, dev_key))

    # validate user_trace
    if not util.validate_user_trace(user_trace):
        result['message'] = "Unvalid user_trace: %s" % (user_trace)
        result['code'] = 103
        return make_response(json.dumps(result), 400)

    # request senz.datasource.poi:/senz/poi/
    poi_request = {
        'userId': user_id,
        'dev_key': dev_key,
        'locations': user_trace
    }
    poi_response = requests.post(POI_URL, data=json.dumps(poi_request))
    if poi_response.status_code != 200:
        logger.error(
            '<%s>, [location2poiprob] Request poi encounter %s Server Error, url=%s, request=%s'
            % (x_request_id, poi_response.status_code, POI_URL, poi_request))
    # params key checking
    for key in ['userId', 'user_trace', 'dev_key']:
        if key not in incoming_data:
            logger.error("<%s>, [location2poiprob] [KeyError] params=%s, should have key: %s" % (x_request_id, incoming_data, key))
            result['message'] = "Params content Error: can't find key=%s" % (key)
            result['code'] = 103
            return make_response(json.dumps(result), 400)

    user_id = incoming_data['userId']
    user_trace = incoming_data['user_trace']
    dev_key = incoming_data['dev_key']
    logger.info('<%s>, [location2poiprob] params: userId=%s, user_trace=%s, dev_key=%s'
                % (x_request_id, user_id, user_trace, dev_key))

    # validate user_trace
    if not util.validate_user_trace(user_trace):
        result['message'] = "Unvalid user_trace: %s" % (user_trace)
        result['code'] = 103
        return make_response(json.dumps(result), 400)

    # request senz.datasource.poi:/senz/poi/
    poi_request = {'userId': user_id, 'dev_key': dev_key, 'locations': user_trace}
    poi_response = requests.post(POI_URL, data=json.dumps(poi_request))
    if poi_response.status_code != 200:
        logger.error('<%s>, [location2poiprob] Request poi encounter %s Server Error, url=%s, request=%s'
                     % (x_request_id, poi_response.status_code, POI_URL, poi_request))
        result['message'] = 'Request poi encounter %s Server Error' % (poi_response.status_code)
        result['code'] = 302
        return make_response(json.dumps(result), 500)
    poi_results = poi_response.json()
    poi_results = poi_results['results']['parse_poi']
    except ValueError, err_msg:
        logger.exception('<%s>, [location2poiprob] [ValueError] err_msg: %s, params=%s' % (x_request_id, err_msg, request.data))
        result['message'] = 'Invalid params: NOT a JSON Object'
        result['code'] = 103
        return make_response(json.dumps(result), 400)

    # params key checking
    for key in ['userId', 'user_trace', 'dev_key']:
        if key not in incoming_data:
            logger.error("<%s>, [location2poiprob] [KeyError] params=%s, should have key: %s" % (x_request_id, incoming_data, key))
            result['message'] = "Params content Error: can't find key=%s" % (key)
            result['code'] = 103
            return make_response(json.dumps(result), 400)

    # validate user_trace
    if not util.validate_user_trace(incoming_data['user_trace']):
        result['message'] = "Invalid user_trace: %s" % (incoming_data['user_trace'])
        result['code'] = 103
        return make_response(json.dumps(result), 400)

    user_id = incoming_data['userId']
    user_trace = incoming_data['user_trace']
    dev_key = incoming_data['dev_key']
    logger.info('<%s>, [location2poiprob] valid params: userId=%s, user_trace=%s, dev_key=%s'
                % (x_request_id, user_id, user_trace, dev_key))

    # async request senz.datasource.poi:/senz/places/, for data record
    places_request = {'userId': user_id, 'dev_key': dev_key, 'locations': user_trace}
    places_greenlet = gevent.spawn(requests.post, PLACE_URL, data=json.dumps(places_request))

    # async request senz.parserhub.poi:/pois/