aboutsummaryrefslogtreecommitdiffstats
path: root/import_source.py
diff options
context:
space:
mode:
Diffstat (limited to 'import_source.py')
-rw-r--r--import_source.py16
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)