diff --git a/mapproxy/seed/config.py b/mapproxy/seed/config.py index fcc604a97..74fd9198a 100644 --- a/mapproxy/seed/config.py +++ b/mapproxy/seed/config.py @@ -27,13 +27,11 @@ from mapproxy.util.py import memoize from mapproxy.util.times import timestamp_from_isodate, timestamp_before from mapproxy.util.coverage import MultiCoverage, BBOXCoverage, GeomCoverage -from mapproxy.util.geom import GeometryError, EmptyGeometryError +from mapproxy.util.geom import GeometryError, EmptyGeometryError, CoverageReadError from mapproxy.util.yaml import load_yaml_file, YAMLError from mapproxy.seed.util import bidict from mapproxy.seed.seeder import SeedTask, CleanupTask from mapproxy.seed.spec import validate_seed_conf -from mapproxy.util.ogr import OGRShapeReaderError - class SeedConfigurationError(ConfigurationError): pass @@ -150,7 +148,7 @@ def coverage(self, name): try: coverage = load_coverage(coverage_conf) - except OGRShapeReaderError, ex: + except CoverageReadError as ex: raise SeedConfigurationError("can't load coverage '%s'. %s" % (name, ex)) except GeometryError, ex: raise SeedConfigurationError("invalid geometry in coverage '%s'. %s" % (name, ex)) diff --git a/mapproxy/util/geom.py b/mapproxy/util/geom.py index 6da011950..df9c33515 100644 --- a/mapproxy/util/geom.py +++ b/mapproxy/util/geom.py @@ -39,6 +39,9 @@ class GeometryError(Exception): class EmptyGeometryError(Exception): pass +class CoverageReadError(Exception): + pass + def require_geom_support(): if not geom_support: raise ImportError('Shapely required for geometry support') @@ -66,23 +69,26 @@ def load_ogr_datasource(datasource, where=None): Returns a list of Shapely Polygons. """ - from mapproxy.util.ogr import OGRShapeReader + from mapproxy.util.ogr import OGRShapeReader, OGRShapeReaderError polygons = [] - with closing(OGRShapeReader(datasource)) as reader: - for wkt in reader.wkts(where): - try: - geom = shapely.wkt.loads(wkt) - except ReadingError, ex: - raise GeometryError(ex) - if geom.type == 'Polygon': - polygons.append(geom) - elif geom.type == 'MultiPolygon': - for p in geom: - polygons.append(p) - else: - log_config.warn('skipping %s geometry from %s: not a Polygon/MultiPolygon', - geom.type, datasource) + try: + with closing(OGRShapeReader(datasource)) as reader: + for wkt in reader.wkts(where): + try: + geom = shapely.wkt.loads(wkt) + except ReadingError as ex: + raise GeometryError(ex) + if geom.type == 'Polygon': + polygons.append(geom) + elif geom.type == 'MultiPolygon': + for p in geom: + polygons.append(p) + else: + log_config.warn('skipping %s geometry from %s: not a Polygon/MultiPolygon', + geom.type, datasource) + except OGRShapeReaderError as ex: + raise CoverageReadError(ex) return polygons