Skip to content

Commit c55dac1

Browse files
committed
[processing][GRASS] Give some more feedback when trying to use
v.external for reading inputs, and if we can't, advise why not (cherry picked from commit 82ac04d)
1 parent e1055c4 commit c55dac1

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

python/plugins/processing/algs/grass7/Grass7Algorithm.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def processInputs(self, parameters, context, feedback):
459459
paramName, parameters, context)
460460
else:
461461
self.loadVectorLayerFromParameter(
462-
paramName, parameters, context, feedback, None)
462+
paramName, parameters, context, external=None, feedback=feedback)
463463
# For multiple inputs, process each layer
464464
elif isinstance(param, QgsProcessingParameterMultipleLayers):
465465
layers = self.parameterAsLayerList(parameters, paramName, context)
@@ -470,7 +470,7 @@ def processInputs(self, parameters, context, feedback):
470470
self.loadRasterLayer(layerName, layer)
471471
# Add a vector layer
472472
elif layer.type() == QgsMapLayer.VectorLayer:
473-
self.loadVectorLayer(layerName, layer, None)
473+
self.loadVectorLayer(layerName, layer, external=None, feedback=feedback)
474474

475475
self.postInputs()
476476

@@ -808,18 +808,19 @@ def loadVectorLayerFromParameter(self, name, parameters, context, feedback, exte
808808
QgsVectorFileWriter.supportedFormatExtensions(),
809809
feedback=feedback)
810810
ogr_layer = QgsVectorLayer(path, '', 'ogr')
811-
self.loadVectorLayer(name, ogr_layer, external)
811+
self.loadVectorLayer(name, ogr_layer, external=external, feedback=feedback)
812812
else:
813-
# already an ogr layer source
814-
self.loadVectorLayer(name, layer, external)
813+
# already an ogr disk based layer source
814+
self.loadVectorLayer(name, layer, external=external, feedback=feedback)
815815

816-
def loadVectorLayer(self, name, layer, external=False):
816+
def loadVectorLayer(self, name, layer, external=False, feedback=None):
817817
"""
818818
Creates a dedicated command to load a vector into
819819
temporary GRASS DB.
820820
:param name: name of the parameter
821821
:param layer: QgsMapLayer for the vector layer.
822822
:param external: use v.external (v.in.ogr if False).
823+
:param feedback: feedback object
823824
"""
824825
# TODO: support multiple input formats
825826
if external is None:
@@ -828,12 +829,15 @@ def loadVectorLayer(self, name, layer, external=False):
828829

829830
# safety check: we can only use external for ogr layers which support random read
830831
if external:
831-
ds = ogr.Open(layer.source())
832+
feedback.pushInfo('Attempting to use v.external for direct layer read')
833+
ds = ogr.Open(file_path)
832834
if ds is not None:
833835
ogr_layer = ds.GetLayer()
834836
if ogr_layer is None or not ogr_layer.TestCapability(ogr.OLCRandomRead):
837+
feedback.reportError('Cannot use v.external: layer does not support random read')
835838
external = False
836839
else:
840+
feedback.reportError('Cannot use v.external: error reading layer')
837841
external = False
838842

839843
self.inputLayers.append(layer)

0 commit comments

Comments
 (0)