26
26
__revision__ = '$Format:%H$'
27
27
28
28
from qgis .core import (QgsApplication ,
29
- QgsProcessingUtils )
29
+ QgsProcessingUtils ,
30
+ QgsProcessingParameterFeatureSource ,
31
+ QgsProcessingParameterFeatureSink ,
32
+ QgsProcessingParameterTableField ,
33
+ QgsProcessingOutputVectorLayer )
30
34
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
34
35
35
36
36
37
class DeleteColumn (QgisAlgorithm ):
@@ -53,11 +54,14 @@ def group(self):
53
54
54
55
def __init__ (self ):
55
56
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" )))
61
65
62
66
def name (self ):
63
67
return 'deletecolumn'
@@ -66,10 +70,10 @@ def displayName(self):
66
70
return self .tr ('Delete column' )
67
71
68
72
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 )
70
75
71
- fields_to_delete = self .getParameterValue (self .COLUMNS ).split (';' )
72
- fields = layer .fields ()
76
+ fields = source .fields ()
73
77
field_indices = []
74
78
# loop through twice - first we need to build up a list of original attribute indices
75
79
for f in fields_to_delete :
@@ -83,18 +87,22 @@ def processAlgorithm(self, parameters, context, feedback):
83
87
for index in field_indices :
84
88
fields .remove (index )
85
89
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 ())
87
92
88
- features = QgsProcessingUtils .getFeatures (layer , context )
89
- total = 100.0 / QgsProcessingUtils .featureCount (layer , context )
93
+ features = source .getFeatures ()
94
+ total = 100.0 / source .featureCount ()
90
95
91
96
for current , f in enumerate (features ):
97
+ if feedback .isCanceled ():
98
+ break
99
+
92
100
attributes = f .attributes ()
93
101
for index in field_indices :
94
102
del attributes [index ]
95
103
f .setAttributes (attributes )
96
- writer .addFeature (f )
104
+ sink .addFeature (f )
97
105
98
106
feedback .setProgress (int (current * total ))
99
107
100
- del writer
108
+ return { self . OUTPUT : dest_id }
0 commit comments