@@ -459,7 +459,7 @@ def processInputs(self, parameters, context, feedback):
459
459
paramName , parameters , context )
460
460
else :
461
461
self .loadVectorLayerFromParameter (
462
- paramName , parameters , context , feedback , None )
462
+ paramName , parameters , context , external = None , feedback = feedback )
463
463
# For multiple inputs, process each layer
464
464
elif isinstance (param , QgsProcessingParameterMultipleLayers ):
465
465
layers = self .parameterAsLayerList (parameters , paramName , context )
@@ -470,7 +470,7 @@ def processInputs(self, parameters, context, feedback):
470
470
self .loadRasterLayer (layerName , layer )
471
471
# Add a vector layer
472
472
elif layer .type () == QgsMapLayer .VectorLayer :
473
- self .loadVectorLayer (layerName , layer , None )
473
+ self .loadVectorLayer (layerName , layer , external = None , feedback = feedback )
474
474
475
475
self .postInputs ()
476
476
@@ -808,18 +808,19 @@ def loadVectorLayerFromParameter(self, name, parameters, context, feedback, exte
808
808
QgsVectorFileWriter .supportedFormatExtensions (),
809
809
feedback = feedback )
810
810
ogr_layer = QgsVectorLayer (path , '' , 'ogr' )
811
- self .loadVectorLayer (name , ogr_layer , external )
811
+ self .loadVectorLayer (name , ogr_layer , external = external , feedback = feedback )
812
812
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 )
815
815
816
- def loadVectorLayer (self , name , layer , external = False ):
816
+ def loadVectorLayer (self , name , layer , external = False , feedback = None ):
817
817
"""
818
818
Creates a dedicated command to load a vector into
819
819
temporary GRASS DB.
820
820
:param name: name of the parameter
821
821
:param layer: QgsMapLayer for the vector layer.
822
822
:param external: use v.external (v.in.ogr if False).
823
+ :param feedback: feedback object
823
824
"""
824
825
# TODO: support multiple input formats
825
826
if external is None :
@@ -828,12 +829,15 @@ def loadVectorLayer(self, name, layer, external=False):
828
829
829
830
# safety check: we can only use external for ogr layers which support random read
830
831
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 )
832
834
if ds is not None :
833
835
ogr_layer = ds .GetLayer ()
834
836
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' )
835
838
external = False
836
839
else :
840
+ feedback .reportError ('Cannot use v.external: error reading layer' )
837
841
external = False
838
842
839
843
self .inputLayers .append (layer )
0 commit comments