Skip to content

Commit eba7e7b

Browse files
committed
Fix QgsRasterFileWriter::driverForExtension and extensionsForFormat
were skipping non-creatable datasets And indicate in the docs that read-only datasets are also considered
1 parent f37c2bf commit eba7e7b

File tree

4 files changed

+19
-2
lines changed

4 files changed

+19
-2
lines changed

python/core/raster/qgsrasterfilewriter.sip.in

+6
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ Returns the GDAL driver name for a specified file ``extension``. E.g. the
175175
driver name for the ".tif" extension is "GTiff".
176176
If no suitable drivers are found then an empty string is returned.
177177

178+
Note that this method works for all GDAL drivers, including those without create support
179+
(and which are not supported by QgsRasterFileWriter).
180+
178181
.. versionadded:: 3.0
179182
%End
180183

@@ -185,6 +188,9 @@ E.g. returns "tif", "tiff" for the format "GTiff".
185188

186189
If no matching format driver is found an empty list will be returned.
187190

191+
Note that this method works for all GDAL drivers, including those without create support
192+
(and which are not supported by QgsRasterFileWriter).
193+
188194
.. versionadded:: 3.0
189195
%End
190196

src/core/raster/qgsrasterfilewriter.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@ QString QgsRasterFileWriter::driverForExtension( const QString &extension )
996996
if ( drv )
997997
{
998998
char **driverMetadata = GDALGetMetadata( drv, nullptr );
999-
if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_CREATE, false ) && CSLFetchBoolean( driverMetadata, GDAL_DCAP_RASTER, false ) )
999+
if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_RASTER, false ) )
10001000
{
10011001
QString drvName = GDALGetDriverShortName( drv );
10021002
QStringList driverExtensions = QString( GDALGetMetadataItem( drv, GDAL_DMD_EXTENSIONS, nullptr ) ).split( ' ' );
@@ -1018,7 +1018,7 @@ QStringList QgsRasterFileWriter::extensionsForFormat( const QString &format )
10181018
if ( drv )
10191019
{
10201020
char **driverMetadata = GDALGetMetadata( drv, nullptr );
1021-
if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_CREATE, false ) && CSLFetchBoolean( driverMetadata, GDAL_DCAP_RASTER, false ) )
1021+
if ( CSLFetchBoolean( driverMetadata, GDAL_DCAP_RASTER, false ) )
10221022
{
10231023
return QString( GDALGetMetadataItem( drv, GDAL_DMD_EXTENSIONS, nullptr ) ).split( ' ' );
10241024
}

src/core/raster/qgsrasterfilewriter.h

+7
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ class CORE_EXPORT QgsRasterFileWriter
186186
* Returns the GDAL driver name for a specified file \a extension. E.g. the
187187
* driver name for the ".tif" extension is "GTiff".
188188
* If no suitable drivers are found then an empty string is returned.
189+
*
190+
* Note that this method works for all GDAL drivers, including those without create support
191+
* (and which are not supported by QgsRasterFileWriter).
192+
*
189193
* \since QGIS 3.0
190194
*/
191195
static QString driverForExtension( const QString &extension );
@@ -196,6 +200,9 @@ class CORE_EXPORT QgsRasterFileWriter
196200
*
197201
* If no matching format driver is found an empty list will be returned.
198202
*
203+
* Note that this method works for all GDAL drivers, including those without create support
204+
* (and which are not supported by QgsRasterFileWriter).
205+
*
199206
* \since QGIS 3.0
200207
*/
201208
static QStringList extensionsForFormat( const QString &format );

tests/src/python/test_qgsrasterfilewriter.py

+4
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,17 @@ def testDriverForExtension(self):
106106
self.assertEqual(QgsRasterFileWriter.driverForExtension('.tif'), 'GTiff')
107107
self.assertEqual(QgsRasterFileWriter.driverForExtension('img'), 'HFA')
108108
self.assertEqual(QgsRasterFileWriter.driverForExtension('.vrt'), 'VRT')
109+
self.assertEqual(QgsRasterFileWriter.driverForExtension('.jpg'), 'JPEG')
110+
self.assertEqual(QgsRasterFileWriter.driverForExtension('asc'), 'AAIGrid')
109111
self.assertEqual(QgsRasterFileWriter.driverForExtension('not a format'), '')
110112
self.assertEqual(QgsRasterFileWriter.driverForExtension(''), '')
111113

112114
def testExtensionsForFormat(self):
113115
self.assertCountEqual(QgsRasterFileWriter.extensionsForFormat('not format'), [])
114116
self.assertCountEqual(QgsRasterFileWriter.extensionsForFormat('GTiff'), ['tiff', 'tif'])
115117
self.assertCountEqual(QgsRasterFileWriter.extensionsForFormat('GPKG'), ['gpkg'])
118+
self.assertCountEqual(QgsRasterFileWriter.extensionsForFormat('JPEG'), ['jpg', 'jpeg'])
119+
self.assertCountEqual(QgsRasterFileWriter.extensionsForFormat('AAIGrid'), ['asc'])
116120

117121
def testSupportedFiltersAndFormat(self):
118122
# test with formats in recommended order

0 commit comments

Comments
 (0)