Skip to content

Commit

Permalink
[processing] Consist helpful error messages when sinks cannot be created
Browse files Browse the repository at this point in the history
And throw exceptions always when sinks are not created to avoid
generic errors
  • Loading branch information
nyalldawson committed Apr 27, 2018
1 parent 5339d62 commit 249dca7
Show file tree
Hide file tree
Showing 73 changed files with 148 additions and 20 deletions.
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/Aggregate.py
Expand Up @@ -224,6 +224,8 @@ def processAlgorithm(self, parameters, context, feedback):
self.fields,
QgsWkbTypes.multiType(source.wkbType()),
source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

# Calculate aggregates on memory layers
if len(keys):
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/ConcaveHull.py
Expand Up @@ -144,6 +144,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
layer.fields(), QgsWkbTypes.Polygon, layer.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

geom = feat.geometry()
if no_multigeom and geom.isMultipart():
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/Delaunay.py
Expand Up @@ -89,6 +89,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Polygon, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

pts = []
ptDict = {}
Expand Down
Expand Up @@ -65,6 +65,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]))
total = 100.0 / source.featureCount() if source.featureCount() else 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/EliminateSelection.py
Expand Up @@ -103,6 +103,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
inLayer.fields(), inLayer.wkbType(), inLayer.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

for aFeat in inLayer.getFeatures():
if feedback.isCanceled():
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/ExecuteSQL.py
Expand Up @@ -158,6 +158,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
vLayer.fields(), vLayer.wkbType() if geometry_type != 1 else 1, vLayer.crs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

features = vLayer.getFeatures()
total = 100.0 / vLayer.featureCount() if vLayer.featureCount() else 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/ExportGeometryInfo.py
Expand Up @@ -123,6 +123,8 @@ def processAlgorithm(self, parameters, context, feedback):
fields = QgsProcessingUtils.combineFields(fields, new_fields)
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, wkb_type, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

coordTransform = None

Expand Down
3 changes: 3 additions & 0 deletions python/plugins/processing/algs/qgis/ExtentFromLayer.py
Expand Up @@ -36,6 +36,7 @@
QgsFeature,
QgsWkbTypes,
QgsProcessing,
QgsProcessingException,
QgsProcessingParameterMapLayer,
QgsProcessingParameterFeatureSink,
QgsFields)
Expand Down Expand Up @@ -94,6 +95,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Polygon, layer.crs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

try:
# may not be possible
Expand Down
Expand Up @@ -98,6 +98,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, wkb_type, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

vertex_indices_string = self.parameterAsString(parameters, self.VERTICES, context)
indices = []
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/FieldPyculator.py
Expand Up @@ -108,6 +108,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

# Run global code
if globalExpression.strip() != '':
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/FieldsCalculator.py
Expand Up @@ -121,6 +121,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

exp_context = self.createExpressionContext(parameters, context)
if layer is not None:
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/FindProjection.py
Expand Up @@ -100,6 +100,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.NoGeometry, QgsCoordinateReferenceSystem())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

# make intersection tests nice and fast
engine = QgsGeometry.createGeometryEngine(target_geom.constGet())
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/GeometryConvert.py
Expand Up @@ -111,6 +111,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), newType, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

features = source.getFeatures()
total = 100.0 / source.featureCount() if source.featureCount() else 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/Grid.py
Expand Up @@ -156,6 +156,8 @@ def processAlgorithm(self, parameters, context, feedback):
outputWkb = QgsWkbTypes.Polygon
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, outputWkb, crs)
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

if idx == 0:
self._pointGrid(
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/HubDistanceLines.py
Expand Up @@ -119,6 +119,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.LineString, point_source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

index = QgsSpatialIndex(hub_source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]).setDestinationCrs(point_source.sourceCrs(), context.transformContext())))

Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/HubDistancePoints.py
Expand Up @@ -115,6 +115,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, point_source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

index = QgsSpatialIndex(hub_source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]).setDestinationCrs(point_source.sourceCrs(), context.transformContext())))

Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/KeepNBiggestParts.py
Expand Up @@ -81,6 +81,8 @@ def processAlgorithm(self, parameters, context, feedback):
fields = source.fields()
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

features = source.getFeatures()
total = 100.0 / source.featureCount() if source.featureCount() else 0
Expand Down
Expand Up @@ -141,6 +141,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Polygon, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

if field_index >= 0:
geometry_dict = {}
Expand Down
4 changes: 4 additions & 0 deletions python/plugins/processing/algs/qgis/PointDistance.py
Expand Up @@ -167,6 +167,8 @@ def linearMatrix(self, parameters, context, source, inField, target_source, targ
out_wkb = QgsWkbTypes.multiType(source.wkbType()) if matType == 0 else source.wkbType()
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, out_wkb, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

index = QgsSpatialIndex(target_source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]).setDestinationCrs(source.sourceCrs(), context.transformContext())), feedback)

Expand Down Expand Up @@ -256,6 +258,8 @@ def regularMatrix(self, parameters, context, source, inField, target_source, tar

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

data = [inFeat[inField]]
for target in target_source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]).setFilterFids(featList).setDestinationCrs(source.sourceCrs(), context.transformContext())):
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PointsAlongGeometry.py
Expand Up @@ -104,6 +104,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

features = source.getFeatures()
total = 100.0 / source.featureCount() if source.featureCount() else 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PointsDisplacement.py
Expand Up @@ -88,6 +88,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

features = source.getFeatures()

Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PointsFromLines.py
Expand Up @@ -92,6 +92,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, raster_layer.crs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

outFeature = QgsFeature()
outFeature.setFields(fields)
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PointsFromPolygons.py
Expand Up @@ -91,6 +91,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, raster_layer.crs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

outFeature = QgsFeature()
outFeature.setFields(fields)
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PointsInPolygon.py
Expand Up @@ -118,6 +118,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, poly_source.wkbType(), poly_source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

spatialIndex = QgsSpatialIndex(point_source.getFeatures(
QgsFeatureRequest().setSubsetOfAttributes([]).setDestinationCrs(poly_source.sourceCrs(), context.transformContext())), feedback)
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PointsLayerFromTable.py
Expand Up @@ -110,6 +110,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, wkb_type, target_crs)
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

request = QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry)
features = source.getFeatures(QgsFeatureRequest(), QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PointsToPaths.py
Expand Up @@ -129,6 +129,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, output_wkb, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

points = dict()
features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([group_field_index, order_field_index]), QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/PoleOfInaccessibility.py
Expand Up @@ -95,6 +95,8 @@ def processAlgorithm(self, parameters, context, feedback):
fields.append(QgsField('dist_pole', QVariant.Double))
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

features = source.getFeatures()
total = 100.0 / source.featureCount() if source.featureCount() else 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/Polygonize.py
Expand Up @@ -83,6 +83,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Polygon, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

allLinesList = []
features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([]))
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/RandomExtract.py
Expand Up @@ -103,6 +103,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

total = 100.0 / featureCount if featureCount else 1
for i, feat in enumerate(features):
Expand Down
Expand Up @@ -111,6 +111,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), source.wkbType(), source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

selran = []
total = 100.0 / (featureCount * len(unique)) if featureCount else 1
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/RandomPointsAlongLines.py
Expand Up @@ -101,6 +101,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

nPoints = 0
nIterations = 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/RandomPointsExtent.py
Expand Up @@ -108,6 +108,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, crs)
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

nPoints = 0
nIterations = 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/RandomPointsLayer.py
Expand Up @@ -109,6 +109,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

nPoints = 0
nIterations = 0
Expand Down
2 changes: 2 additions & 0 deletions python/plugins/processing/algs/qgis/RandomPointsPolygons.py
Expand Up @@ -126,6 +126,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

da = QgsDistanceArea()
da.setSourceCrs(source.sourceCrs(), context.transformContext())
Expand Down
Expand Up @@ -105,6 +105,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), QgsWkbTypes.Polygon, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

if shape == 0:
self.rectangles(sink, source, width, height, rotation, feedback)
Expand Down
Expand Up @@ -115,6 +115,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), QgsWkbTypes.Polygon, source.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

width = source.fields().lookupField(width_field)
height = source.fields().lookupField(height_field)
Expand Down
3 changes: 3 additions & 0 deletions python/plugins/processing/algs/qgis/RegularPoints.py
Expand Up @@ -39,6 +39,7 @@
QgsGeometry,
QgsPointXY,
QgsProcessing,
QgsProcessingException,
QgsProcessingParameterDistance,
QgsProcessingParameterExtent,
QgsProcessingParameterNumber,
Expand Down Expand Up @@ -108,6 +109,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.Point, crs)
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

if randomize:
seed()
Expand Down
Expand Up @@ -190,6 +190,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.LineString, network.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

directionField = -1
if directionFieldName:
Expand Down
Expand Up @@ -191,6 +191,8 @@ def processAlgorithm(self, parameters, context, feedback):

(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
fields, QgsWkbTypes.LineString, network.sourceCrs())
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))

directionField = -1
if directionFieldName:
Expand Down

0 comments on commit 249dca7

Please sign in to comment.