diff options
Diffstat (limited to 'import_source.py')
| -rw-r--r-- | import_source.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/import_source.py b/import_source.py index 08f3dba..f802a57 100644 --- a/import_source.py +++ b/import_source.py @@ -448,7 +448,7 @@ def validateOutputLayer(lyr : ogr.Layer, return ok -def clearLayer(lyr : ogr.Layer) -> None: +def clearLayer(lyr : ogr.Layer, identity : str = 'CONTINUE IDENTITY') -> None: """Clear the given layer (wipe all its features)""" n = -1 if lyr.TestCapability(ogr.OLCFastFeatureCount): @@ -460,7 +460,7 @@ def clearLayer(lyr : ogr.Layer) -> None: ds = lyr.GetDataset() if ds.GetDriver().ShortName == 'PostgreSQL': # https://www.postgresql.org/docs/15/sql-truncate.html - statement = 'TRUNCATE TABLE {table} CONTINUE IDENTITY CASCADE' + statement = 'TRUNCATE TABLE {table} ' + identity + ' CASCADE' op = 'Truncating' else: statement = 'DELETE FROM {table}' @@ -695,7 +695,6 @@ def setFieldMapValue(fld : ogr.FieldDefn, raise RuntimeError(f'Field "{fld.GetName()}" mapping #{idx} has incompatible type ' f'for {ogr.GetFieldTypeName(fldType)}') -# pylint: disable-next=too-many-branches, too-many-locals, too-many-statements def _importSource2(lyr_dst : ogr.Layer, path : str, args : dict[str,Any], basedir : Path|None, extent : ogr.Geometry|None) -> None: """Import a source layer (already extracted) @@ -727,11 +726,17 @@ def _importSource2(lyr_dst : ogr.Layer, path : str, args : dict[str,Any], raise RuntimeError(f'Could not get requested layer {msg} from {path2}') logging.info('Importing layer %s from "%s"', msg, path) - canIgnoreFields = lyr.TestCapability(ogr.OLCIgnoreFields) + importLayer(lyr_dst, lyr, args=args, extent=extent) +# pylint: disable-next=too-many-branches, too-many-statements, dangerous-default-value +def importLayer(lyr_dst : ogr.Layer, lyr : ogr.Layer, + args : dict[str,Any] = {}, + extent : Optional[ogr.Geometry] = None) -> None: + """Import a source layer (already opened).""" + layername = lyr.GetName() srs = lyr.GetSpatialRef() if srs is None: - raise RuntimeError('Source layer has no SRS') + raise RuntimeError(f'Source layer {layername} has no SRS') srs_dst = lyr_dst.GetSpatialRef() if srs_dst is None: @@ -764,6 +769,7 @@ def _importSource2(lyr_dst : ogr.Layer, path : str, args : dict[str,Any], fields = args['field-map'] fieldSet = set() + canIgnoreFields = lyr.TestCapability(ogr.OLCIgnoreFields) ignoredFieldNames = [] for i in range(fieldCount): fld = defn.GetFieldDefn(i) |
