Skip to content

Commit 55e3ea0

Browse files
committed
[processing] Fix some script parameter export/import issues
1 parent ffd67f1 commit 55e3ea0

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

python/plugins/processing/core/parameters.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,9 @@ def fromScriptCode(self, line):
229229
isOptional, name, definition = _splitParameterOptions(line)
230230
if definition.startswith("boolean"):
231231
descName = _createDescriptiveName(name)
232-
default = definition.strip()[len('boolean') + 1:]
232+
default = definition.strip()[len('boolean') + 1:] or None
233+
if default == 'None':
234+
default = None
233235
if default:
234236
param = ParameterBoolean(name, descName, default)
235237
else:
@@ -292,6 +294,8 @@ def fromScriptCode(self, line):
292294
if definition.startswith("crs"):
293295
descName = _createDescriptiveName(name)
294296
default = definition.strip()[len('crs') + 1:]
297+
if default == 'None':
298+
default = None
295299
if default:
296300
return ParameterCrs(name, descName, default, isOptional)
297301
else:
@@ -574,7 +578,7 @@ def fromScriptCode(self, line):
574578
if definition.startswith("fixedtable"):
575579
descName = _createDescriptiveName(name)
576580
default = definition.strip()[len('fixedtable') + 1:] or None
577-
return ParameterFixedTable(name, descName, default, isOptional)
581+
return ParameterFixedTable(name, descName, optional=isOptional)
578582

579583

580584
class ParameterMultipleInput(ParameterDataObject):
@@ -1186,15 +1190,17 @@ def getAsScriptCode(self):
11861190
param_type = ''
11871191
if self.optional:
11881192
param_type += 'optional '
1189-
param_type += 'string'
1190-
return '##' + self.name + '=' + param_type + self.default
1193+
param_type += 'string '
1194+
return '##' + self.name + '=' + param_type + str(self.default)
11911195

11921196
@classmethod
11931197
def fromScriptCode(self, line):
11941198
isOptional, name, definition = _splitParameterOptions(line)
11951199
descName = _createDescriptiveName(name)
11961200
if definition.lower().strip().startswith('string'):
1197-
default = definition.strip()[len('string') + 1:]
1201+
default = definition.strip()[len('string') + 1:] or None
1202+
if default == 'None':
1203+
default = None
11981204
if default:
11991205
return ParameterString(name, descName, default, optional=isOptional)
12001206
else:
@@ -1255,15 +1261,17 @@ def getAsScriptCode(self):
12551261
param_type = ''
12561262
if self.optional:
12571263
param_type += 'optional '
1258-
param_type += 'expression'
1259-
return '##' + self.name + '=' + param_type + self.default
1264+
param_type += 'expression '
1265+
return '##' + self.name + '=' + param_type + str(self.default)
12601266

12611267
@classmethod
12621268
def fromScriptCode(self, line):
12631269
isOptional, name, definition = _splitParameterOptions(line)
12641270
if definition.lower().strip().startswith('expression'):
12651271
descName = _createDescriptiveName(name)
1266-
default = definition.strip()[len('expression') + 1:]
1272+
default = definition.strip()[len('expression') + 1:] or None
1273+
if default == 'None':
1274+
default = None
12671275
if default:
12681276
return ParameterExpression(name, descName, default, optional=isOptional)
12691277
else:
@@ -1413,7 +1421,7 @@ def getAsScriptCode(self):
14131421
if self.optional:
14141422
param_type += 'optional '
14151423
param_type += 'field'
1416-
return '##' + self.name + '=' + param_type + self.parent
1424+
return '##' + self.name + '=' + param_type + str(self.parent)
14171425

14181426
@classmethod
14191427
def fromScriptCode(self, line):

python/plugins/processing/tests/ParametersTest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28+
import sys
29+
from inspect import isclass
2830
from qgis.testing import start_app, unittest
2931

3032
from processing.core.parameters import (Parameter,
@@ -66,6 +68,19 @@ def testGetValueAsCommandLineParameter(self):
6668
parameter.setValue(123)
6769
self.assertEqual(parameter.getValueAsCommandLineParameter(), '123')
6870

71+
def testScriptCode(self):
72+
"""Simple check that default constructed object export/import correctly"""
73+
paramClasses = [c for c in list(sys.modules[__name__].__dict__.values())
74+
if isclass(c) and issubclass(c, Parameter) and c != Parameter]
75+
76+
for paramClass in paramClasses:
77+
param = paramClass()
78+
if hasattr(param, 'getAsScriptCode'):
79+
code = param.getAsScriptCode()
80+
importedParam = paramClass.fromScriptCode(code)
81+
self.assertEquals(param.optional, importedParam.optional)
82+
self.assertEquals(param.default, importedParam.default, param)
83+
6984

7085
class ParameterBooleanTest(unittest.TestCase):
7186

@@ -619,6 +634,7 @@ def testScriptCode(self):
619634
result = getParameterFromString(code)
620635
self.assertIsInstance(result, ParameterExpression)
621636
self.assertTrue(result.optional)
637+
self.assertEquals(result.default, parameter.default)
622638

623639

624640
class ParameterTableFieldTest(unittest.TestCase):

0 commit comments

Comments
 (0)