def test_simplify(self): geom = wkbelement_from_geojson( json.loads( '{"type": "LineString", "coordinates": ' + '[[635900, 5723600], [635902, 5723600], [635905, 5723600]]}'), 3857) route = Route(activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom)) self.session.add(route) self.session.flush() # check that the line was simplified on insertion simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) # check that the line was simplified after an update route.geometry.geom_detail = wkbelement_from_geojson( json.loads( '{"type": "LineString", "coordinates": ' + '[[635901, 5723600], [635902, 5723600], [635905, 5723600]]}'), 3857) self.session.flush() simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) self.assertCoodinateEquals([635901, 5723600], geojson['coordinates'][0])
def test_simplify(self): geom = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + '[[635900, 5723600], [635902, 5723600], [635905, 5723600]]}', 3857) route = Route( activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom)) self.session.add(route) self.session.flush() # check that the line was simplified on insertion simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) # check that the line was simplified after an update route.geometry.geom_detail = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + '[[635901, 5723600], [635902, 5723600], [635905, 5723600]]}', 3857) self.session.flush() simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) self.assertCoodinateEquals( [635901, 5723600], geojson['coordinates'][0])
def test_save_and_load(self): fake_doc = Document() self.session.add(fake_doc) self.session.flush() geom = wkbelement_from_geojson( '{"type": "Point", "coordinates": [1.0, 2.0]}', 3857) geometry = DocumentGeometry( document_id=fake_doc.document_id, geom=geom) self.session.add(geometry) self.session.flush() self.session.expire(geometry) geom_loaded = geometry.geom geom_str = geojson_from_wkbelement(geom_loaded) geom_geojson = json.loads(geom_str) self.assertCoodinateEquals([1.0, 2.0], geom_geojson['coordinates'])
def test_save_and_load(self): fake_doc = Document() self.session.add(fake_doc) self.session.flush() geom = wkbelement_from_geojson( '{"type": "Point", "coordinates": [1.0, 2.0]}', 3857) geometry = DocumentGeometry(document_id=fake_doc.document_id, geom=geom) self.session.add(geometry) self.session.flush() self.session.expire(geometry) geom_loaded = geometry.geom geom_str = geojson_from_wkbelement(geom_loaded) geom_geojson = json.loads(geom_str) self.assertCoodinateEquals([1.0, 2.0], geom_geojson['coordinates'])
def serialize(data): """ Colanders `serialize` method is not intended for JSON serialization (it turns everything into a string and keeps colander.null). https://github.com/tisdall/cornice/blob/c18b873/cornice/schemas.py Returns the most agnostic version of specified data. (remove colander notions, datetimes in ISO, ...) """ if isinstance(data, str): return str(data) if isinstance(data, collections.Mapping): return dict(list(map(serialize, iter(data.items())))) if isinstance(data, collections.abc.Iterable): return type(data)(list(map(serialize, data))) if isinstance(data, (datetime.date, datetime.datetime)): return data.isoformat() if isinstance(data, WKBElement): return geojson_from_wkbelement(data) if data is null: return None return data
def serialize(data): """ Colanders `serialize` method is not intended for JSON serialization (it turns everything into a string and keeps colander.null). https://github.com/tisdall/cornice/blob/c18b873/cornice/schemas.py Returns the most agnostic version of specified data. (remove colander notions, datetimes in ISO, ...) """ if isinstance(data, str): return str(data) if isinstance(data, collections.Mapping): return dict(list(map(serialize, iter(data.items())))) if isinstance(data, collections.Iterable): return type(data)(list(map(serialize, data))) if isinstance(data, (datetime.date, datetime.datetime)): return data.isoformat() if isinstance(data, WKBElement): return geojson_from_wkbelement(data) if data is null: return None return data