2626__revision__ = '$Format:%H$'
2727
2828from qgis .core import (QgsApplication ,
29- QgsProcessingUtils )
29+ QgsProcessingUtils ,
30+ QgsProcessingParameterFeatureSource ,
31+ QgsProcessingParameterFeatureSink ,
32+ QgsProcessingParameterTableField ,
33+ QgsProcessingOutputVectorLayer )
3034from 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
3637class 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 }
0 commit comments