Skip to content

Commit 62ad6e3

Browse files
committedMar 29, 2021
Add QgsVectorFileWriter::writeAsVectorFormatV3
Unfortunately QgsVectorFileWriter::writeAsVectorFormatV2 is missing SIP_OUT arguments necessary to get the desired output arguments, and it's not possible to add these now without breaking existing PyQGIS code. Solution = v3!
1 parent bb7b009 commit 62ad6e3

File tree

9 files changed

+74
-19
lines changed

9 files changed

+74
-19
lines changed
 

‎python/core/auto_generated/qgsvectorfilewriter.sip.in

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,31 @@ Writes a layer out to a vector file.
475475
:return: - Error message code, or QgsVectorFileWriter.NoError if the write operation was successful
476476
- errorMessage: will be set to the error message text, if an error occurs while writing the layer
477477

478-
.. versionadded:: 3.10.3
478+
.. deprecated:: QGIS 3.20
479+
use writeAsVectorFormatV3 instead
480+
%End
481+
482+
static QgsVectorFileWriter::WriterError writeAsVectorFormatV3( QgsVectorLayer *layer,
483+
const QString &fileName,
484+
const QgsCoordinateTransformContext &transformContext,
485+
const QgsVectorFileWriter::SaveVectorOptions &options,
486+
QString *errorMessage /Out/ = 0,
487+
QString *newFilename /Out/ = 0,
488+
QString *newLayer /Out/ = 0 );
489+
%Docstring
490+
Writes a layer out to a vector file.
491+
492+
:param layer: source layer to write
493+
:param fileName: file name to write to
494+
:param transformContext: coordinate transform context
495+
:param options: save options
496+
:param newFilename: potentially modified file name (output parameter)
497+
:param errorMessage: will be set to the error message text, if an error occurs while writing the layer
498+
499+
:return: - Error message code, or QgsVectorFileWriter.NoError if the write operation was successful
500+
- newLayer: potentially modified layer name (output parameter)
501+
502+
.. versionadded:: 3.20
479503
%End
480504

481505
struct FilterFormatDetails

‎src/analysis/processing/qgsalgorithmexporttospreadsheet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ bool QgsExportToSpreadsheetAlgorithm::exportVectorLayer( QgsVectorLayer *layer,
261261
QString error;
262262
QString newFilename;
263263
QString newLayer;
264-
if ( QgsVectorFileWriter::writeAsVectorFormatV2( layer, path, context.transformContext(), options, &newFilename, &newLayer, &error ) != QgsVectorFileWriter::NoError )
264+
if ( QgsVectorFileWriter::writeAsVectorFormatV3( layer, path, context.transformContext(), options, &error, &newFilename, &newLayer ) != QgsVectorFileWriter::NoError )
265265
{
266266
feedback->reportError( QObject::tr( "Exporting layer failed: %1" ).arg( error ) );
267267
return false;

‎src/analysis/processing/qgsalgorithmpackage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ bool QgsPackageAlgorithm::packageVectorLayer( QgsVectorLayer *layer, const QStri
240240
QString error;
241241
QString newFilename;
242242
QString newLayer;
243-
if ( QgsVectorFileWriter::writeAsVectorFormatV2( layer, path, context.transformContext(), options, &newFilename, &newLayer, &error ) != QgsVectorFileWriter::NoError )
243+
if ( QgsVectorFileWriter::writeAsVectorFormatV3( layer, path, context.transformContext(), options, &error, &newFilename, &newLayer ) != QgsVectorFileWriter::NoError )
244244
{
245245
feedback->reportError( QObject::tr( "Packaging layer failed: %1" ).arg( error ) );
246246
return false;

‎src/core/qgsvectorfilewriter.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2755,7 +2755,7 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer *layer,
27552755
options.includeZ = includeZ;
27562756
options.attributes = attributes;
27572757
options.fieldValueConverter = fieldValueConverter;
2758-
return writeAsVectorFormatV2( layer, fileName, layer->transformContext(), options, newFilename, newLayer, errorMessage );
2758+
return writeAsVectorFormatV3( layer, fileName, layer->transformContext(), options, errorMessage, newFilename, newLayer );
27592759
}
27602760

27612761
QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer *layer,
@@ -2796,7 +2796,7 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVe
27962796
options.includeZ = includeZ;
27972797
options.attributes = attributes;
27982798
options.fieldValueConverter = fieldValueConverter;
2799-
return writeAsVectorFormatV2( layer, fileName, layer->transformContext(), options, newFilename, newLayer, errorMessage );
2799+
return writeAsVectorFormatV3( layer, fileName, layer->transformContext(), options, errorMessage, newFilename, newLayer );
28002800
}
28012801

28022802

@@ -3179,6 +3179,16 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormatV2( Qgs
31793179
QString *newFilename,
31803180
QString *newLayer,
31813181
QString *errorMessage )
3182+
{
3183+
QgsVectorFileWriter::PreparedWriterDetails details;
3184+
WriterError err = prepareWriteAsVectorFormat( layer, options, details );
3185+
if ( err != NoError )
3186+
return err;
3187+
3188+
return writeAsVectorFormatV2( details, fileName, transformContext, options, errorMessage, newFilename, newLayer );
3189+
}
3190+
3191+
QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormatV3( QgsVectorLayer *layer, const QString &fileName, const QgsCoordinateTransformContext &transformContext, const QgsVectorFileWriter::SaveVectorOptions &options, QString *errorMessage, QString *newFilename, QString *newLayer )
31823192
{
31833193
QgsVectorFileWriter::PreparedWriterDetails details;
31843194
WriterError err = prepareWriteAsVectorFormat( layer, options, details );

‎src/core/qgsvectorfilewriter.h

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,15 +671,35 @@ class CORE_EXPORT QgsVectorFileWriter : public QgsFeatureSink
671671
* \param newLayer potentially modified layer name (output parameter)
672672
* \param errorMessage will be set to the error message text, if an error occurs while writing the layer
673673
* \returns Error message code, or QgsVectorFileWriter.NoError if the write operation was successful
674-
* \since QGIS 3.10.3
674+
* \deprecated since QGIS 3.20, use writeAsVectorFormatV3 instead
675675
*/
676-
static QgsVectorFileWriter::WriterError writeAsVectorFormatV2( QgsVectorLayer *layer,
676+
Q_DECL_DEPRECATED static QgsVectorFileWriter::WriterError writeAsVectorFormatV2( QgsVectorLayer *layer,
677677
const QString &fileName,
678678
const QgsCoordinateTransformContext &transformContext,
679679
const QgsVectorFileWriter::SaveVectorOptions &options,
680680
QString *newFilename = nullptr,
681681
QString *newLayer = nullptr,
682-
QString *errorMessage SIP_OUT = nullptr );
682+
QString *errorMessage SIP_OUT = nullptr ) SIP_DEPRECATED;
683+
684+
/**
685+
* Writes a layer out to a vector file.
686+
* \param layer source layer to write
687+
* \param fileName file name to write to
688+
* \param transformContext coordinate transform context
689+
* \param options save options
690+
* \param newFilename potentially modified file name (output parameter)
691+
* \param newLayer potentially modified layer name (output parameter)
692+
* \param errorMessage will be set to the error message text, if an error occurs while writing the layer
693+
* \returns Error message code, or QgsVectorFileWriter.NoError if the write operation was successful
694+
* \since QGIS 3.20
695+
*/
696+
static QgsVectorFileWriter::WriterError writeAsVectorFormatV3( QgsVectorLayer *layer,
697+
const QString &fileName,
698+
const QgsCoordinateTransformContext &transformContext,
699+
const QgsVectorFileWriter::SaveVectorOptions &options,
700+
QString *errorMessage SIP_OUT = nullptr,
701+
QString *newFilename SIP_OUT = nullptr,
702+
QString *newLayer SIP_OUT = nullptr );
683703

684704
/**
685705
* Details of available filters and formats.

‎src/plugins/geometry_checker/qgsgeometrycheckersetuptab.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ void QgsGeometryCheckerSetupTab::runChecks()
342342
saveOptions.fileEncoding = layer->dataProvider()->encoding();
343343
saveOptions.driverName = outputDriverName;
344344
saveOptions.onlySelectedFeatures = selectedOnly;
345-
QgsVectorFileWriter::WriterError err = QgsVectorFileWriter::writeAsVectorFormatV2( layer, outputPath, layer->transformContext(), saveOptions, nullptr, nullptr, &errMsg );
345+
QgsVectorFileWriter::WriterError err = QgsVectorFileWriter::writeAsVectorFormatV3( layer, outputPath, layer->transformContext(), saveOptions, &errMsg, nullptr, nullptr );
346346
if ( err != QgsVectorFileWriter::NoError )
347347
{
348348
createErrors.append( errMsg );

‎tests/src/app/testqgsattributetable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ void TestQgsAttributeTable::testRegression15974()
378378
QgsVectorFileWriter::SaveVectorOptions saveOptions;
379379
saveOptions.fileEncoding = QStringLiteral( "system" );
380380
saveOptions.driverName = QStringLiteral( "ESRI Shapefile" );
381-
QgsVectorFileWriter::writeAsVectorFormatV2( tempLayer.get(), path, tempLayer->transformContext(), saveOptions );
381+
QgsVectorFileWriter::writeAsVectorFormatV3( tempLayer.get(), path, tempLayer->transformContext(), saveOptions );
382382
std::unique_ptr< QgsVectorLayer> shpLayer( new QgsVectorLayer( path, QStringLiteral( "test" ), QStringLiteral( "ogr" ) ) );
383383
QgsFeature f1( shpLayer->dataProvider()->fields(), 1 );
384384
QgsGeometry geom;

‎tests/src/core/testqgsvectorfilewriter.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -487,11 +487,11 @@ void TestQgsVectorFileWriter::prepareWriteAsVectorFormat()
487487
options.driverName = "GPKG";
488488
options.layerName = "test";
489489
QString newFilename;
490-
QgsVectorFileWriter::WriterError error( QgsVectorFileWriter::writeAsVectorFormatV2(
490+
QgsVectorFileWriter::WriterError error( QgsVectorFileWriter::writeAsVectorFormatV3(
491491
&ml,
492492
fileName,
493493
ml.transformContext(),
494-
options,
494+
options, nullptr,
495495
&newFilename ) );
496496

497497
QCOMPARE( error, QgsVectorFileWriter::WriterError::NoError );
@@ -519,11 +519,11 @@ void TestQgsVectorFileWriter::testTextFieldLength()
519519
options.driverName = "GPKG";
520520
options.layerName = "test";
521521
QString newFilename;
522-
QgsVectorFileWriter::WriterError error( QgsVectorFileWriter::writeAsVectorFormatV2(
522+
QgsVectorFileWriter::WriterError error( QgsVectorFileWriter::writeAsVectorFormatV3(
523523
&vl,
524524
fileName,
525525
vl.transformContext(),
526-
options,
526+
options, nullptr,
527527
&newFilename ) );
528528
QCOMPARE( error, QgsVectorFileWriter::WriterError::NoError );
529529
QCOMPARE( newFilename, fileName );
@@ -572,11 +572,11 @@ void TestQgsVectorFileWriter::_testExportToGpx( const QString &geomTypeName,
572572
options.layerName = inputLayerName;
573573
options.layerOptions = layerOptions;
574574
QString outLayerName;
575-
QgsVectorFileWriter::WriterError error( QgsVectorFileWriter::writeAsVectorFormatV2(
575+
QgsVectorFileWriter::WriterError error( QgsVectorFileWriter::writeAsVectorFormatV3(
576576
&vl,
577577
fileName,
578578
vl.transformContext(),
579-
options,
579+
options, nullptr,
580580
nullptr, // newFilename
581581
&outLayerName ) );
582582
QCOMPARE( error, QgsVectorFileWriter::WriterError::NoError );

‎tests/src/gui/testqgsrasterlayersaveasdialog.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,15 @@ QString TestQgsRasterLayerSaveAsDialog::prepareDb()
132132
options.driverName = QStringLiteral( "GPKG" );
133133
options.layerName = QStringLiteral( "test_vector_layer" );
134134
QString errorMessage;
135-
QgsVectorFileWriter::writeAsVectorFormatV2(
135+
QgsVectorFileWriter::writeAsVectorFormatV3(
136136
&vl,
137137
fileName,
138138
vl.transformContext(),
139139
options,
140+
&errorMessage,
140141
nullptr,
141-
nullptr,
142-
&errorMessage );
142+
nullptr
143+
);
143144
QgsVectorLayer vl2( QStringLiteral( "%1|layername=test_vector_layer" ).arg( fileName ), "test_vector_layer", "ogr" );
144145
Q_ASSERT( vl2.isValid() );
145146
return tmpFile.fileName( );

0 commit comments

Comments
 (0)
Please sign in to comment.