Skip to content

Commit 99cfb8f

Browse files
committed
Fix processing algs crash when no source features exist
Instead we output an empty layer - this may be critical for multi-step models where there is validly no features present in a source layer
1 parent 24eb6fd commit 99cfb8f

File tree

92 files changed

+105
-105
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+105
-105
lines changed

python/plugins/processing/algs/qgis/AddTableField.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def processAlgorithm(self, parameters, context, feedback):
100100
fields, source.wkbType(), source.sourceCrs())
101101

102102
features = source.getFeatures()
103-
total = 100.0 / source.featureCount()
103+
total = 100.0 / source.featureCount() if source.featureCount() else 0
104104

105105
for current, input_feature in enumerate(features):
106106
if feedback.isCanceled():

python/plugins/processing/algs/qgis/AutoincrementalField.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def processAlgorithm(self, parameters, context, feedback):
7474
fields, source.wkbType(), source.sourceCrs())
7575

7676
features = source.getFeatures()
77-
total = 100.0 / source.featureCount()
77+
total = total = 100.0 / source.featureCount() if source.featureCount() else 0
7878
for current, input_feature in enumerate(features):
7979
if feedback.isCanceled():
8080
break

python/plugins/processing/algs/qgis/BasicStatistics.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def processAlgorithm(self, parameters, context, feedback):
156156
return results
157157

158158
def calcNumericStats(self, features, feedback, field, count):
159-
total = 100.0 / float(count)
159+
total = 100.0 / count if count else 0
160160
stat = QgsStatisticalSummary()
161161
for current, ft in enumerate(features):
162162
if feedback.isCanceled():
@@ -205,7 +205,7 @@ def calcNumericStats(self, features, feedback, field, count):
205205
return data, results
206206

207207
def calcStringStats(self, features, feedback, field, count):
208-
total = 100.0 / float(count)
208+
total = 100.0 / count if count else 1
209209
stat = QgsStringStatisticalSummary()
210210
for current, ft in enumerate(features):
211211
if feedback.isCanceled():
@@ -237,7 +237,7 @@ def calcStringStats(self, features, feedback, field, count):
237237
return data, results
238238

239239
def calcDateTimeStats(self, features, feedback, field, count):
240-
total = 100.0 / float(count)
240+
total = 100.0 / count if count else 1
241241
stat = QgsDateTimeStatisticalSummary()
242242
for current, ft in enumerate(features):
243243
if feedback.isCanceled():

python/plugins/processing/algs/qgis/Boundary.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def processAlgorithm(self, parameters, context, feedback):
8686
source.fields(), output_wkb, source.sourceCrs())
8787

8888
features = source.getFeatures()
89-
total = 100.0 / source.featureCount()
89+
total = 100.0 / source.featureCount() if source.featureCount() else 0
9090

9191
for current, input_feature in enumerate(features):
9292
if feedback.isCanceled():

python/plugins/processing/algs/qgis/BoundingBox.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def processAlgorithm(self, parameters, context, feedback):
7878
source.fields(), QgsWkbTypes.Polygon, source.sourceCrs())
7979

8080
features = source.getFeatures()
81-
total = 100.0 / source.featureCount()
81+
total = 100.0 / source.featureCount() if source.featureCount() else 0
8282

8383
for current, input_feature in enumerate(features):
8484
if feedback.isCanceled():

python/plugins/processing/algs/qgis/Buffer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def buffering(feedback, context, writer, distance, field, useField, layer, disso
3838

3939
current = 0
4040
features = QgsProcessingUtils.getFeatures(layer, context)
41-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
41+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
4242

4343
# With dissolve
4444
if dissolve:

python/plugins/processing/algs/qgis/CheckValidity.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def doCheck(self, method, parameters, context, feedback):
129129
error_count = 0
130130

131131
features = source.getFeatures()
132-
total = 100.0 / source.featureCount()
132+
total = 100.0 / source.featureCount() if source.featureCount() else 0
133133
for current, inFeat in enumerate(features):
134134
if feedback.isCanceled():
135135
break

python/plugins/processing/algs/qgis/ConvexHull.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def processAlgorithm(self, parameters, context, feedback):
120120
if useField:
121121
unique = layer.uniqueValues(index)
122122
current = 0
123-
total = 100.0 / (QgsProcessingUtils.featureCount(layer, context) * len(unique))
123+
total = 100.0 / (layer.featureCount() * len(unique)) if layer.featureCount() else 1
124124
for i in unique:
125125
first = True
126126
hull = []
@@ -152,7 +152,7 @@ def processAlgorithm(self, parameters, context, feedback):
152152
fid += 1
153153
else:
154154
hull = []
155-
total = 100.0 / layer.featureCount()
155+
total = 100.0 / layer.featureCount() if layer.featureCount() else 1
156156
features = QgsProcessingUtils.getFeatures(layer, context)
157157
for current, f in enumerate(features):
158158
inGeom = f.geometry()

python/plugins/processing/algs/qgis/Datasources2Vrt.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def mergeDataSources2Vrt(self, dataSources, outFile, union=False, relative=False
110110
if union:
111111
vrt += '<OGRVRTUnionLayer name="UnionedLayer">'
112112

113-
total = 100.0 / len(dataSources)
113+
total = 100.0 / len(dataSources) if dataSources else 1
114114
for current, inFile in enumerate(dataSources):
115115
feedback.setProgress(int(current * total))
116116

python/plugins/processing/algs/qgis/Delaunay.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def processAlgorithm(self, parameters, context, feedback):
9292
ptNdx = -1
9393
c = voronoi.Context()
9494
features = QgsProcessingUtils.getFeatures(layer, context)
95-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
95+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
9696
for current, inFeat in enumerate(features):
9797
geom = QgsGeometry(inFeat.geometry())
9898
if geom.isNull():
@@ -122,7 +122,7 @@ def processAlgorithm(self, parameters, context, feedback):
122122
triangles = c.triangles
123123
feat = QgsFeature()
124124

125-
total = 100.0 / len(triangles)
125+
total = 100.0 / len(triangles) if triangles else 1
126126
for current, triangle in enumerate(triangles):
127127
indices = list(triangle)
128128
indices.append(indices[0])

python/plugins/processing/algs/qgis/DeleteColumn.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def processAlgorithm(self, parameters, context, feedback):
9191
fields, source.wkbType(), source.sourceCrs())
9292

9393
features = source.getFeatures()
94-
total = 100.0 / source.featureCount()
94+
total = 100.0 / source.featureCount() if source.featureCount() else 0
9595

9696
for current, f in enumerate(features):
9797
if feedback.isCanceled():

python/plugins/processing/algs/qgis/DeleteDuplicateGeometries.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def processAlgorithm(self, parameters, context, feedback):
6868

6969
features = QgsProcessingUtils.getFeatures(layer, context)
7070

71-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
71+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
7272
geoms = dict()
7373
for current, f in enumerate(features):
7474
geoms[f.id()] = f.geometry()
@@ -83,7 +83,7 @@ def processAlgorithm(self, parameters, context, feedback):
8383
if g.isGeosEqual(cleaned[j]):
8484
del cleaned[j]
8585

86-
total = 100.0 / len(cleaned)
86+
total = 100.0 / len(cleaned) if cleaned else 1
8787
request = QgsFeatureRequest().setFilterFids(list(cleaned.keys()))
8888
for current, f in enumerate(layer.getFeatures(request)):
8989
writer.addFeature(f)

python/plugins/processing/algs/qgis/DeleteHoles.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def processAlgorithm(self, parameters, context, feedback):
7979
source.fields(), source.wkbType(), source.sourceCrs())
8080

8181
features = source.getFeatures()
82-
total = 100.0 / source.featureCount()
82+
total = 100.0 / source.featureCount() if source.featureCount() else 0
8383

8484
for current, f in enumerate(features):
8585
if feedback.isCanceled():

python/plugins/processing/algs/qgis/DensifyGeometries.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def processAlgorithm(self, parameters, context, feedback):
8282
source.fields(), source.wkbType(), source.sourceCrs())
8383

8484
features = source.getFeatures()
85-
total = 100.0 / source.featureCount()
85+
total = 100.0 / source.featureCount() if source.featureCount() else 0
8686

8787
for current, f in enumerate(features):
8888
if feedback.isCanceled():

python/plugins/processing/algs/qgis/DensifyGeometriesInterval.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def processAlgorithm(self, parameters, context, feedback):
8080
source.fields(), source.wkbType(), source.sourceCrs())
8181

8282
features = source.getFeatures()
83-
total = 100.0 / source.featureCount()
83+
total = 100.0 / source.featureCount() if source.featureCount() else 0
8484
for current, f in enumerate(features):
8585
if feedback.isCanceled():
8686
break

python/plugins/processing/algs/qgis/Difference.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def processAlgorithm(self, parameters, context, feedback):
8080
outFeat = QgsFeature()
8181
index = QgsProcessingUtils.createSpatialIndex(layerB, context)
8282
selectionA = QgsProcessingUtils.getFeatures(layerA, context)
83-
total = 100.0 / QgsProcessingUtils.featureCount(layerA, context)
83+
total = 100.0 / layerA.featureCount() if layerA.featureCount() else 0
8484
for current, inFeatA in enumerate(selectionA):
8585
geom = inFeatA.geometry()
8686
diff_geom = QgsGeometry(geom)

python/plugins/processing/algs/qgis/DropGeometry.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def processAlgorithm(self, parameters, context, feedback):
7373

7474
request = QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry)
7575
features = source.getFeatures(request)
76-
total = 100.0 / source.featureCount()
76+
total = 100.0 / source.featureCount() if source.featureCount() else 0
7777

7878
for current, input_feature in enumerate(features):
7979
if feedback.isCanceled():

python/plugins/processing/algs/qgis/EquivalentNumField.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def processAlgorithm(self, parameters, context, feedback):
7777
classes = {}
7878

7979
features = QgsProcessingUtils.getFeatures(vlayer, context)
80-
total = 100.0 / QgsProcessingUtils.featureCount(vlayer, context)
80+
total = 100.0 / vlayer.featureCount() if vlayer.featureCount() else 0
8181
for current, feature in enumerate(features):
8282
feedback.setProgress(int(current * total))
8383
inGeom = feature.geometry()

python/plugins/processing/algs/qgis/ExecuteSQL.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def processAlgorithm(self, parameters, context, feedback):
151151
vLayer.crs(), context)
152152

153153
features = QgsProcessingUtils.getFeatures(vLayer, context)
154-
total = 100.0 / QgsProcessingUtils.featureCount(vLayer, context)
154+
total = 100.0 / vLayer.featureCount() if vLayer.featureCount() else 0
155155
outFeat = QgsFeature()
156156
for current, inFeat in enumerate(features):
157157
outFeat.setAttributes(inFeat.attributes())

python/plugins/processing/algs/qgis/Explode.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def processAlgorithm(self, parameters, context, feedback):
7171
writer = output.getVectorWriter(fields, QgsWkbTypes.LineString, vlayer.crs(), context)
7272
outFeat = QgsFeature()
7373
features = QgsProcessingUtils.getFeatures(vlayer, context)
74-
total = 100.0 / QgsProcessingUtils.featureCount(vlayer, context)
74+
total = 100.0 / vlayer.featureCount() if vlayer.featureCount() else 0
7575
for current, feature in enumerate(features):
7676
feedback.setProgress(int(current * total))
7777
inGeom = feature.geometry()

python/plugins/processing/algs/qgis/ExportGeometryInfo.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def processAlgorithm(self, parameters, context, feedback):
133133
outFeat.setFields(fields)
134134

135135
features = QgsProcessingUtils.getFeatures(layer, context)
136-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
136+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
137137
for current, f in enumerate(features):
138138
inGeom = f.geometry()
139139

python/plugins/processing/algs/qgis/ExtendLines.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def processAlgorithm(self, parameters, context, feedback):
7777
end_distance = self.getParameterValue(self.END_DISTANCE)
7878

7979
features = QgsProcessingUtils.getFeatures(layer, context)
80-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
80+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
8181

8282
for current, input_feature in enumerate(features):
8383
output_feature = input_feature

python/plugins/processing/algs/qgis/ExtentFromLayer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def layerExtent(self, source, sink, feedback):
143143

144144
def featureExtent(self, source, context, sink, feedback):
145145
features = source.getFeatures()
146-
total = 100.0 / source.featureCount()
146+
total = 100.0 / source.featureCount() if source.featureCount() else 0
147147
feat = QgsFeature()
148148
for current, f in enumerate(features):
149149
if feedback.isCanceled():

python/plugins/processing/algs/qgis/ExtractByLocation.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def processAlgorithm(self, parameters, context, feedback):
107107

108108
selectedSet = []
109109
features = QgsProcessingUtils.getFeatures(selectLayer, context)
110-
total = 100.0 / QgsProcessingUtils.featureCount(selectLayer, context)
110+
total = 100.0 / selectLayer.featureCount() if selectLayer.featureCount() else 0
111111
for current, f in enumerate(features):
112112
geom = vector.snapToPrecision(f.geometry(), precision)
113113
bbox = geom.boundingBox()
@@ -136,7 +136,7 @@ def processAlgorithm(self, parameters, context, feedback):
136136
selectedSet = selectedSet + disjoinSet
137137

138138
features = QgsProcessingUtils.getFeatures(layer, context)
139-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
139+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
140140
for current, f in enumerate(features):
141141
if f.id() in selectedSet:
142142
writer.addFeature(f)

python/plugins/processing/algs/qgis/ExtractNodes.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def processAlgorithm(self, parameters, context, feedback):
7878
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, QgsWkbTypes.Point, layer.crs(), context)
7979

8080
features = QgsProcessingUtils.getFeatures(layer, context)
81-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
81+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
8282
for current, f in enumerate(features):
8383
input_geometry = f.geometry()
8484
if not input_geometry:

python/plugins/processing/algs/qgis/ExtractSpecificNodes.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def processAlgorithm(self, parameters, context, feedback):
9292
self.tr('\'{}\' is not a valid node index').format(node))
9393

9494
features = QgsProcessingUtils.getFeatures(layer, context)
95-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
95+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
9696

9797
for current, f in enumerate(features):
9898

python/plugins/processing/algs/qgis/FieldPyculator.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def processAlgorithm(self, parameters, context, feedback):
144144

145145
# Run
146146
features = QgsProcessingUtils.getFeatures(layer, context)
147-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
147+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
148148
for current, feat in enumerate(features):
149149
feedback.setProgress(int(current * total))
150150
attrs = feat.attributes()

python/plugins/processing/algs/qgis/FieldsCalculator.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def processAlgorithm(self, parameters, context, feedback):
137137
calculationSuccess = True
138138

139139
features = QgsProcessingUtils.getFeatures(layer, context)
140-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
140+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
141141

142142
rownum = 1
143143
for current, f in enumerate(features):

python/plugins/processing/algs/qgis/FixGeometry.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def processAlgorithm(self, parameters, context, feedback):
7979
if QgsProcessingUtils.featureCount(layer, context) == 0:
8080
raise GeoAlgorithmExecutionException(self.tr('There are no features in the input layer'))
8181

82-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
82+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
8383
for current, inputFeature in enumerate(features):
8484
outputFeature = inputFeature
8585
if inputFeature.geometry():

python/plugins/processing/algs/qgis/GeometryByExpression.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def processAlgorithm(self, parameters, context, feedback):
115115
self.tr('Evaluation error: {0}').format(expression.evalErrorString()))
116116

117117
features = QgsProcessingUtils.getFeatures(layer, context)
118-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
118+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
119119
for current, input_feature in enumerate(features):
120120
output_feature = input_feature
121121

python/plugins/processing/algs/qgis/GeometryConvert.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def processAlgorithm(self, parameters, context, feedback):
9494
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.fields(), newType, layer.crs(), context)
9595

9696
features = QgsProcessingUtils.getFeatures(layer, context)
97-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
97+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
9898

9999
for current, f in enumerate(features):
100100
geom = f.geometry()

python/plugins/processing/algs/qgis/Gridify.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def processAlgorithm(self, parameters, context, feedback):
8484
context)
8585

8686
features = QgsProcessingUtils.getFeatures(layer, context)
87-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
87+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
8888

8989
for current, f in enumerate(features):
9090
geom = f.geometry()

python/plugins/processing/algs/qgis/Heatmap.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def processAlgorithm(self, parameters, context, feedback):
174174
request = QgsFeatureRequest()
175175
request.setSubsetOfAttributes(attrs)
176176
features = QgsProcessingUtils.getFeatures(layer, context, request)
177-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
177+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
178178
for current, f in enumerate(features):
179179
if kde.addFeature(f) != QgsKernelDensityEstimation.Success:
180180
QgsMessageLog.logMessage(self.tr('Error adding feature with ID {} to heatmap').format(f.id()), self.tr('Processing'), QgsMessageLog.CRITICAL)

python/plugins/processing/algs/qgis/HubDistanceLines.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def processAlgorithm(self, parameters, context, feedback):
122122

123123
# Scan source points, find nearest hub, and write to output file
124124
features = QgsProcessingUtils.getFeatures(layerPoints, context)
125-
total = 100.0 / QgsProcessingUtils.featureCount(layerPoints, context)
125+
total = 100.0 / layerPoints.featureCount() if layerPoints.featureCount() else 0
126126
for current, f in enumerate(features):
127127
src = f.geometry().boundingBox().center()
128128

python/plugins/processing/algs/qgis/HubDistancePoints.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def processAlgorithm(self, parameters, context, feedback):
122122

123123
# Scan source points, find nearest hub, and write to output file
124124
features = QgsProcessingUtils.getFeatures(layerPoints, context)
125-
total = 100.0 / QgsProcessingUtils.featureCount(layerPoints, context)
125+
total = 100.0 / layerPoints.featureCount() if layerPoints.featureCount() else 0
126126
for current, f in enumerate(features):
127127
src = f.geometry().boundingBox().center()
128128

python/plugins/processing/algs/qgis/HubLines.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def processAlgorithm(self, parameters, context, feedback):
9292

9393
spokes = QgsProcessingUtils.getFeatures(layerSpoke, context)
9494
hubs = QgsProcessingUtils.getFeatures(layerHub, context)
95-
total = 100.0 / QgsProcessingUtils.featureCount(layerSpoke, context)
95+
total = 100.0 / layerSpoke.featureCount() if layerSpoke.featureCount() else 0
9696

9797
for current, spokepoint in enumerate(spokes):
9898
p = spokepoint.geometry().boundingBox().center()

python/plugins/processing/algs/qgis/HypsometricCurves.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def processAlgorithm(self, parameters, context, feedback):
114114
memRasterDriver = gdal.GetDriverByName('MEM')
115115

116116
features = QgsProcessingUtils.getFeatures(layer, context)
117-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
117+
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
118118

119119
for current, f in enumerate(features):
120120
geom = f.geometry()

python/plugins/processing/algs/qgis/ImportIntoPostGIS.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ def processAlgorithm(self, parameters, context, feedback):
180180
self.tr('Error importing to PostGIS\n{0}').format(exporter.errorMessage()))
181181

182182
features = source.getFeatures()
183-
total = 100.0 / source.featureCount()
183+
total = 100.0 / source.featureCount() if source.featureCount() else 0
184184
for current, f in enumerate(features):
185185
if feedback.isCanceled():
186186
break

0 commit comments

Comments
 (0)