@@ -80,7 +80,9 @@ def accept(self):
8080 load = []
8181
8282 feedback = self .createFeedback ()
83- context = dataobjects .createContext (feedback )
83+
84+ load_layers = self .mainWidget .checkLoadLayersOnCompletion .isChecked ()
85+ project = QgsProject .instance () if load_layers else None
8486
8587 for row in range (self .mainWidget .tblParameters .rowCount ()):
8688 col = 0
@@ -90,7 +92,7 @@ def accept(self):
9092 continue
9193 wrapper = self .mainWidget .wrappers [row ][col ]
9294 parameters [param .name ()] = wrapper .value ()
93- if not param .checkValueIsAcceptable (wrapper .value (), context ):
95+ if not param .checkValueIsAcceptable (wrapper .value ()):
9496 self .bar .pushMessage ("" , self .tr ('Wrong or missing parameter value: {0} (row {1})' ).format (
9597 param .description (), row + 1 ),
9698 level = QgsMessageBar .WARNING , duration = 5 )
@@ -104,11 +106,11 @@ def accept(self):
104106 count_visible_outputs += 1
105107 widget = self .mainWidget .tblParameters .cellWidget (row , col )
106108 text = widget .getValue ()
107- if out .checkValueIsAcceptable (text , context ):
109+ if out .checkValueIsAcceptable (text ):
108110 if isinstance (out , (QgsProcessingParameterRasterDestination ,
109111 QgsProcessingParameterFeatureSink )):
110112 # load rasters and sinks on completion
111- parameters [out .name ()] = QgsProcessingOutputLayerDefinition (text , context . project () )
113+ parameters [out .name ()] = QgsProcessingOutputLayerDefinition (text , project )
112114 else :
113115 parameters [out .name ()] = text
114116 col += 1
@@ -145,6 +147,12 @@ def accept(self):
145147 feedback .pushCommandInfo (pformat (parameters ))
146148 feedback .pushInfo ('' )
147149
150+ # important - we create a new context for each iteration
151+ # this avoids holding onto resources and layers from earlier iterations,
152+ # and allows batch processing of many more items then is possible
153+ # if we hold on to these layers
154+ context = dataobjects .createContext (feedback )
155+
148156 alg_start_time = time .time ()
149157 ret , results = execute (self .alg , parameters , context , feedback )
150158 if ret :
@@ -159,9 +167,9 @@ def accept(self):
159167 else :
160168 break
161169
162- feedback . pushInfo ( self . tr ( 'Batch execution completed in {0:0.2f} seconds' . format ( time . time () - start_time )) )
170+ handleAlgorithmResults ( self . alg , context , feedback , False )
163171
164- handleAlgorithmResults ( self . alg , context , feedback , False )
172+ feedback . pushInfo ( self . tr ( 'Batch execution completed in {0:0.2f} seconds' . format ( time . time () - start_time )) )
165173
166174 self .finish (algorithm_results )
167175 self .buttonCancel .setEnabled (False )
0 commit comments