Skip to content

Commit 1d2e54d

Browse files
committedJun 6, 2017
Port delete columns alg to new API
1 parent f1511a2 commit 1d2e54d

File tree

3 files changed

+54
-44
lines changed

3 files changed

+54
-44
lines changed
 

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

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@
2626
__revision__ = '$Format:%H$'
2727

2828
from qgis.core import (QgsApplication,
29-
QgsProcessingUtils)
29+
QgsProcessingUtils,
30+
QgsProcessingParameterFeatureSource,
31+
QgsProcessingParameterFeatureSink,
32+
QgsProcessingParameterTableField,
33+
QgsProcessingOutputVectorLayer)
3034
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
31-
from processing.core.parameters import ParameterVector
32-
from processing.core.parameters import ParameterTableField
33-
from processing.core.outputs import OutputVector
3435

3536

3637
class DeleteColumn(QgisAlgorithm):
@@ -53,11 +54,14 @@ def group(self):
5354

5455
def __init__(self):
5556
super().__init__()
56-
self.addParameter(ParameterVector(self.INPUT,
57-
self.tr('Input layer')))
58-
self.addParameter(ParameterTableField(self.COLUMNS,
59-
self.tr('Fields to delete'), self.INPUT, multiple=True))
60-
self.addOutput(OutputVector(self.OUTPUT, self.tr('Output layer')))
57+
58+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT, self.tr('Input layer')))
59+
self.addParameter(QgsProcessingParameterTableField(self.COLUMNS,
60+
self.tr('Fields to delete'),
61+
None, self.INPUT, QgsProcessingParameterTableField.Any, True))
62+
63+
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Output layer')))
64+
self.addOutput(QgsProcessingOutputVectorLayer(self.OUTPUT, self.tr("Output layer")))
6165

6266
def name(self):
6367
return 'deletecolumn'
@@ -66,10 +70,10 @@ def displayName(self):
6670
return self.tr('Delete column')
6771

6872
def processAlgorithm(self, parameters, context, feedback):
69-
layer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT), context)
73+
source = self.parameterAsSource(parameters, self.INPUT, context)
74+
fields_to_delete = self.parameterAsFields(parameters, self.COLUMNS, context)
7075

71-
fields_to_delete = self.getParameterValue(self.COLUMNS).split(';')
72-
fields = layer.fields()
76+
fields = source.fields()
7377
field_indices = []
7478
# loop through twice - first we need to build up a list of original attribute indices
7579
for f in fields_to_delete:
@@ -83,18 +87,22 @@ def processAlgorithm(self, parameters, context, feedback):
8387
for index in field_indices:
8488
fields.remove(index)
8589

86-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, layer.wkbType(), layer.crs(), context)
90+
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
91+
fields, source.wkbType(), source.sourceCrs())
8792

88-
features = QgsProcessingUtils.getFeatures(layer, context)
89-
total = 100.0 / QgsProcessingUtils.featureCount(layer, context)
93+
features = source.getFeatures()
94+
total = 100.0 / source.featureCount()
9095

9196
for current, f in enumerate(features):
97+
if feedback.isCanceled():
98+
break
99+
92100
attributes = f.attributes()
93101
for index in field_indices:
94102
del attributes[index]
95103
f.setAttributes(attributes)
96-
writer.addFeature(f)
104+
sink.addFeature(f)
97105

98106
feedback.setProgress(int(current * total))
99107

100-
del writer
108+
return {self.OUTPUT: dest_id}

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
# from .Union import Union
8787
# from .DensifyGeometriesInterval import DensifyGeometriesInterval
8888
# from .SpatialJoin import SpatialJoin
89-
# from .DeleteColumn import DeleteColumn
89+
from .DeleteColumn import DeleteColumn
9090
# from .DeleteHoles import DeleteHoles
9191
# from .DeleteDuplicateGeometries import DeleteDuplicateGeometries
9292
# from .TextToFloat import TextToFloat
@@ -216,7 +216,7 @@ def getAlgs(self):
216216
# RandomExtractWithinSubsets(), ExtractByLocation(),
217217
# SpatialJoin(), RegularPoints(), SymmetricalDifference(),
218218
# VectorSplit(), VectorGridLines(), VectorGridPolygons(),
219-
# DeleteColumn(), DeleteDuplicateGeometries(), TextToFloat(),
219+
# DeleteDuplicateGeometries(), TextToFloat(),
220220
# ExtractByAttribute(), SelectByAttribute(), GridPolygon(),
221221
# GridLine(), Gridify(), HubDistancePoints(),
222222
# HubDistanceLines(), HubLines(), Merge(),
@@ -264,7 +264,9 @@ def getAlgs(self):
264264
AutoincrementalField(),
265265
Boundary(),
266266
BoundingBox(),
267-
Clip()]
267+
Clip(),
268+
DeleteColumn()
269+
]
268270

269271
if hasPlotly:
270272
# from .VectorLayerHistogram import VectorLayerHistogram

‎python/plugins/processing/tests/testdata/qgis_algorithm_tests.yaml

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,30 +1577,30 @@ tests:
15771577
# type: vector
15781578
# results: {}
15791579
#
1580-
# - algorithm: qgis:deletecolumn
1581-
# name: Delete columns (multiple)
1582-
# params:
1583-
# COLUMN: floatval;name
1584-
# INPUT:
1585-
# name: polys.gml
1586-
# type: vector
1587-
# results:
1588-
# OUTPUT:
1589-
# name: expected/delete_columns.gml
1590-
# type: vector
1591-
#
1592-
# - algorithm: qgis:deletecolumn
1593-
# name: Delete columns (single)
1594-
# params:
1595-
# COLUMN: intval
1596-
# INPUT:
1597-
# name: polys.gml
1598-
# type: vector
1599-
# results:
1600-
# OUTPUT:
1601-
# name: expected/delete_column.gml
1602-
# type: vector
1603-
#
1580+
- algorithm: qgis:deletecolumn
1581+
name: Delete columns (multiple)
1582+
params:
1583+
COLUMN: floatval;name
1584+
INPUT:
1585+
name: polys.gml
1586+
type: vector
1587+
results:
1588+
OUTPUT:
1589+
name: expected/delete_columns.gml
1590+
type: vector
1591+
1592+
- algorithm: qgis:deletecolumn
1593+
name: Delete columns (single)
1594+
params:
1595+
COLUMN: intval
1596+
INPUT:
1597+
name: polys.gml
1598+
type: vector
1599+
results:
1600+
OUTPUT:
1601+
name: expected/delete_column.gml
1602+
type: vector
1603+
16041604
# - algorithm: qgis:createpointslayerfromtable
16051605
# name: Create points from table
16061606
# params:

0 commit comments

Comments
 (0)
Please sign in to comment.