From 08f2a02adf6b560b6bd065e4cd95930d45596d83 Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Thu, 25 Oct 2018 14:19:31 +0200 Subject: [PATCH 1/2] Ensure save as style file appends qml extension ... or you'll save in the DB instead --- src/app/qgisapp.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 5fa32b69e39..94b525ec9ca 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -7398,6 +7398,11 @@ void QgisApp::saveStyleFile( QgsMapLayer *layer ) if ( filename.isEmpty() ) return; + if ( ! filename.endsWith( QStringLiteral( ".qml" ) ) ) + { + filename += QStringLiteral( ".qml" ); + } + bool defaultLoadedFlag; layer->saveNamedStyle( filename, defaultLoadedFlag ); From 6afb8def0a38b727b552fe6efa9b5eb28807323c Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Thu, 25 Oct 2018 14:20:18 +0200 Subject: [PATCH 2/2] Add a test for saveNamedStyle to file path --- tests/src/python/test_qgsmaplayer.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/src/python/test_qgsmaplayer.py b/tests/src/python/test_qgsmaplayer.py index 1be12d9a2fa..36dde58b685 100644 --- a/tests/src/python/test_qgsmaplayer.py +++ b/tests/src/python/test_qgsmaplayer.py @@ -12,6 +12,7 @@ __copyright__ = 'Copyright 2017, The QGIS Project' # This will get replaced with a git SHA1 when you do a git archive __revision__ = '$Format:%H$' +import os import qgis # NOQA import tempfile @@ -20,6 +21,7 @@ from qgis.core import (QgsReadWriteContext, QgsProject) from qgis.testing import start_app, unittest from qgis.PyQt.QtXml import QDomDocument +from qgis.PyQt.QtCore import QTemporaryDir start_app() @@ -105,6 +107,15 @@ class TestQgsMapLayer(unittest.TestCase): self.assertTrue(status) self.assertTrue(layer2.metadata().abstract(), 'My abstract') + def testSaveNamedStyle(self): + layer = QgsVectorLayer("Point?field=fldtxt:string", "layer", "memory") + dir = QTemporaryDir() + dir_path = dir.path() + style_path = os.path.join(dir_path, 'my.qml') + _, result = layer.saveNamedStyle(style_path) + self.assertTrue(result) + self.assertTrue(os.path.exists(style_path)) + if __name__ == '__main__': unittest.main()