Skip to content

Commit

Permalink
[processing][GRASS] Give some more feedback when trying to use
Browse files Browse the repository at this point in the history
v.external for reading inputs, and if we can't, advise why not

(cherry picked from commit 82ac04d)
  • Loading branch information
nyalldawson committed Nov 1, 2018
1 parent e1055c4 commit c55dac1
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions python/plugins/processing/algs/grass7/Grass7Algorithm.py
Expand Up @@ -459,7 +459,7 @@ def processInputs(self, parameters, context, feedback):
paramName, parameters, context) paramName, parameters, context)
else: else:
self.loadVectorLayerFromParameter( self.loadVectorLayerFromParameter(
paramName, parameters, context, feedback, None) paramName, parameters, context, external=None, feedback=feedback)
# For multiple inputs, process each layer # For multiple inputs, process each layer
elif isinstance(param, QgsProcessingParameterMultipleLayers): elif isinstance(param, QgsProcessingParameterMultipleLayers):
layers = self.parameterAsLayerList(parameters, paramName, context) layers = self.parameterAsLayerList(parameters, paramName, context)
Expand All @@ -470,7 +470,7 @@ def processInputs(self, parameters, context, feedback):
self.loadRasterLayer(layerName, layer) self.loadRasterLayer(layerName, layer)
# Add a vector layer # Add a vector layer
elif layer.type() == QgsMapLayer.VectorLayer: elif layer.type() == QgsMapLayer.VectorLayer:
self.loadVectorLayer(layerName, layer, None) self.loadVectorLayer(layerName, layer, external=None, feedback=feedback)


self.postInputs() self.postInputs()


Expand Down Expand Up @@ -808,18 +808,19 @@ def loadVectorLayerFromParameter(self, name, parameters, context, feedback, exte
QgsVectorFileWriter.supportedFormatExtensions(), QgsVectorFileWriter.supportedFormatExtensions(),
feedback=feedback) feedback=feedback)
ogr_layer = QgsVectorLayer(path, '', 'ogr') ogr_layer = QgsVectorLayer(path, '', 'ogr')
self.loadVectorLayer(name, ogr_layer, external) self.loadVectorLayer(name, ogr_layer, external=external, feedback=feedback)
else: else:
# already an ogr layer source # already an ogr disk based layer source
self.loadVectorLayer(name, layer, external) self.loadVectorLayer(name, layer, external=external, feedback=feedback)


def loadVectorLayer(self, name, layer, external=False): def loadVectorLayer(self, name, layer, external=False, feedback=None):
""" """
Creates a dedicated command to load a vector into Creates a dedicated command to load a vector into
temporary GRASS DB. temporary GRASS DB.
:param name: name of the parameter :param name: name of the parameter
:param layer: QgsMapLayer for the vector layer. :param layer: QgsMapLayer for the vector layer.
:param external: use v.external (v.in.ogr if False). :param external: use v.external (v.in.ogr if False).
:param feedback: feedback object
""" """
# TODO: support multiple input formats # TODO: support multiple input formats
if external is None: if external is None:
Expand All @@ -828,12 +829,15 @@ def loadVectorLayer(self, name, layer, external=False):


# safety check: we can only use external for ogr layers which support random read # safety check: we can only use external for ogr layers which support random read
if external: if external:
ds = ogr.Open(layer.source()) feedback.pushInfo('Attempting to use v.external for direct layer read')
ds = ogr.Open(file_path)
if ds is not None: if ds is not None:
ogr_layer = ds.GetLayer() ogr_layer = ds.GetLayer()
if ogr_layer is None or not ogr_layer.TestCapability(ogr.OLCRandomRead): if ogr_layer is None or not ogr_layer.TestCapability(ogr.OLCRandomRead):
feedback.reportError('Cannot use v.external: layer does not support random read')
external = False external = False
else: else:
feedback.reportError('Cannot use v.external: error reading layer')
external = False external = False


self.inputLayers.append(layer) self.inputLayers.append(layer)
Expand Down

0 comments on commit c55dac1

Please sign in to comment.