Skip to content

Commit 3cb6a40

Browse files
committedJan 25, 2019
[processing] Add API to get an import statement and classname for a parameter type
1 parent 60f252c commit 3cb6a40

File tree

5 files changed

+319
-0
lines changed

5 files changed

+319
-0
lines changed
 

‎python/core/auto_generated/processing/qgsprocessingparametertype.sip.in

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,27 @@ A human readable and translatable short name for this parameter type.
5151
This will be used in comboboxes and list widgets.
5252
%End
5353

54+
55+
virtual QString pythonImportString() const;
56+
%Docstring
57+
Returns a valid Python import string for importing the corresponding parameter type,
58+
e.g. "from qgis.core import :py:class:`QgsProcessingParameterBoolean`".
59+
60+
.. seealso:: :py:func:`className`
61+
62+
.. versionadded:: 3.6
63+
%End
64+
65+
66+
virtual QString className() const;
67+
%Docstring
68+
Returns the corresponding class name for the parameter type.
69+
70+
.. seealso:: :py:func:`pythonImportString`
71+
72+
.. versionadded:: 3.6
73+
%End
74+
5475
virtual QString id() const = 0;
5576
%Docstring
5677
A static id for this type which will be used for storing this parameter type.

‎python/plugins/processing/algs/qgis/FieldsMapper.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ def name(self):
167167
def id(self):
168168
return 'fields_mapping'
169169

170+
def pythonImportString(self):
171+
return 'from processing.algs.qgis.FieldsMapper import FieldsMapper'
172+
173+
def className(self):
174+
return 'FieldsMapper.ParameterFieldsMapping'
175+
170176
def description(self):
171177
return QCoreApplication.translate('Processing', 'A mapping of field names to field type definitions and expressions. Used for the refactor fields algorithm.')
172178

‎python/plugins/processing/tests/QgisAlgorithmsTest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ def testProcessingException(self):
100100
results, ok = alg.run({}, context, feedback)
101101
self.assertFalse(ok)
102102

103+
def testParameterPythonImport(self):
104+
for t in QgsApplication.processingRegistry().parameterTypes():
105+
import_string = t.pythonImportString()
106+
# check that pythonImportString correctly imports
107+
exec(import_string)
108+
# and now we should be able to instantiate an object!
109+
exec('test = {}(\'id\',\'name\')\nself.assertIsNotNone(test)'.format(t.className()))
110+
103111

104112
if __name__ == '__main__':
105113
nose2.main()

‎src/core/processing/qgsprocessingparametertype.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,30 @@ class CORE_EXPORT QgsProcessingParameterType
6868
*/
6969
virtual QString name() const = 0;
7070

71+
// TODO QGIS 4.0 -- make pure virtual
72+
73+
/**
74+
* Returns a valid Python import string for importing the corresponding parameter type,
75+
* e.g. "from qgis.core import QgsProcessingParameterBoolean".
76+
*
77+
* \see className()
78+
* \since QGIS 3.6
79+
*/
80+
virtual QString pythonImportString() const { return QString(); }
81+
82+
// TODO QGIS 4.0 -- make pure virtual
83+
84+
/**
85+
* Returns the corresponding class name for the parameter type.
86+
*
87+
* \see pythonImportString()
88+
* \since QGIS 3.6
89+
*/
90+
virtual QString className() const
91+
{
92+
return name(); // this is wrong, but it's better than nothing for subclasses which don't implement this method
93+
}
94+
7195
/**
7296
* A static id for this type which will be used for storing this parameter type.
7397
*/

‎src/core/processing/qgsprocessingparametertypeimpl.h

Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,16 @@ class CORE_EXPORT QgsProcessingParameterTypeRasterLayer : public QgsProcessingPa
4949
return QCoreApplication::translate( "Processing", "Raster Layer" );
5050
}
5151

52+
QString pythonImportString() const override
53+
{
54+
return QStringLiteral( "from qgis.core import QgsProcessingParameterRasterLayer" );
55+
}
56+
57+
QString className() const override
58+
{
59+
return QStringLiteral( "QgsProcessingParameterRasterLayer" );
60+
}
61+
5262
QString id() const override
5363
{
5464
return QStringLiteral( "raster" );
@@ -88,6 +98,16 @@ class CORE_EXPORT QgsProcessingParameterTypeMeshLayer : public QgsProcessingPara
8898
return QCoreApplication::translate( "Processing", "Mesh Layer" );
8999
}
90100

101+
QString pythonImportString() const override
102+
{
103+
return QStringLiteral( "from qgis.core import QgsProcessingParameterMeshLayer" );
104+
}
105+
106+
QString className() const override
107+
{
108+
return QStringLiteral( "QgsProcessingParameterMeshLayer" );
109+
}
110+
91111
QString id() const override
92112
{
93113
return QStringLiteral( "mesh" );
@@ -126,6 +146,16 @@ class CORE_EXPORT QgsProcessingParameterTypeVectorLayer : public QgsProcessingPa
126146
return QCoreApplication::translate( "Processing", "Vector Layer" );
127147
}
128148

149+
QString pythonImportString() const override
150+
{
151+
return QStringLiteral( "from qgis.core import QgsProcessingParameterVectorLayer" );
152+
}
153+
154+
QString className() const override
155+
{
156+
return QStringLiteral( "QgsProcessingParameterVectorLayer" );
157+
}
158+
129159
QString id() const override
130160
{
131161
return QStringLiteral( "vector" );
@@ -170,6 +200,16 @@ class CORE_EXPORT QgsProcessingParameterTypeMapLayer : public QgsProcessingParam
170200
return QStringLiteral( "maplayer" );
171201
}
172202

203+
QString pythonImportString() const override
204+
{
205+
return QStringLiteral( "from qgis.core import QgsProcessingParameterMapLayer" );
206+
}
207+
208+
QString className() const override
209+
{
210+
return QStringLiteral( "QgsProcessingParameterMapLayer" );
211+
}
212+
173213
QStringList acceptedPythonTypes() const override
174214
{
175215
return QStringList() << QObject::tr( "str: layer ID" )
@@ -211,6 +251,16 @@ class CORE_EXPORT QgsProcessingParameterTypeBoolean : public QgsProcessingParame
211251
return QStringLiteral( "boolean" );
212252
}
213253

254+
QString pythonImportString() const override
255+
{
256+
return QStringLiteral( "from qgis.core import QgsProcessingParameterBoolean" );
257+
}
258+
259+
QString className() const override
260+
{
261+
return QStringLiteral( "QgsProcessingParameterBoolean" );
262+
}
263+
214264
QStringList acceptedPythonTypes() const override
215265
{
216266
return QStringList() << QStringLiteral( "bool" )
@@ -249,6 +299,16 @@ class CORE_EXPORT QgsProcessingParameterTypeExpression : public QgsProcessingPar
249299
return QStringLiteral( "expression" );
250300
}
251301

302+
QString pythonImportString() const override
303+
{
304+
return QStringLiteral( "from qgis.core import QgsProcessingParameterExpression" );
305+
}
306+
307+
QString className() const override
308+
{
309+
return QStringLiteral( "QgsProcessingParameterExpression" );
310+
}
311+
252312
QStringList acceptedPythonTypes() const override
253313
{
254314
return QStringList() << QStringLiteral( "str" )
@@ -285,6 +345,16 @@ class CORE_EXPORT QgsProcessingParameterTypeCrs : public QgsProcessingParameterT
285345
return QStringLiteral( "crs" );
286346
}
287347

348+
QString pythonImportString() const override
349+
{
350+
return QStringLiteral( "from qgis.core import QgsProcessingParameterCrs" );
351+
}
352+
353+
QString className() const override
354+
{
355+
return QStringLiteral( "QgsProcessingParameterCrs" );
356+
}
357+
288358
QStringList acceptedPythonTypes() const override
289359
{
290360
return QStringList()
@@ -331,6 +401,16 @@ class CORE_EXPORT QgsProcessingParameterTypeRange : public QgsProcessingParamete
331401
return QStringLiteral( "range" );
332402
}
333403

404+
QString pythonImportString() const override
405+
{
406+
return QStringLiteral( "from qgis.core import QgsProcessingParameterRange" );
407+
}
408+
409+
QString className() const override
410+
{
411+
return QStringLiteral( "QgsProcessingParameterRange" );
412+
}
413+
334414
QStringList acceptedPythonTypes() const override
335415
{
336416
return QStringList() << QObject::tr( "list[float]: list of 2 float values" )
@@ -369,6 +449,16 @@ class CORE_EXPORT QgsProcessingParameterTypePoint : public QgsProcessingParamete
369449
return QStringLiteral( "point" );
370450
}
371451

452+
QString pythonImportString() const override
453+
{
454+
return QStringLiteral( "from qgis.core import QgsProcessingParameterPoint" );
455+
}
456+
457+
QString className() const override
458+
{
459+
return QStringLiteral( "QgsProcessingParameterPoint" );
460+
}
461+
372462
QStringList acceptedPythonTypes() const override
373463
{
374464
return QStringList() << QObject::tr( "str: as an 'x,y' string, e.g. '1.5,10.1'" )
@@ -407,6 +497,16 @@ class CORE_EXPORT QgsProcessingParameterTypeEnum : public QgsProcessingParameter
407497
return QStringLiteral( "enum" );
408498
}
409499

500+
QString pythonImportString() const override
501+
{
502+
return QStringLiteral( "from qgis.core import QgsProcessingParameterEnum" );
503+
}
504+
505+
QString className() const override
506+
{
507+
return QStringLiteral( "QgsProcessingParameterEnum" );
508+
}
509+
410510
QStringList acceptedPythonTypes() const override
411511
{
412512
return QStringList() << QStringLiteral( "int" )
@@ -444,6 +544,16 @@ class CORE_EXPORT QgsProcessingParameterTypeExtent : public QgsProcessingParamet
444544
return QStringLiteral( "extent" );
445545
}
446546

547+
QString pythonImportString() const override
548+
{
549+
return QStringLiteral( "from qgis.core import QgsProcessingParameterExtent" );
550+
}
551+
552+
QString className() const override
553+
{
554+
return QStringLiteral( "QgsProcessingParameterExtent" );
555+
}
556+
447557
QStringList acceptedPythonTypes() const override
448558
{
449559
return QStringList() << QObject::tr( "str: as comma delimited list of x min, x max, y min, y max. E.g. '4,10,101,105'" )
@@ -487,6 +597,16 @@ class CORE_EXPORT QgsProcessingParameterTypeMatrix : public QgsProcessingParamet
487597
return QStringLiteral( "matrix" );
488598
}
489599

600+
QString pythonImportString() const override
601+
{
602+
return QStringLiteral( "from qgis.core import QgsProcessingParameterMatrix" );
603+
}
604+
605+
QString className() const override
606+
{
607+
return QStringLiteral( "QgsProcessingParameterMatrix" );
608+
}
609+
490610
QStringList acceptedPythonTypes() const override
491611
{
492612
return QStringList() << QObject::tr( "str: as comma delimited list of values" )
@@ -524,6 +644,16 @@ class CORE_EXPORT QgsProcessingParameterTypeFile : public QgsProcessingParameter
524644
return QStringLiteral( "file" );
525645
}
526646

647+
QString pythonImportString() const override
648+
{
649+
return QStringLiteral( "from qgis.core import QgsProcessingParameterFile" );
650+
}
651+
652+
QString className() const override
653+
{
654+
return QStringLiteral( "QgsProcessingParameterFile" );
655+
}
656+
527657
QStringList acceptedPythonTypes() const override
528658
{
529659
return QStringList() << QStringLiteral( "str" )
@@ -560,6 +690,16 @@ class CORE_EXPORT QgsProcessingParameterTypeField : public QgsProcessingParamete
560690
return QStringLiteral( "field" );
561691
}
562692

693+
QString pythonImportString() const override
694+
{
695+
return QStringLiteral( "from qgis.core import QgsProcessingParameterField" );
696+
}
697+
698+
QString className() const override
699+
{
700+
return QStringLiteral( "QgsProcessingParameterField" );
701+
}
702+
563703
QStringList acceptedPythonTypes() const override
564704
{
565705
return QStringList() << QStringLiteral( "str" )
@@ -597,6 +737,16 @@ class CORE_EXPORT QgsProcessingParameterTypeVectorDestination : public QgsProces
597737
return QStringLiteral( "vectorDestination" );
598738
}
599739

740+
QString pythonImportString() const override
741+
{
742+
return QStringLiteral( "from qgis.core import QgsProcessingParameterVectorDestination" );
743+
}
744+
745+
QString className() const override
746+
{
747+
return QStringLiteral( "QgsProcessingParameterVectorDestination" );
748+
}
749+
600750
ParameterFlags flags() const override
601751
{
602752
ParameterFlags flags = QgsProcessingParameterType::flags();
@@ -642,6 +792,16 @@ class CORE_EXPORT QgsProcessingParameterTypeFileDestination : public QgsProcessi
642792
return QStringLiteral( "fileDestination" );
643793
}
644794

795+
QString pythonImportString() const override
796+
{
797+
return QStringLiteral( "from qgis.core import QgsProcessingParameterFileDestination" );
798+
}
799+
800+
QString className() const override
801+
{
802+
return QStringLiteral( "QgsProcessingParameterFileDestination" );
803+
}
804+
645805
ParameterFlags flags() const override
646806
{
647807
ParameterFlags flags = QgsProcessingParameterType::flags();
@@ -687,6 +847,16 @@ class CORE_EXPORT QgsProcessingParameterTypeFolderDestination : public QgsProces
687847
return QStringLiteral( "folderDestination" );
688848
}
689849

850+
QString pythonImportString() const override
851+
{
852+
return QStringLiteral( "from qgis.core import QgsProcessingParameterFolderDestination" );
853+
}
854+
855+
QString className() const override
856+
{
857+
return QStringLiteral( "QgsProcessingParameterFolderDestination" );
858+
}
859+
690860
ParameterFlags flags() const override
691861
{
692862
ParameterFlags flags = QgsProcessingParameterType::flags();
@@ -731,6 +901,16 @@ class CORE_EXPORT QgsProcessingParameterTypeRasterDestination : public QgsProces
731901
return QStringLiteral( "rasterDestination" );
732902
}
733903

904+
QString pythonImportString() const override
905+
{
906+
return QStringLiteral( "from qgis.core import QgsProcessingParameterRasterDestination" );
907+
}
908+
909+
QString className() const override
910+
{
911+
return QStringLiteral( "QgsProcessingParameterRasterDestination" );
912+
}
913+
734914
ParameterFlags flags() const override
735915
{
736916
ParameterFlags flags = QgsProcessingParameterType::flags();
@@ -775,6 +955,16 @@ class CORE_EXPORT QgsProcessingParameterTypeString : public QgsProcessingParamet
775955
return QStringLiteral( "string" );
776956
}
777957

958+
QString pythonImportString() const override
959+
{
960+
return QStringLiteral( "from qgis.core import QgsProcessingParameterString" );
961+
}
962+
963+
QString className() const override
964+
{
965+
return QStringLiteral( "QgsProcessingParameterString" );
966+
}
967+
778968
QStringList acceptedPythonTypes() const override
779969
{
780970
return QStringList() << QStringLiteral( "str" )
@@ -811,6 +1001,16 @@ class CORE_EXPORT QgsProcessingParameterTypeAuthConfig : public QgsProcessingPar
8111001
return QStringLiteral( "authcfg" );
8121002
}
8131003

1004+
QString pythonImportString() const override
1005+
{
1006+
return QStringLiteral( "from qgis.core import QgsProcessingParameterAuthConfig" );
1007+
}
1008+
1009+
QString className() const override
1010+
{
1011+
return QStringLiteral( "QgsProcessingParameterAuthConfig" );
1012+
}
1013+
8141014
QStringList acceptedPythonTypes() const override
8151015
{
8161016
return QStringList() << QStringLiteral( "str" );
@@ -846,6 +1046,16 @@ class CORE_EXPORT QgsProcessingParameterTypeMultipleLayers : public QgsProcessin
8461046
return QStringLiteral( "multilayer" );
8471047
}
8481048

1049+
QString pythonImportString() const override
1050+
{
1051+
return QStringLiteral( "from qgis.core import QgsProcessingParameterMultipleLayers" );
1052+
}
1053+
1054+
QString className() const override
1055+
{
1056+
return QStringLiteral( "QgsProcessingParameterMultipleLayers" );
1057+
}
1058+
8491059
QStringList acceptedPythonTypes() const override
8501060
{
8511061
return QStringList() << QObject::tr( "list[str]: list of layer IDs" )
@@ -885,6 +1095,16 @@ class CORE_EXPORT QgsProcessingParameterTypeFeatureSource : public QgsProcessing
8851095
return QStringLiteral( "source" );
8861096
}
8871097

1098+
QString pythonImportString() const override
1099+
{
1100+
return QStringLiteral( "from qgis.core import QgsProcessingParameterFeatureSource" );
1101+
}
1102+
1103+
QString className() const override
1104+
{
1105+
return QStringLiteral( "QgsProcessingParameterFeatureSource" );
1106+
}
1107+
8881108
QStringList acceptedPythonTypes() const override
8891109
{
8901110
return QStringList() << QObject::tr( "str: layer ID" )
@@ -925,6 +1145,16 @@ class CORE_EXPORT QgsProcessingParameterTypeNumber : public QgsProcessingParamet
9251145
return QStringLiteral( "number" );
9261146
}
9271147

1148+
QString pythonImportString() const override
1149+
{
1150+
return QStringLiteral( "from qgis.core import QgsProcessingParameterNumber" );
1151+
}
1152+
1153+
QString className() const override
1154+
{
1155+
return QStringLiteral( "QgsProcessingParameterNumber" );
1156+
}
1157+
9281158
QStringList acceptedPythonTypes() const override
9291159
{
9301160
return QStringList() << QStringLiteral( "int" )
@@ -962,6 +1192,16 @@ class CORE_EXPORT QgsProcessingParameterTypeDistance : public QgsProcessingParam
9621192
return QStringLiteral( "distance" );
9631193
}
9641194

1195+
QString pythonImportString() const override
1196+
{
1197+
return QStringLiteral( "from qgis.core import QgsProcessingParameterDistance" );
1198+
}
1199+
1200+
QString className() const override
1201+
{
1202+
return QStringLiteral( "QgsProcessingParameterDistance" );
1203+
}
1204+
9651205
QStringList acceptedPythonTypes() const override
9661206
{
9671207
return QStringList() << QStringLiteral( "int" )
@@ -1000,6 +1240,16 @@ class CORE_EXPORT QgsProcessingParameterTypeBand : public QgsProcessingParameter
10001240
return QStringLiteral( "band" );
10011241
}
10021242

1243+
QString pythonImportString() const override
1244+
{
1245+
return QStringLiteral( "from qgis.core import QgsProcessingParameterBand" );
1246+
}
1247+
1248+
QString className() const override
1249+
{
1250+
return QStringLiteral( "QgsProcessingParameterBand" );
1251+
}
1252+
10031253
QStringList acceptedPythonTypes() const override
10041254
{
10051255
return QStringList() << QStringLiteral( "int" )
@@ -1044,6 +1294,16 @@ class CORE_EXPORT QgsProcessingParameterTypeFeatureSink : public QgsProcessingPa
10441294
return QStringLiteral( "sink" );
10451295
}
10461296

1297+
QString pythonImportString() const override
1298+
{
1299+
return QStringLiteral( "from qgis.core import QgsProcessingParameterFeatureSink" );
1300+
}
1301+
1302+
QString className() const override
1303+
{
1304+
return QStringLiteral( "QgsProcessingParameterFeatureSink" );
1305+
}
1306+
10471307
QStringList acceptedPythonTypes() const override
10481308
{
10491309
return QStringList() << QObject::tr( "str: destination vector file, e.g. 'd:/test.shp'" )

0 commit comments

Comments
 (0)
Please sign in to comment.