Skip to content

Commit 492ad2d

Browse files
authored
Merge pull request #4715 from nyalldawson/processing_pt31
[processing] Bring back iterating mode for algorithms
2 parents 40cae29 + 63611b1 commit 492ad2d

20 files changed

+708
-174
lines changed

python/core/processing/qgsprocessingalgorithm.sip

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,16 @@ class QgsProcessingAlgorithm
255255
:rtype: bool
256256
%End
257257

258+
virtual QString asPythonCommand( const QVariantMap &parameters, QgsProcessingContext &context ) const;
259+
%Docstring
260+
Returns a Python command string which can be executed to run the algorithm
261+
using the specified ``parameters``.
262+
263+
Algorithms which cannot be run from a Python command should return an empty
264+
string.
265+
:rtype: str
266+
%End
267+
258268
protected:
259269

260270
bool addParameter( QgsProcessingParameterDefinition *parameterDefinition /Transfer/ );

python/core/processing/qgsprocessingparameters.sip

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,14 @@ class QgsProcessingParameterDefinition
288288
:rtype: bool
289289
%End
290290

291+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
292+
%Docstring
293+
Returns a string version of the parameter input ``value``, which is suitable for use as an input
294+
parameter value when running an algorithm directly from a Python command.
295+
The returned value must be correctly escaped - e.g. string values must be wrapped in ' 's.
296+
:rtype: str
297+
%End
298+
291299
protected:
292300

293301

@@ -517,6 +525,8 @@ class QgsProcessingParameterBoolean : QgsProcessingParameterDefinition
517525
%End
518526

519527
virtual QString type() const;
528+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
529+
520530
};
521531

522532
class QgsProcessingParameterCrs : QgsProcessingParameterDefinition
@@ -540,6 +550,8 @@ class QgsProcessingParameterCrs : QgsProcessingParameterDefinition
540550
virtual QString type() const;
541551
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
542552

553+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
554+
543555
};
544556

545557
class QgsProcessingParameterMapLayer : QgsProcessingParameterDefinition
@@ -563,6 +575,8 @@ class QgsProcessingParameterMapLayer : QgsProcessingParameterDefinition
563575
virtual QString type() const;
564576
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
565577

578+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
579+
566580
};
567581

568582
class QgsProcessingParameterExtent : QgsProcessingParameterDefinition
@@ -586,6 +600,8 @@ class QgsProcessingParameterExtent : QgsProcessingParameterDefinition
586600
virtual QString type() const;
587601
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
588602

603+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
604+
589605

590606
};
591607

@@ -693,6 +709,8 @@ class QgsProcessingParameterMatrix : QgsProcessingParameterDefinition
693709
virtual QString type() const;
694710
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
695711

712+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
713+
696714

697715
QStringList headers() const;
698716
%Docstring
@@ -763,6 +781,8 @@ class QgsProcessingParameterMultipleLayers : QgsProcessingParameterDefinition
763781
virtual QString type() const;
764782
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
765783

784+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
785+
766786

767787
QgsProcessingParameterDefinition::LayerType layerType() const;
768788
%Docstring
@@ -826,6 +846,8 @@ class QgsProcessingParameterNumber : QgsProcessingParameterDefinition
826846
virtual QString type() const;
827847
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
828848

849+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
850+
829851

830852
double minimum() const;
831853
%Docstring
@@ -891,6 +913,8 @@ class QgsProcessingParameterRange : QgsProcessingParameterDefinition
891913
virtual QString type() const;
892914
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
893915

916+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
917+
894918

895919
QgsProcessingParameterNumber::Type dataType() const;
896920
%Docstring
@@ -928,6 +952,8 @@ class QgsProcessingParameterRasterLayer : QgsProcessingParameterDefinition
928952
virtual QString type() const;
929953
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
930954

955+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
956+
931957

932958
};
933959

@@ -954,6 +980,8 @@ class QgsProcessingParameterEnum : QgsProcessingParameterDefinition
954980
virtual QString type() const;
955981
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
956982

983+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
984+
957985

958986
QStringList options() const;
959987
%Docstring
@@ -1003,6 +1031,8 @@ class QgsProcessingParameterString : QgsProcessingParameterDefinition
10031031
%End
10041032

10051033
virtual QString type() const;
1034+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
1035+
10061036

10071037
bool multiLine() const;
10081038
%Docstring
@@ -1039,6 +1069,8 @@ class QgsProcessingParameterExpression : QgsProcessingParameterDefinition
10391069
%End
10401070

10411071
virtual QString type() const;
1072+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
1073+
10421074

10431075
QString parentLayerParameter() const;
10441076
%Docstring
@@ -1109,6 +1141,8 @@ class QgsProcessingParameterTableField : QgsProcessingParameterDefinition
11091141
virtual QString type() const;
11101142
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
11111143

1144+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
1145+
11121146

11131147
QString parentLayerParameter() const;
11141148
%Docstring
@@ -1173,6 +1207,8 @@ class QgsProcessingParameterFeatureSource : QgsProcessingParameterDefinition
11731207
virtual QString type() const;
11741208
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
11751209

1210+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
1211+
11761212

11771213
QList< int > dataTypes() const;
11781214
%Docstring
@@ -1214,6 +1250,8 @@ class QgsProcessingParameterFeatureSink : QgsProcessingParameterDefinition
12141250
virtual bool isDestination() const;
12151251
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
12161252

1253+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
1254+
12171255

12181256
QgsProcessingParameterDefinition::LayerType dataType() const;
12191257
%Docstring
@@ -1260,6 +1298,8 @@ class QgsProcessingParameterRasterOutput : QgsProcessingParameterDefinition
12601298
virtual bool isDestination() const;
12611299
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
12621300

1301+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
1302+
12631303
};
12641304

12651305
class QgsProcessingParameterFileOutput : QgsProcessingParameterDefinition
@@ -1286,6 +1326,8 @@ class QgsProcessingParameterFileOutput : QgsProcessingParameterDefinition
12861326
virtual bool isDestination() const;
12871327
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
12881328

1329+
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
1330+
12891331

12901332
QString fileFilter() const;
12911333
%Docstring

python/core/processing/qgsprocessingutils.sip

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,15 @@ class QgsProcessingUtils
126126
:rtype: QgsRectangle
127127
%End
128128

129+
static QVariant generateIteratingDestination( const QVariant &input, const QVariant &id, QgsProcessingContext &context );
130+
%Docstring
131+
Converts an ``input`` parameter value for use in source iterating mode, where one individual sink
132+
is created per input feature.
133+
The ``id`` parameter represents the unique ID for this output, which is embedded into the resulting
134+
parameter value.
135+
:rtype: QVariant
136+
%End
137+
129138
};
130139

131140

python/plugins/processing/algs/qgis/ui/FieldsCalculatorDialog.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,9 @@ def accept(self):
224224
parameters = self.getParamValues()
225225
if parameters:
226226
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
227-
ProcessingLog.addToLog(self.alg.getAsCommand())
228-
229227
context = dataobjects.createContext()
228+
ProcessingLog.addToLog(self.alg.asPythonCommand(parameters, context))
229+
230230
self.executed, results = execute(self.alg, parameters, context, self.feedback)
231231
if self.executed:
232232
handleAlgorithmResults(self.alg,

python/plugins/processing/core/GeoAlgorithm.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -301,23 +301,6 @@ def getOutputValue(self, name):
301301
return out.value
302302
return None
303303

304-
def getAsCommand(self):
305-
"""Returns the command that would run this same algorithm from
306-
the console.
307-
308-
Should return None if the algorithm cannot be run from the
309-
console.
310-
"""
311-
312-
s = 'processing.run("' + self.id() + '",'
313-
for param in self.parameterDefinitions():
314-
s += param.getValueAsCommandLineParameter() + ','
315-
for out in self.outputs:
316-
if not out.flags() & QgsProcessingParameterDefinition.FlagHidden:
317-
s += out.getValueAsCommandLineParameter() + ','
318-
s = s[:-1] + ')'
319-
return s
320-
321304
def tr(self, string, context=''):
322305
if context == '':
323306
context = self.__class__.__name__

python/plugins/processing/core/Processing.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,8 @@ def runAlgorithm(algOrName, onFinish, *args, **kwargs):
139139
for (name, value) in list(args[0].items()):
140140
param = alg.parameterDefinition(name)
141141
if param:
142-
# TODO
143-
# and param.setValue(value):
144142
parameters[param.name()] = value
145143
continue
146-
output = alg.getOutputFromName(name)
147-
if output and output.setValue(value):
148-
continue
149144
# fix_print_with_import
150145
print('Error: Wrong parameter value %s for parameter %s.' % (value, name))
151146
QgsMessageLog.logMessage(
@@ -249,7 +244,7 @@ def runAlgorithm(algOrName, onFinish, *args, **kwargs):
249244
QApplication.restoreOverrideCursor()
250245
if isinstance(feedback, MessageBarProgress):
251246
feedback.close()
252-
return alg
247+
return results
253248

254249
@staticmethod
255250
def tr(string, context=''):

0 commit comments

Comments
 (0)