Skip to content

Commit f0f0411

Browse files
committed
Port addautoincrementalfield to new API
1 parent dfb687b commit f0f0411

File tree

3 files changed

+47
-38
lines changed

3 files changed

+47
-38
lines changed

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

+33-25
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,27 @@
2929
from qgis.core import (QgsField,
3030
QgsFeature,
3131
QgsApplication,
32-
QgsProcessingUtils)
32+
QgsProcessingUtils,
33+
QgsProcessingParameterFeatureSource,
34+
QgsProcessingParameterFeatureSink,
35+
QgsProcessingOutputVectorLayer)
3336
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
34-
from processing.core.parameters import ParameterVector
35-
from processing.core.outputs import OutputVector
3637

3738

3839
class AutoincrementalField(QgisAlgorithm):
3940

4041
INPUT = 'INPUT'
4142
OUTPUT = 'OUTPUT'
4243

44+
def __init__(self):
45+
super().__init__()
46+
47+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
48+
self.tr('Input layer')))
49+
50+
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Incremented')))
51+
self.addOutput(QgsProcessingOutputVectorLayer(self.OUTPUT, self.tr('Incremented')))
52+
4353
def icon(self):
4454
return QgsApplication.getThemeIcon("/providerQgis.svg")
4555

@@ -49,34 +59,32 @@ def svgIconPath(self):
4959
def group(self):
5060
return self.tr('Vector table tools')
5161

52-
def __init__(self):
53-
super().__init__()
54-
self.addParameter(ParameterVector(self.INPUT,
55-
self.tr('Input layer')))
56-
self.addOutput(OutputVector(self.OUTPUT, self.tr('Incremented')))
57-
5862
def name(self):
5963
return 'addautoincrementalfield'
6064

6165
def displayName(self):
6266
return self.tr('Add autoincremental field')
6367

6468
def processAlgorithm(self, parameters, context, feedback):
65-
output = self.getOutputFromName(self.OUTPUT)
66-
vlayer = \
67-
QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT), context)
68-
fields = vlayer.fields()
69+
source = self.parameterAsSource(parameters, self.INPUT, context)
70+
fields = source.fields()
6971
fields.append(QgsField('AUTO', QVariant.Int))
70-
writer = output.getVectorWriter(fields, vlayer.wkbType(), vlayer.crs(), context)
71-
outFeat = QgsFeature()
72-
features = QgsProcessingUtils.getFeatures(vlayer, context)
73-
total = 100.0 / QgsProcessingUtils.featureCount(vlayer, context)
74-
for current, feat in enumerate(features):
72+
73+
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
74+
fields, source.wkbType(), source.sourceCrs())
75+
76+
features = source.getFeatures()
77+
total = 100.0 / source.featureCount()
78+
for current, input_feature in enumerate(features):
79+
if feedback.isCanceled():
80+
break
81+
82+
output_feature = input_feature
83+
attributes = input_feature.attributes()
84+
attributes.append(current)
85+
output_feature.setAttributes(attributes)
86+
87+
sink.addFeature(output_feature)
7588
feedback.setProgress(int(current * total))
76-
geom = feat.geometry()
77-
outFeat.setGeometry(geom)
78-
attrs = feat.attributes()
79-
attrs.append(current)
80-
outFeat.setAttributes(attrs)
81-
writer.addFeature(outFeat)
82-
del writer
89+
90+
return {self.OUTPUT: dest_id}

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
# from .FieldsCalculator import FieldsCalculator
109109
# from .SaveSelectedFeatures import SaveSelectedFeatures
110110
# from .Explode import Explode
111-
# from .AutoincrementalField import AutoincrementalField
111+
from .AutoincrementalField import AutoincrementalField
112112
# from .FieldPyculator import FieldsPyculator
113113
# from .JoinAttributes import JoinAttributes
114114
# from .CreateConstantRaster import CreateConstantRaster
@@ -222,7 +222,7 @@ def getAlgs(self):
222222
# HubDistanceLines(), HubLines(), Merge(),
223223
# GeometryConvert(), FieldsCalculator(),
224224
# SaveSelectedFeatures(), JoinAttributes(),
225-
# AutoincrementalField(), Explode(), FieldsPyculator(),
225+
# Explode(), FieldsPyculator(),
226226
# EquivalentNumField(), PointsLayerFromTable(),
227227
# StatisticsByCategories(), ConcaveHull(),
228228
# RasterLayerStatistics(), PointsDisplacement(),
@@ -261,6 +261,7 @@ def getAlgs(self):
261261
# ]
262262
algs = [AddTableField(),
263263
Aspect(),
264+
AutoincrementalField(),
264265
Boundary(),
265266
BoundingBox()]
266267

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -242,17 +242,17 @@ tests:
242242
# geometry:
243243
# precision: 7
244244
#
245-
# - algorithm: qgis:addautoincrementalfield
246-
# name: Add autoincremental field
247-
# params:
248-
# INPUT:
249-
# name: points.gml
250-
# type: vector
251-
# results:
252-
# OUTPUT:
253-
# name: expected/autoincrement_field.gml
254-
# type: vector
255-
#
245+
- algorithm: qgis:addautoincrementalfield
246+
name: Add autoincremental field
247+
params:
248+
INPUT:
249+
name: points.gml
250+
type: vector
251+
results:
252+
OUTPUT:
253+
name: expected/autoincrement_field.gml
254+
type: vector
255+
256256
# - algorithm: qgis:dissolve
257257
# name: Dissolve using field
258258
# params:

0 commit comments

Comments
 (0)