Beispiel #1
0
def test_get_location_coordinates_does_not_exists():
    db = Manifest()
    
    latitude, longitude, name = helper.get_test_location()

    name = '%s-%s' % (name, helper.random_string(10))
    latitude = helper.random_coordinate(latitude, 1)
    longitude = helper.random_coordinate(longitude, 1)

    location = db.get_location_coordinates(name)

    assert location is None
Beispiel #2
0
def test_get_location_coordinates_exists():
    db = Manifest()
    
    latitude, longitude, name = helper.get_test_location()

    name = '%s-%s' % (name, helper.random_string(10))
    latitude = helper.random_coordinate(latitude, 1)
    longitude = helper.random_coordinate(longitude, 1)

    db.add_location(latitude, longitude, name)

    location = db.get_location_coordinates(name)

    assert location is not None
    assert location[0] == latitude
    assert location[1] == longitude
Beispiel #3
0
def coordinates_by_name(name):
    # Try to get cached location first
    db = Manifest()
    cached_coordinates = db.get_location_coordinates(name)
    if (cached_coordinates is not None):
        return {
            'latitude': cached_coordinates[0],
            'longitude': cached_coordinates[1]
        }

    # If the name is not cached then we go ahead with an API lookup
    geolocation_info = lookup(location=name)

    if (geolocation_info is not None):
        if ('results' in geolocation_info
                and len(geolocation_info['results']) != 0
                and 'locations' in geolocation_info['results'][0]
                and len(geolocation_info['results'][0]['locations']) != 0):

            # By default we use the first entry unless we find one with
            #   geocodeQuality=city.
            geolocation_result = geolocation_info['results'][0]
            use_location = geolocation_result['locations'][0]['latLng']
            # Loop over the locations to see if we come accross a
            #   geocodeQuality=city.
            # If we find a city we set that to the use_location and break
            for location in geolocation_result['locations']:
                if ('latLng' in location and 'lat' in location['latLng']
                        and 'lng' in location['latLng']
                        and location['geocodeQuality'].lower() == 'city'):
                    use_location = location['latLng']
                    break

            return {
                'latitude': use_location['lat'],
                'longitude': use_location['lng']
            }

    return None