@@ -250,15 +250,34 @@ class OutputVector(Output):
250
250
encoding = None
251
251
compatible = None
252
252
253
- def getFileFilter (self , alg ):
253
+ def __init__ (self , name = '' , description = '' , hidden = False , base_input = None ):
254
+ Output .__init__ (self , name , description , hidden )
255
+ self .base_input = base_input
256
+ self .base_layer = None
257
+
258
+ def hasGeometry (self ):
259
+ if self .base_layer is None :
260
+ return True
261
+ return dataobjects .canUseVectorLayer (self .base_layer , [- 1 ])
262
+
263
+ def getSupportedOutputVectorLayerExtensions (self ):
254
264
exts = dataobjects .getSupportedOutputVectorLayerExtensions ()
265
+ if not self .hasGeometry ():
266
+ exts = ['dbf' ] + [ext for ext in exts if ext in VectorWriter .nogeometry_extensions ]
267
+ return exts
268
+
269
+ def getFileFilter (self , alg ):
270
+ exts = self .getSupportedOutputVectorLayerExtensions ()
255
271
for i in range (len (exts )):
256
272
exts [i ] = self .tr ('%s files (*.%s)' , 'OutputVector' ) % (exts [i ].upper (), exts [i ].lower ())
257
273
return ';;' .join (exts )
258
274
259
275
def getDefaultFileExtension (self , alg ):
260
- supported = alg .provider .getSupportedOutputVectorLayerExtensions ()
261
- default = ProcessingConfig .getSetting (ProcessingConfig .DEFAULT_OUTPUT_VECTOR_LAYER_EXT )
276
+ supported = self .getSupportedOutputVectorLayerExtensions ()
277
+ if self .hasGeometry ():
278
+ default = ProcessingConfig .getSetting (ProcessingConfig .DEFAULT_OUTPUT_VECTOR_LAYER_EXT )
279
+ else :
280
+ default = 'dbf'
262
281
ext = default if default in supported else supported [0 ]
263
282
return ext
264
283
@@ -271,9 +290,8 @@ def getCompatibleFileName(self, alg):
271
290
temporary file with a supported file format, to be used to
272
291
generate the output result.
273
292
"""
274
-
275
293
ext = self .value [self .value .rfind ('.' ) + 1 :]
276
- if ext in alg . provider .getSupportedOutputVectorLayerExtensions ():
294
+ if ext in self .getSupportedOutputVectorLayerExtensions ():
277
295
return self .value
278
296
else :
279
297
if self .compatible is None :
@@ -307,4 +325,5 @@ def getVectorWriter(self, fields, geomType, crs, options=None):
307
325
w = VectorWriter (self .value , self .encoding , fields , geomType ,
308
326
crs , options )
309
327
self .layer = w .layer
328
+ self .value = w .destination
310
329
return w
0 commit comments