def test_non_dict_entity():
    entity = "string"

    try:
        geocoding.add_location(entity)
    except Exception as e:
        assert isinstance(e, TypeError)
def test_caching(air_quality_observed, monkeypatch):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "IJzerlaan",
        "postOfficeBoxNumber": "18",
        "addressLocality": "Antwerpen",
        "addressCountry": "BE",
    }

    from geocoding.geocache import temp_geo_cache
    cache = next(temp_geo_cache(REDIS_HOST, REDIS_PORT))
    assert len(cache.redis.keys('*')) == 0

    try:
        r = geocoding.add_location(air_quality_observed, cache=cache)
        assert r is air_quality_observed
        assert_lon_lat(r, expected_lon=51.23, expected_lat=4.42)
        assert len(cache.redis.keys('*')) == 1

        # Make sure no external calls are made
        monkeypatch.delattr("requests.sessions.Session.request")

        r.pop('location')
        r = geocoding.add_location(air_quality_observed, cache=cache)
        assert_lon_lat(r, expected_lon=51.23, expected_lat=4.42)
        assert len(cache.redis.keys('*')) == 1

    finally:
        cache.redis.flushall()
Exemple #3
0
def add_geodata(entity):
    # TODO: Move this setting to configuration (See GH issue #10)
    use_geocoding = os.environ.get('USE_GEOCODING', False)
    redis_host = os.environ.get('REDIS_HOST', None)

    # No cache -> no geocoding by default
    if use_geocoding and redis_host:
        redis_port = os.environ.get('REDIS_PORT', 6379)
        cache = GeoCodingCache(redis_host, redis_port)

        from geocoding import geocoding
        geocoding.add_location(entity, cache=cache)
def test_entity_with_location(air_quality_observed):
    # Adding location to an entity with location does nothing
    assert 'location' in air_quality_observed
    old_entity = copy.copy(air_quality_observed)

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed
    assert r == old_entity
def test_entity_with_non_dict_address(air_quality_observed):
    air_quality_observed.pop('location')
    air_quality_observed['address']['value'] = "string address"

    old_entity = copy.copy(air_quality_observed)

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed
    assert r == old_entity
Exemple #6
0
def test_caching(air_quality_observed, monkeypatch):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "IJzerlaan",
        "postOfficeBoxNumber": "18",
        "addressLocality": "Antwerpen",
        "addressCountry": "BE",
    }

    from geocoding.geocache import temp_geo_cache
    cache = next(temp_geo_cache(REDIS_HOST, REDIS_PORT))
    assert len(cache.redis.keys('*')) == 0

    try:
        r = geocoding.add_location(air_quality_observed, cache=cache)
        assert r is air_quality_observed
        assert 'location' in r
        assert r['location']['type'] == 'geo:point'
        lon, lat = r['location']['value'].split(',')
        assert float(lon) == pytest.approx(51.2358357, abs=1e-2)
        assert float(lat) == pytest.approx(4.4201911, abs=1e-2)
        assert len(cache.redis.keys('*')) == 1

        # Make sure no external calls are made
        monkeypatch.delattr("requests.sessions.Session.request")

        r.pop('location')
        r = geocoding.add_location(air_quality_observed, cache=cache)
        assert 'location' in r
        assert r['location']['type'] == 'geo:point'
        lon, lat = r['location']['value'].split(',')
        assert float(lon) == pytest.approx(51.2358357, abs=1e-2)
        assert float(lat) == pytest.approx(4.4201911, abs=1e-2)
        assert len(cache.redis.keys('*')) == 1

    finally:
        cache.redis.flushall()
def test_entity_add_point(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "IJzerlaan",
        "postOfficeBoxNumber": "18",
        "addressLocality": "Antwerpen",
        "addressCountry": "BE",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert_lon_lat(r, expected_lon=51.23, expected_lat=4.42)
def test_entity_add_point_negative_coord(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "Acolman",
        "postOfficeBoxNumber": "22",
        "addressLocality": "Ciudad de México",
        "addressCountry": "MX",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert_lon_lat(r, expected_lon=19.51, expected_lat=-99.08)
def test_entity_add_point_negative_coord(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "Calle Acolman",
        "postOfficeBoxNumber": "22",
        "postalCode": "55120",
        "addressLocality": "Ecatepec de Morelos",
        "addressCountry": "MX",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert_lon_lat(r, expected_lon=19.5411019, expected_lat=-99.0341571)
Exemple #10
0
def test_entity_add_country_shape(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "addressCountry": "MX",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:json'

    geo = r['location']['value']
    assert geo['type'] == 'MultiPolygon'
    assert len(geo['coordinates']) == pytest.approx(12, abs=2)
def test_entity_add_country_shape(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "addressCountry": "MX",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:json'

    geo = r['location']['value']
    assert geo['type'] == 'MultiPolygon'
    multi_polygon = geojson.MultiPolygon(geo['coordinates'])
    assert multi_polygon.is_valid
def test_entity_add_point_negative_coord(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "Acolman",
        "postOfficeBoxNumber": "22",
        "addressLocality": "Ciudad de México",
        "addressCountry": "MX",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:point'

    geo = r['location']['value']
    assert geo == '19.6389474, -98.9109537'
Exemple #13
0
def test_entity_add_city_shape(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "addressCountry": "MX",
        "addressLocality": "Ciudad de México",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:json'

    geo = r['location']['value']
    assert geo['type'] == 'Polygon'
    assert len(geo['coordinates']) == 1
    assert len(geo['coordinates'][0]) == pytest.approx(2186, abs=100)
def test_entity_add_city_shape(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "addressCountry": "MX",
        "addressLocality": "Ciudad de México",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:json'

    geo = r['location']['value']
    assert geo['type'] == 'Polygon'
    polygon = geojson.Polygon(geo['coordinates'])
    assert polygon.is_valid
def test_entity_add_street_line(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "Acolman",
        "addressLocality": "Ciudad de México",
        "addressCountry": "MX",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:json'

    geo = r['location']['value']
    assert geo['type'] == 'LineString'
    assert len(geo['coordinates']) > 1
def test_entity_add_point(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "IJzerlaan",
        "postOfficeBoxNumber": "18",
        "addressLocality": "Antwerpen",
        "addressCountry": "BE",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:point'

    geo = r['location']['value']
    assert geo == '51.235646, 4.420609'
Exemple #17
0
def test_entity_add_point(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "IJzerlaan",
        "postOfficeBoxNumber": "18",
        "addressLocality": "Antwerpen",
        "addressCountry": "BE",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:point'

    lon, lat = r['location']['value'].split(',')
    assert float(lon) == pytest.approx(51.2358357, abs=1e-2)
    assert float(lat) == pytest.approx(4.4201911, abs=1e-2)
Exemple #18
0
def test_entity_add_point_negative_coord(air_quality_observed):
    air_quality_observed.pop('location')

    air_quality_observed['address']['value'] = {
        "streetAddress": "Acolman",
        "postOfficeBoxNumber": "22",
        "addressLocality": "Ciudad de México",
        "addressCountry": "MX",
    }

    r = geocoding.add_location(air_quality_observed)
    assert r is air_quality_observed

    assert 'location' in r
    assert r['location']['type'] == 'geo:point'

    lon, lat = r['location']['value'].split(',')
    assert float(lon) == pytest.approx(19.6389474, abs=1e-2)
    assert float(lat) == pytest.approx(-98.9109537, abs=1e-2)
def test_empty_dict_entity():
    entity = dict()
    try:
        geocoding.add_location(entity)
    except Exception as e:
        assert isinstance(e, InvalidNGSIEntity)
def test_no_address_entity():
    entity = {'id': 'test-id', 'type': 'test-type'}
    res = geocoding.add_location(entity)
    assert 'address' not in res
    assert 'location' not in res
Exemple #21
0
def add_geodata(entity):
    if is_geo_coding_available():
        cache = get_geo_cache()
        geocoding.add_location(entity, cache=cache)