[processing] Fix some script parameter export/import issues

This commit is contained in:
Matthias Kuhn 2016-12-21 19:52:04 +01:00
parent ffd67f119e
commit 55e3ea033a
2 changed files with 33 additions and 9 deletions

View File

@ -229,7 +229,9 @@ class ParameterBoolean(Parameter):
isOptional, name, definition = _splitParameterOptions(line)
if definition.startswith("boolean"):
descName = _createDescriptiveName(name)
default = definition.strip()[len('boolean') + 1:]
default = definition.strip()[len('boolean') + 1:] or None
if default == 'None':
default = None
if default:
param = ParameterBoolean(name, descName, default)
else:
@ -292,6 +294,8 @@ class ParameterCrs(Parameter):
if definition.startswith("crs"):
descName = _createDescriptiveName(name)
default = definition.strip()[len('crs') + 1:]
if default == 'None':
default = None
if default:
return ParameterCrs(name, descName, default, isOptional)
else:
@ -574,7 +578,7 @@ class ParameterFixedTable(Parameter):
if definition.startswith("fixedtable"):
descName = _createDescriptiveName(name)
default = definition.strip()[len('fixedtable') + 1:] or None
return ParameterFixedTable(name, descName, default, isOptional)
return ParameterFixedTable(name, descName, optional=isOptional)
class ParameterMultipleInput(ParameterDataObject):
@ -1186,15 +1190,17 @@ class ParameterString(Parameter):
param_type = ''
if self.optional:
param_type += 'optional '
param_type += 'string'
return '##' + self.name + '=' + param_type + self.default
param_type += 'string '
return '##' + self.name + '=' + param_type + str(self.default)
@classmethod
def fromScriptCode(self, line):
isOptional, name, definition = _splitParameterOptions(line)
descName = _createDescriptiveName(name)
if definition.lower().strip().startswith('string'):
default = definition.strip()[len('string') + 1:]
default = definition.strip()[len('string') + 1:] or None
if default == 'None':
default = None
if default:
return ParameterString(name, descName, default, optional=isOptional)
else:
@ -1255,15 +1261,17 @@ class ParameterExpression(Parameter):
param_type = ''
if self.optional:
param_type += 'optional '
param_type += 'expression'
return '##' + self.name + '=' + param_type + self.default
param_type += 'expression '
return '##' + self.name + '=' + param_type + str(self.default)
@classmethod
def fromScriptCode(self, line):
isOptional, name, definition = _splitParameterOptions(line)
if definition.lower().strip().startswith('expression'):
descName = _createDescriptiveName(name)
default = definition.strip()[len('expression') + 1:]
default = definition.strip()[len('expression') + 1:] or None
if default == 'None':
default = None
if default:
return ParameterExpression(name, descName, default, optional=isOptional)
else:
@ -1413,7 +1421,7 @@ class ParameterTableField(Parameter):
if self.optional:
param_type += 'optional '
param_type += 'field'
return '##' + self.name + '=' + param_type + self.parent
return '##' + self.name + '=' + param_type + str(self.parent)
@classmethod
def fromScriptCode(self, line):

View File

@ -25,6 +25,8 @@ __copyright__ = '(C) 2013, Victor Olaya'
__revision__ = '$Format:%H$'
import sys
from inspect import isclass
from qgis.testing import start_app, unittest
from processing.core.parameters import (Parameter,
@ -66,6 +68,19 @@ class ParameterTest(unittest.TestCase):
parameter.setValue(123)
self.assertEqual(parameter.getValueAsCommandLineParameter(), '123')
def testScriptCode(self):
"""Simple check that default constructed object export/import correctly"""
paramClasses = [c for c in list(sys.modules[__name__].__dict__.values())
if isclass(c) and issubclass(c, Parameter) and c != Parameter]
for paramClass in paramClasses:
param = paramClass()
if hasattr(param, 'getAsScriptCode'):
code = param.getAsScriptCode()
importedParam = paramClass.fromScriptCode(code)
self.assertEquals(param.optional, importedParam.optional)
self.assertEquals(param.default, importedParam.default, param)
class ParameterBooleanTest(unittest.TestCase):
@ -619,6 +634,7 @@ class ParameterExpressionTest(unittest.TestCase):
result = getParameterFromString(code)
self.assertIsInstance(result, ParameterExpression)
self.assertTrue(result.optional)
self.assertEquals(result.default, parameter.default)
class ParameterTableFieldTest(unittest.TestCase):