Exemplo n.º 1
0
def geolocate_view(request):

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        response=JSONParseError,
        accept_empty=True,
    )

    data = map_data(data)
    session = request.db_slave_session
    result = search_all_sources(session,
                                'geolocate',
                                data,
                                client_addr=request.client_addr,
                                geoip_db=request.registry.geoip_db,
                                api_key_log=getattr(request, 'api_key_log',
                                                    False),
                                api_key_name=getattr(request, 'api_key_name',
                                                     None))

    if not result:
        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']),
    }
Exemplo n.º 2
0
def geolocate_view(request):

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONParseError,
        accept_empty=True,
    )

    data = map_data(data)
    session = request.db_slave_session
    result = search_all_sources(
        session, 'geolocate', data,
        client_addr=request.client_addr,
        geoip_db=request.registry.geoip_db,
        api_key_log=getattr(request, 'api_key_log', False),
        api_key_name=getattr(request, 'api_key_name', None))

    if not result:
        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']),
    }
Exemplo n.º 3
0
def process_single(request):
    stats_client = get_stats_client()

    locate_data, locate_errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONParseError,
        accept_empty=True,
    )

    data, errors = preprocess_request(
        request,
        schema=GeoSubmitSchema(),
        extra_checks=(geosubmit_validator, ),
        response=None,
    )
    data = {'items': [data]}

    nickname = request.headers.get('X-Nickname', u'')
    email = request.headers.get('X-Email', u'')
    upload_items = flatten_items(data)
    errors = process_upload(nickname, email, upload_items)

    if errors is not SENTINEL and errors:  # pragma: no cover
        stats_client.incr('geosubmit.upload.errors', len(errors))

    first_item = data['items'][0]
    if first_item['latitude'] == -255 or first_item['longitude'] == -255:
        data = map_data(data['items'][0])
        session = request.db_slave_session
        result = search_all_sources(
            session,
            'geosubmit',
            data,
            client_addr=request.client_addr,
            geoip_db=request.registry.geoip_db,
            api_key_log=getattr(request, 'api_key_log', False),
            api_key_name=getattr(request, 'api_key_name', None))
    else:
        result = {
            'lat': first_item['latitude'],
            'lon': first_item['longitude'],
            'accuracy': first_item['accuracy']
        }

    if result is None:
        stats_client.incr('geosubmit.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']),
    }
Exemplo n.º 4
0
def process_single(request):
    stats_client = get_stats_client()

    locate_data, locate_errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        extra_checks=(geolocate_validator, ),
        response=JSONParseError,
        accept_empty=True,
    )

    data, errors = preprocess_request(
        request,
        schema=GeoSubmitSchema(),
        extra_checks=(geosubmit_validator,),
        response=None,
    )
    data = {'items': [data]}

    nickname = request.headers.get('X-Nickname', u'')
    email = request.headers.get('X-Email', u'')
    upload_items = flatten_items(data)
    errors = process_upload(nickname, email, upload_items)

    if errors is not SENTINEL and errors:  # pragma: no cover
        stats_client.incr('geosubmit.upload.errors', len(errors))

    first_item = data['items'][0]
    if first_item['latitude'] == -255 or first_item['longitude'] == -255:
        data = map_data(data['items'][0])
        session = request.db_slave_session
        result = search_all_sources(
            session, 'geosubmit', data,
            client_addr=request.client_addr,
            geoip_db=request.registry.geoip_db,
            api_key_log=getattr(request, 'api_key_log', False),
            api_key_name=getattr(request, 'api_key_name', None))
    else:
        result = {'lat': first_item['latitude'],
                  'lon': first_item['longitude'],
                  'accuracy': first_item['accuracy']}

    if result is None:
        stats_client.incr('geosubmit.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']),
    }
Exemplo n.º 5
0
def country_view(request):
    client_addr = request.client_addr
    geoip_db = request.registry.geoip_db

    if request.body in EMPTY and client_addr and geoip_db is not None:
        # Optimize common case of geoip-only request
        country = geoip_db.country_lookup(client_addr)
        if country:
            result = HTTPOk()
            result.content_type = 'application/json'
            result.text = '{"country_code": "%s", "country_name": "%s"}' % (
                country.code, country.name)
            return result
        else:
            result = HTTPNotFound()
            result.content_type = 'application/json'
            result.body = NOT_FOUND
            return result

    data, errors = preprocess_request(
        request,
        schema=GeoLocateSchema(),
        response=JSONParseError,
        accept_empty=True,
    )
    data = map_data(data, client_addr=client_addr)

    session = request.db_slave_session
    result = CountrySearcher(
        {
            'geoip': geoip_db,
            'session': session
        },
        api_key_log=False,
        api_key_name=None,
        api_name='country',
    ).search(data)

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

    return result