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()
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
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)
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'
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'
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)
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
def add_geodata(entity): if is_geo_coding_available(): cache = get_geo_cache() geocoding.add_location(entity, cache=cache)