Skip to content

Commit fe5d016

Browse files
committed
[processing] added multiple option to ParameterTableFIeld
removed ParameterTableMultipleField and did some cleanup
1 parent bc06600 commit fe5d016

10 files changed

+123
-294
lines changed

python/plugins/processing/algs/qgis/DeleteColumn.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
class DeleteColumn(GeoAlgorithm):
3737

3838
INPUT = 'INPUT'
39-
COLUMN = 'COLUMN'
39+
COLUMNS = 'COLUMN'
4040
OUTPUT = 'OUTPUT'
4141

4242
def defineCharacteristics(self):
@@ -45,17 +45,20 @@ def defineCharacteristics(self):
4545

4646
self.addParameter(ParameterVector(self.INPUT,
4747
self.tr('Input layer')))
48-
self.addParameter(ParameterTableField(self.COLUMN,
49-
self.tr('Field to delete'), self.INPUT))
50-
self.addOutput(OutputVector(self.OUTPUT, self.tr('Deleted column')))
48+
self.addParameter(ParameterTableField(self.COLUMNS,
49+
self.tr('Fields to delete'), self.INPUT, multiple=True))
50+
self.addOutput(OutputVector(self.OUTPUT, self.tr('Output layer')))
5151

5252
def processAlgorithm(self, progress):
53-
layer = dataobjects.getObjectFromUri(
54-
self.getParameterValue(self.INPUT))
55-
idx = layer.fields().lookupField(self.getParameterValue(self.COLUMN))
56-
53+
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
54+
55+
toDelete = self.getParameterValue(self.COLUMNS)
5756
fields = layer.fields()
58-
fields.remove(idx)
57+
idxs = []
58+
for f in toDelete:
59+
idx = layer.fieldNameIndex()
60+
fields.remove(idx)
61+
idxs.append[idx]
5962

6063
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
6164
layer.wkbType(), layer.crs())
@@ -67,7 +70,8 @@ def processAlgorithm(self, progress):
6770
for current, f in enumerate(features):
6871
feat.setGeometry(f.geometry())
6972
attributes = f.attributes()
70-
del attributes[idx]
73+
for idx in idxs:
74+
del attributes[idx]
7175
feat.setAttributes(attributes)
7276
writer.addFeature(feat)
7377

python/plugins/processing/algs/qgis/Dissolve.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
3838
from processing.core.parameters import ParameterVector
3939
from processing.core.parameters import ParameterBoolean
40-
from processing.core.parameters import ParameterTableMultipleField
40+
from processing.core.parameters import ParameterTableField
4141
from processing.core.outputs import OutputVector
4242
from processing.tools import vector, dataobjects
4343

@@ -62,8 +62,8 @@ def defineCharacteristics(self):
6262
[dataobjects.TYPE_VECTOR_POLYGON, dataobjects.TYPE_VECTOR_LINE]))
6363
self.addParameter(ParameterBoolean(Dissolve.DISSOLVE_ALL,
6464
self.tr('Dissolve all (do not use fields)'), True))
65-
self.addParameter(ParameterTableMultipleField(Dissolve.FIELD,
66-
self.tr('Unique ID fields'), Dissolve.INPUT, optional=True))
65+
self.addParameter(ParameterTableField(Dissolve.FIELD,
66+
self.tr('Unique ID fields'), Dissolve.INPUT, optional=True, multiple=True))
6767
self.addOutput(OutputVector(Dissolve.OUTPUT, self.tr('Dissolved')))
6868

6969
def processAlgorithm(self, progress):

python/plugins/processing/algs/r/RAlgorithm.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
from processing.core.parameters import ParameterBoolean
4747
from processing.core.parameters import ParameterSelection
4848
from processing.core.parameters import ParameterTableField
49-
from processing.core.parameters import ParameterTableMultipleField
5049
from processing.core.parameters import ParameterExtent
5150
from processing.core.parameters import ParameterCrs
5251
from processing.core.parameters import ParameterFile
@@ -328,8 +327,7 @@ def getImportCommands(self):
328327
commands.append(param.name + '= NULL')
329328
else:
330329
commands.append(param.name + ' = "' + param.value + '"')
331-
elif isinstance(param, (ParameterTableField, ParameterTableMultipleField, ParameterString,
332-
ParameterFile)):
330+
elif isinstance(param, (ParameterTableField, ParameterString, ParameterFile)):
333331
if param.value is None:
334332
commands.append(param.name + '= NULL')
335333
else:

python/plugins/processing/core/parameters.py

Lines changed: 17 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,8 @@ class Parameter:
106106
take as input.
107107
"""
108108

109-
default_metadata = {
110-
'widget_wrapper': 'processing.gui.wrappers.BasicWidgetWrapper'
111-
}
112-
109+
default_metadata = {}
110+
113111
def __init__(self, name='', description='', default=None, optional=False,
114112
metadata={}):
115113
self.name = name
@@ -809,8 +807,7 @@ def setValue(self, n):
809807
if isinstance(n, basestring):
810808
try:
811809
v = self._evaluate(n)
812-
float(v)
813-
self.value = n
810+
self.value = float(v)
814811
return True
815812
except:
816813
return False
@@ -846,8 +843,8 @@ def fromScriptCode(self, line):
846843
default = definition.strip()[len('number') + 1:] or None
847844
return ParameterNumber(name, descName, default=default, optional=isOptional)
848845

849-
def _evaluate(self, v):
850-
exp = QgsExpression(v)
846+
def _evaluate(self):
847+
exp = QgsExpression(self.value)
851848
if exp.hasParserError():
852849
raise ValueError(self.tr("Error in parameter expression: ") + exp.parserErrorString())
853850
result = exp.evaluate(_expressionContext())
@@ -856,8 +853,7 @@ def _evaluate(self, v):
856853
return result
857854

858855
def evaluate(self, alg):
859-
if isinstance(self.value, basestring):
860-
self.value = self._evaluate(self.value)
856+
self.value = self._evaluate(self.value)
861857

862858
def expressionContext(self):
863859
return _expressionContext()
@@ -866,17 +862,12 @@ def getValueAsCommandLineParameter(self):
866862
if self.value is None:
867863
return str(None)
868864
if isinstance(self.value, basestring):
869-
return '"%s"' % self.value
865+
return '"%s"' + self.value
870866
return str(self.value)
871867

872868

873869

874870
class ParameterRange(Parameter):
875-
876-
default_metadata = {
877-
'widget_wrapper': 'processing.gui.wrappers.BasicWidgetWrapper'
878-
}
879-
880871

881872
def __init__(self, name='', description='', default=None, optional=False):
882873
Parameter.__init__(self, name, description, default, optional)
@@ -1226,24 +1217,28 @@ class ParameterTableField(Parameter):
12261217
DATA_TYPE_ANY = -1
12271218

12281219
def __init__(self, name='', description='', parent=None, datatype=-1,
1229-
optional=False):
1220+
optional=False, multiple = False):
12301221
Parameter.__init__(self, name, description, None, optional)
12311222
self.parent = parent
1223+
self.multiple = True
12321224
self.datatype = int(datatype)
12331225

12341226
def getValueAsCommandLineParameter(self):
12351227
return '"' + str(self.value) + '"' if self.value is not None else str(None)
12361228

12371229
def setValue(self, value):
1238-
if value is None:
1230+
if not bool(value):
12391231
if not self.optional:
12401232
return False
12411233
self.value = None
12421234
return True
1243-
1244-
elif len(value) == 0 and not self.optional:
1245-
return False
1246-
self.value = str(value)
1235+
if isinstance(value, list):
1236+
if not self.multiple and len(value) > 1:
1237+
return False
1238+
self.value = ";".join(value)
1239+
return True
1240+
else:
1241+
self.value = str(value)
12471242
return True
12481243

12491244
def __str__(self):
@@ -1284,97 +1279,12 @@ def fromScriptCode(self, line):
12841279
return ParameterTableField(name, descName, parent, datatype, isOptional)
12851280

12861281

1287-
class ParameterTableMultipleField(Parameter):
1288-
1289-
"""A parameter representing several table fields.
1290-
Its value is a string with items separated by semicolons, each of
1291-
which represents the name of each field.
1292-
1293-
In a script you can use it with
1294-
##Fields=[optional] multiple field [number|string] Parentinput
1295-
1296-
In the batch runner simply use a string with items separated by
1297-
semicolons, each of which represents the name of each field.
1298-
1299-
see algs.qgis.DeleteColumn.py for an usage example
1300-
"""
1301-
1302-
DATA_TYPE_NUMBER = 0
1303-
DATA_TYPE_STRING = 1
1304-
DATA_TYPE_ANY = -1
1305-
1306-
def __init__(self, name='', description='', parent=None, datatype=-1,
1307-
optional=False):
1308-
Parameter.__init__(self, name, description, None, optional)
1309-
self.parent = parent
1310-
self.datatype = int(datatype)
1311-
1312-
def getValueAsCommandLineParameter(self):
1313-
return '"' + str(self.value) + '"' if self.value is not None else str(None)
1314-
1315-
def setValue(self, obj):
1316-
if obj is None:
1317-
if self.optional:
1318-
self.value = None
1319-
return True
1320-
return False
1321-
1322-
if isinstance(obj, list):
1323-
if len(obj) == 0:
1324-
if self.optional:
1325-
self.value = None
1326-
return True
1327-
return False
1328-
self.value = ";".join(obj)
1329-
return True
1330-
else:
1331-
self.value = str(obj)
1332-
return True
1333-
1334-
def __str__(self):
1335-
return self.name + ' <' + self.__module__.split('.')[-1] + ' from ' \
1336-
+ self.parent + '>'
1337-
1338-
def dataType(self):
1339-
if self.datatype == self.DATA_TYPE_NUMBER:
1340-
return 'numeric'
1341-
elif self.datatype == self.DATA_TYPE_STRING:
1342-
return 'string'
1343-
else:
1344-
return 'any'
1345-
1346-
def getAsScriptCode(self):
1347-
param_type = ''
1348-
if self.optional:
1349-
param_type += 'optional '
1350-
param_type += 'multiple field '
1351-
return '##' + self.name + '=' + param_type + self.parent
1352-
1353-
@classmethod
1354-
def fromScriptCode(self, line):
1355-
isOptional, name, definition = _splitParameterOptions(line)
1356-
if definition.lower().strip().startswith('multiple field'):
1357-
descName = _createDescriptiveName(name)
1358-
if definition.lower().strip().startswith('multiple field number'):
1359-
field = definition.strip()[len('multiple field number') + 1:]
1360-
datatype = ParameterTableMultipleField.DATA_TYPE_NUMBER
1361-
elif definition.lower().strip().startswith('multiple field string'):
1362-
field = definition.strip()[len('multiple field string') + 1:]
1363-
datatype = ParameterTableMultipleField.DATA_TYPE_STRING
1364-
else:
1365-
field = definition.strip()[len('multiple field') + 1:]
1366-
datatype = ParameterTableMultipleField.DATA_TYPE_ANY
1367-
1368-
return ParameterTableMultipleField(name, descName, field, datatype, isOptional)
1369-
1370-
13711282
class ParameterVector(ParameterDataObject):
13721283

13731284
default_metadata = {
13741285
'widget_wrapper': 'processing.gui.wrappers.VectorWidgetWrapper'
13751286
}
13761287

1377-
13781288
def __init__(self, name='', description='', datatype=[-1],
13791289
optional=False):
13801290
ParameterDataObject.__init__(self, name, description, None, optional)
@@ -1468,10 +1378,6 @@ def fromScriptCode(self, line):
14681378

14691379
class ParameterGeometryPredicate(Parameter):
14701380

1471-
default_metadata = {
1472-
'widget_wrapper': 'processing.gui.wrappers.BasicWidgetWrapper'
1473-
}
1474-
14751381
predicates = ('intersects',
14761382
'contains',
14771383
'disjoint',

python/plugins/processing/gui/AlgorithmDialog.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
from processing.core.parameters import ParameterFixedTable
5151
from processing.core.parameters import ParameterRange
5252
from processing.core.parameters import ParameterTableField
53-
from processing.core.parameters import ParameterTableMultipleField
5453
from processing.core.parameters import ParameterMultipleInput
5554
from processing.core.parameters import ParameterString
5655
from processing.core.parameters import ParameterNumber

python/plugins/processing/gui/ParametersPanel.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,7 @@
4242
from qgis.PyQt.QtGui import QIcon
4343

4444
from processing.gui.OutputSelectionPanel import OutputSelectionPanel
45-
from processing.gui.PointSelectionPanel import PointSelectionPanel
46-
from processing.gui.GeometryPredicateSelectionPanel import \
47-
GeometryPredicateSelectionPanel
48-
from processing.gui.ListMultiselectWidget import ListMultiSelectWidget
49-
from processing.core.parameters import ParameterRaster
50-
from processing.core.parameters import ParameterVector
51-
from processing.core.parameters import ParameterTable
52-
from processing.core.parameters import ParameterTableField
53-
from processing.core.parameters import ParameterTableMultipleField
54-
from processing.core.parameters import ParameterSelection
55-
from processing.core.parameters import ParameterFixedTable
56-
from processing.core.parameters import ParameterRange
57-
from processing.core.parameters import ParameterMultipleInput
58-
from processing.core.parameters import ParameterNumber
59-
from processing.core.parameters import ParameterExtent
60-
from processing.core.parameters import ParameterFile
61-
from processing.core.parameters import ParameterCrs
62-
from processing.core.parameters import ParameterString
63-
from processing.core.parameters import ParameterPoint
64-
from processing.core.parameters import ParameterGeometryPredicate
65-
45+
from processing.core.parameters import ParameterVector, ParameterExtent, ParameterPoint
6646
from processing.core.outputs import OutputRaster
6747
from processing.core.outputs import OutputTable
6848
from processing.core.outputs import OutputVector

0 commit comments

Comments
 (0)