diff options
Diffstat (limited to 'webmap-import')
-rwxr-xr-x | webmap-import | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/webmap-import b/webmap-import index c801b6d..6f514a9 100755 --- a/webmap-import +++ b/webmap-import @@ -64,7 +64,8 @@ from import_source import ( openOutputDS, createOutputLayer, validateOutputLayer, - importSources + importSources, + ImportStatus ) def setFieldIf(cond : bool, @@ -256,9 +257,8 @@ def processOutputLayer(ds : gdal.Dataset, extent : ogr.Geometry|None = None, dsTransaction : bool = False, lyrcache : ogr.Layer|None = None, - force : bool = False) -> bool: - """Process an output layer, and return a boolean indicating whether - the import was sucessful (or skipped), or not.""" + force : bool = False) -> ImportStatus: + """Process an output layer.""" logging.info('Processing output layer "%s"', layername) lyr = ds.GetLayerByName(layername) @@ -274,7 +274,7 @@ def processOutputLayer(ds : gdal.Dataset, lyrcache=lyrcache, cachedir=cachedir)): logging.info('Output layer "%s" is up to date, skipping', layername) - return True + return ImportStatus.IMPORT_NOCHANGE validateOutputLayer(lyr, srs=srs, options=layerdef['create']) @@ -661,15 +661,26 @@ def main() -> NoReturn: rv = 0 try: + r = ImportStatus.IMPORT_NOCHANGE for layername, layerdef in layers.items(): - if not processOutputLayer(dso, layername, layerdef, - srs=srs, - cachedir=cachedir, - extent=extent, - dsTransaction=dsoTransaction, - lyrcache=lyr_cache, - force=args.force): + r0 = processOutputLayer(dso, layername, layerdef, + srs=srs, + cachedir=cachedir, + extent=extent, + dsTransaction=dsoTransaction, + lyrcache=lyr_cache, + force=args.force) + if r0 == ImportStatus.IMPORT_ERROR: rv = 1 + if dsoTransaction: + dsoTransaction = False + logging.debug('Rolling back transaction') + # no need to catch the exception here + if dso.CommitTransaction() != ogr.OGRERR_NONE: + logging.error('Could not rollback transaction') + if r == ImportStatus.IMPORT_NOCHANGE and r0 == ImportStatus.IMPORT_SUCCESS: + r = ImportStatus.IMPORT_SUCCESS + logging.info('result = %s', str(r)) if sourcePathLocks is not None: releaseSourcePathLocks(sourcePathLocks) @@ -682,7 +693,6 @@ def main() -> NoReturn: rv = 1 except Exception: # pylint: disable=broad-exception-caught - rv = 1 if dsoTransaction: logging.exception('Exception occured within transaction, rolling back') try: @@ -692,6 +702,7 @@ def main() -> NoReturn: logging.exception('Could not rollback transaction') else: traceback.print_exc() + sys.exit(1) finally: lyr_cache = None |