Example #1
0
def geolocate_post(request):
    data = request.validated
    session = request.db_slave_session
    result = None

    api_key = request.GET.get('key', None)
    if api_key is not None:
        if data['wifiAccessPoints']:
            result = search_wifi_ap(session, data)
        else:
            result = search_cell_tower(session, data)
    else:
        result = HTTPBadRequest()
        result.content_type = 'application/json'
        result.body = NO_API_KEY
        return result

    if result is None:
        result = HTTPNotFound()
        result.content_type = 'application/json'
        result.body = NOT_FOUND
        return result

    return {
        "location": {
            "lat": result['lat'],
            "lng": result['lon'],
        },
        "accuracy": float(result['accuracy']),
    }
Example #2
0
def geolocate_view(request):
    api_key = request.GET.get('key', None)
    heka_client = get_heka_client()

    if api_key is None:
        heka_client.incr('geolocate.no_api_key')

        result = HTTPBadRequest()
        result.content_type = 'application/json'
        result.body = NO_API_KEY
        return result

    heka_client.incr('geolocate.api_key.%s' % api_key.replace('.', '__'))

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONError,
    )

    session = request.db_slave_session
    result = None

    if data['wifiAccessPoints']:
        result = search_wifi_ap(session, data)
        if result is not None:
            heka_client.incr('geolocate.wifi_hit')
    else:
        result = search_cell_tower(session, data)
        if result is not None:
            heka_client.incr('geolocate.cell_hit')

    if result is None and request.client_addr:
        result = search_geoip(request.registry.geoip_db,
                              request.client_addr)
        if result is not None:
            heka_client.incr('geolocate.geoip_hit')

    if result is None:
        heka_client.incr('geolocate.miss')
        result = HTTPNotFound()
        result.content_type = 'application/json'
        result.body = NOT_FOUND
        return result

    return {
        "location": {
            "lat": result['lat'],
            "lng": result['lon'],
        },
        "accuracy": float(result['accuracy']),
    }
Example #3
0
def geolocate_view(request):
    api_key = request.GET.get('key', None)
    heka_client = get_heka_client()

    if api_key is None:
        heka_client.incr('geolocate.no_api_key')

        result = HTTPBadRequest()
        result.content_type = 'application/json'
        result.body = NO_API_KEY
        return result

    heka_client.incr('geolocate.api_key.%s' % api_key.replace('.', '__'))

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONError,
    )

    session = request.db_slave_session
    result = None

    if data['wifiAccessPoints']:
        result = search_wifi_ap(session, data)
        if result is not None:
            heka_client.incr('geolocate.wifi_hit')
    else:
        result = search_cell_tower(session, data)
        if result is not None:
            heka_client.incr('geolocate.cell_hit')

    if result is None and request.client_addr:
        result = search_geoip(request.registry.geoip_db, request.client_addr)
        if result is not None:
            heka_client.incr('geolocate.geoip_hit')

    if result is None:
        heka_client.incr('geolocate.miss')
        result = HTTPNotFound()
        result.content_type = 'application/json'
        result.body = NOT_FOUND
        return result

    return {
        "location": {
            "lat": result['lat'],
            "lng": result['lon'],
        },
        "accuracy": float(result['accuracy']),
    }
Example #4
0
def echo_json_ignore_extra_data(request):
    try:
        return parser.parse(hello_exclude_schema, request)
    except json.JSONDecodeError:
        error = HTTPBadRequest()
        error.body = json.dumps(["Invalid JSON."]).encode("utf-8")
        error.content_type = "application/json"
        raise error
Example #5
0
def echo_json_or_form(request):
    try:
        return parser.parse(hello_args, request, location="json_or_form")
    except json.JSONDecodeError:
        error = HTTPBadRequest()
        error.body = json.dumps(["Invalid JSON."]).encode("utf-8")
        error.content_type = "application/json"
        raise error
Example #6
0
def post_event(request):
    '''
    Get data for a specific event by ID.

    This returns the event object, populated by all date range objects
    '''
    try:
        filtered_request = __user_filter.set_user_id(request)
        response = __event_service.create_event(filtered_request)
    except BaseAppException as e:
        response = HTTPBadRequest()
        response.text = e.get_payload()
        response.content_type = 'application/json'

    return response
Example #7
0
def put_event(request):
    '''
    Update an existing date rang in this eventDetails

    If this eventDetails has existing date ranges, this will update
    the one with the correspodning composite id.
    '''
    try:
        json_body = __user_filter.set_user_id(request.json_body)
        response = __event_service.update_event(json_body)
    except BaseAppException as e:
        response = HTTPBadRequest()
        response.text = e.get_payload()
        response.content_type = 'application/json'

    return response
Example #8
0
def get_event_attendees(request):
    '''
    Returns all attendees in this event's attendee list

    /events/{id}/attendees
    Returns a JSON list of names and email addresses
    '''

    try:
        filtered_request = __user_filter.set_user_id(request)
        response = __event_service.add_event_attendee(filtered_request)
    except BaseAppException as e:
        response = HTTPBadRequest()
        response.text = e.get_payload()
        response.content_type = 'application/json'

    return response
Example #9
0
def delete_event_attendee(request):
    '''
    Remove this attendee from the event.

    /events/{id}/attendees/{id}
    Returns 200 if ok. Removes this attendee from the event's attendee list.
    '''

    try:
        filtered_request = __user_filter.set_user_id(request)
        response = __attendee_service.remove_attendee_from_event(
            filtered_request)
    except BaseAppException as e:
        response = HTTPBadRequest()
        response.text = e.get_payload()
        response.content_type = 'application/json'

    return response
Example #10
0
def post_event_attendees(request):
    '''
    create an attendee and add it to this event

    /events/{id}/attendees
    The user making this request is added to the event attendees list. If no ID
    is found in cookies, a new attendee instance is created and the user id
    cookie is generated. If a valid user ID cookie is found, it uses the
    provided user id
    '''

    try:
        filtered_request = __user_filter.set_user_id(request)
        response = __event_service.add_event_attendee(filtered_request)
    except BaseAppException as e:
        response = HTTPBadRequest()
        response.text = e.get_payload()
        response.content_type = 'application/json'

    return response
Example #11
0
        def closure(request, *args, **kwargs):
            api_key = request.GET.get('key', None)
            heka_client = get_heka_client()

            if api_key is None:
                heka_client.incr('%s.no_api_key' % func_name)
                if error_on_invalidkey:
                    result = HTTPBadRequest()
                    result.content_type = 'application/json'
                    result.body = NO_API_KEY
                    return result
            else:
                session = request.db_slave_session
                found_key_filter = session.query(ApiKey)
                found_key_filter = found_key_filter.filter(ApiKey.valid_key == api_key)
                if found_key_filter.count():
                    heka_client.incr('%s.api_key.%s' % (func_name, api_key.replace('.', '__')))
                else:
                    heka_client.incr('%s.unknown_api_key' % func_name)

            return func(request, *args, **kwargs)
Example #12
0
 def createResponse(self, output, status_code):
     res = HTTPBadRequest()
     res.text = json.dumps(output)
     res.content_type = 'application/json'
     res.status = status_code
     return res
Example #13
0
 def invalid_api_key(self):
     response = HTTPBadRequest()
     response.content_type = 'application/json'
     response.body = INVALID_API_KEY
     return response
Example #14
0
def invalid_api_key_response():
    result = HTTPBadRequest()
    result.content_type = 'application/json'
    result.body = INVALID_API_KEY
    return result
Example #15
0
def invalid_api_key_response():
    result = HTTPBadRequest()
    result.content_type = 'application/json'
    result.body = INVALID_API_KEY
    return result