Skip to content

Commit 97ca84d

Browse files
authored
Merge pull request #24 from GispoCoding/migrate-to-new-settings
Migrate to plugin tools settings methods
2 parents fe40d88 + 70cfcad commit 97ca84d

4 files changed

+77
-50
lines changed

nlsgpkgloader/nls_geopackage_loader.py

+43-45
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,11 @@
3232
QgsLayerTreeGroup,
3333
QgsMessageLog,
3434
QgsProject,
35+
QgsSettings,
3536
QgsVectorLayer,
3637
)
3738
from qgis.gui import QgsFileWidget
38-
from qgis.PyQt.QtCore import QCoreApplication, QSettings, QTimer, QTranslator, qVersion
39+
from qgis.PyQt.QtCore import QCoreApplication, QTimer, QTranslator, qVersion
3940
from qgis.PyQt.QtGui import QIcon
4041
from qgis.PyQt.QtWidgets import QAction, QListWidgetItem, QMessageBox
4142
from qgis.utils import iface
@@ -55,30 +56,28 @@
5556
DissolveFeaturesTask,
5657
)
5758
from nlsgpkgloader.qgis_plugin_tools.tools.resources import resources_path
59+
from nlsgpkgloader.qgis_plugin_tools.tools.settings import get_setting, set_setting
5860
from nlsgpkgloader.ui import (
5961
NLSGeoPackageLoaderMunicipalitySelectionDialog,
6062
NLSGeoPackageLoaderProgressDialog,
6163
NLSGeoPackageLoaderUserKeyDialog,
6264
)
6365

66+
OLD_SETTINGS_GROUP_NAME = "NLSgpkgloader"
67+
6468

6569
class NLSGeoPackageLoader:
6670
"""QGIS Plugin Implementation."""
6771

6872
def __init__(self):
69-
"""Constructor.
73+
"""Constructor"""
7074

71-
:param iface: An interface instance that will be passed to this class
72-
which provides the hook by which you can manipulate the QGIS
73-
application at run time.
74-
:type iface: QgsInterface
75-
"""
7675
# Save reference to the QGIS interface
7776
self.iface = iface
7877
# initialize plugin directory
7978
self.plugin_dir = os.path.dirname(__file__)
8079
# initialize locale
81-
locale = QSettings().value("locale/userLocale")[0:2]
80+
locale = get_setting("locale/userLocale", internal=False)[0:2]
8281
locale_path = resources_path("i18n", "NLSGeoPackageLoader_{}.qm".format(locale))
8382

8483
if os.path.exists(locale_path):
@@ -101,9 +100,12 @@ def __init__(self):
101100

102101
self.nls_user_key_dialog = NLSGeoPackageLoaderUserKeyDialog()
103102

104-
self.first_run = QSettings().value("/NLSgpkgloader/first_run", True, type=bool)
103+
if OLD_SETTINGS_GROUP_NAME in QgsSettings().childGroups():
104+
self._migrate_settings()
105+
106+
self.first_run = get_setting("first_run", True, bool)
105107
if self.first_run:
106-
QSettings().setValue("/NLSgpkgloader/first_run", False)
108+
set_setting("first_run", False)
107109

108110
# noinspection PyMethodMayBeStatic
109111
def tr(self, message):
@@ -206,6 +208,15 @@ def initGui(self): # noqa N802
206208
# will be set False in run()
207209
self.first_start = True
208210

211+
@staticmethod
212+
def _migrate_settings():
213+
settings = QgsSettings()
214+
settings.beginGroup(OLD_SETTINGS_GROUP_NAME)
215+
for key in settings.allKeys():
216+
set_setting(key, settings.value(key))
217+
settings.endGroup()
218+
settings.remove(OLD_SETTINGS_GROUP_NAME)
219+
209220
def unload(self):
210221
"""Removes the plugin menu item and icon from QGIS GUI."""
211222
for action in self.actions:
@@ -214,24 +225,21 @@ def unload(self):
214225

215226
def run(self):
216227
"""Run method that performs all the real work"""
217-
self.nls_user_key = QSettings().value("/NLSgpkgloader/userKey", "", type=str)
218-
self.data_download_dir = QSettings().value(
219-
"/NLSgpkgloader/dataDownloadDir", "", type=str
220-
)
221-
self.fileName = QSettings().value(
222-
"/NLSgpkgloader/defaultFileName", "mtk.gpkg", type=str
223-
)
224-
self.addDownloadedDataAsLayer = QSettings().value(
225-
"/NLSgpkgloader/addDownloadedDataAsLayer", True, type=bool
228+
self.nls_user_key = get_setting("userKey", "", typehint=str)
229+
230+
self.data_download_dir = get_setting("dataDownloadDir", "", typehint=str)
231+
self.fileName = get_setting("defaultFileName", "mtk.gpkg", typehint=str)
232+
self.addDownloadedDataAsLayer = get_setting(
233+
"addDownloadedDataAsLayer", True, typehint=bool
226234
)
227-
self.showMunicipalitiesAsLayer = QSettings().value(
228-
"/NLSgpkgloader/showMunicipalitiesAsLayer", True, type=bool
235+
self.showMunicipalitiesAsLayer = get_setting(
236+
"showMunicipalitiesAsLayer", True, typehint=bool
229237
)
230-
self.showUTMGridsAsLayer = QSettings().value(
231-
"/NLSgpkgloader/showUTMGridsAsLayer", False, type=bool
238+
self.showUTMGridsAsLayer = get_setting(
239+
"showUTMGridsAsLayer", False, typehint=bool
232240
)
233-
self.showSeatilesAsLayer = QSettings().value(
234-
"/NLSgpkgloader/showSeatilesAsLayer", False, type=bool
241+
self.showSeatilesAsLayer = get_setting(
242+
"showSeatilesAsLayer", False, typehint=bool
235243
)
236244

237245
if self.nls_user_key == "":
@@ -290,7 +298,7 @@ def run(self):
290298
return
291299
if self.fileName.split(".")[-1].lower() != "gpkg":
292300
self.fileName += ".gpkg"
293-
QSettings().setValue("/NLSgpkgloader/defaultFileName", self.fileName)
301+
set_setting("defaultFileName", self.fileName)
294302
self.gpkg_path = os.path.join(self.data_download_dir, self.fileName)
295303
if os.path.isfile(self.gpkg_path):
296304
reply = QMessageBox.question(
@@ -398,18 +406,10 @@ def toggle_layers(self):
398406
)
399407
self.showUTMGridsAsLayer = self.municipalities_dialog.loadUtmGrids.isChecked()
400408
self.showSeatilesAsLayer = self.municipalities_dialog.loadSeaGrids.isChecked()
401-
QSettings().setValue(
402-
"/NLSgpkgloader/addDownloadedDataAsLayer", self.addDownloadedDataAsLayer
403-
)
404-
QSettings().setValue(
405-
"/NLSgpkgloader/showMunicipalitiesAsLayer", self.showMunicipalitiesAsLayer
406-
)
407-
QSettings().setValue(
408-
"/NLSgpkgloader/showUTMGridsAsLayer", self.showUTMGridsAsLayer
409-
)
410-
QSettings().setValue(
411-
"/NLSgpkgloader/showSeatilesAsLayer", self.showSeatilesAsLayer
412-
)
409+
set_setting("addDownloadedDataAsLayer", self.addDownloadedDataAsLayer)
410+
set_setting("showMunicipalitiesAsLayer", self.showMunicipalitiesAsLayer)
411+
set_setting("showUTMGridsAsLayer", self.showUTMGridsAsLayer)
412+
set_setting("showSeatilesAsLayer", self.showSeatilesAsLayer)
413413

414414
found_utm5_layer = (
415415
found_utm10_layer
@@ -872,10 +872,10 @@ def show_settings_dialog(self):
872872
)
873873
self.nls_user_key_dialog.userKeyLineEdit.setText(self.nls_user_key)
874874
self.nls_user_key_dialog.dataLocationQgsFileWidget.setFilePath(
875-
QSettings().value(
876-
"/NLSgpkgloader/dataDownloadDir",
875+
get_setting(
876+
"dataDownloadDir",
877877
os.path.join(self.path, "data"),
878-
type=str,
878+
typehint=str,
879879
)
880880
)
881881

@@ -895,10 +895,8 @@ def show_settings_dialog(self):
895895
self.nls_user_key_dialog.dataLocationQgsFileWidget.filePath()
896896
)
897897

898-
QSettings().setValue("/NLSgpkgloader/userKey", self.nls_user_key)
899-
QSettings().setValue(
900-
"/NLSgpkgloader/dataDownloadDir", self.data_download_dir
901-
)
898+
set_setting("userKey", self.nls_user_key)
899+
set_setting("dataDownloadDir", self.data_download_dir)
902900
return True
903901

904902
else:

nlsgpkgloader/nls_geopackage_loader_tasks.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
import os
2121
import sqlite3
2222

23-
import processing # pylint: disable=import-error
2423
from osgeo import ogr
25-
from processing.tools import dataobjects # pylint: disable=import-error
24+
from qgis import processing
2625
from qgis.core import (
2726
QgsFeature,
2827
QgsFeatureRequest,
2928
QgsMessageLog,
29+
QgsProcessingContext,
3030
QgsTask,
3131
QgsVectorFileWriter,
3232
QgsVectorLayer,
@@ -180,7 +180,8 @@ def run(self):
180180
+ layer_name
181181
+ '" (geom) sql=',
182182
}
183-
context = dataobjects.createContext()
183+
184+
context = QgsProcessingContext()
184185
context.setInvalidGeometryCheck(QgsFeatureRequest.GeometrySkipInvalid)
185186
processing.run("native:dissolve", params, context=context)
186187
percentage = i / float(total_tables) * 100.0

pyproject.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ extend-exclude = '''
1212
'''
1313

1414
[tool.pytest.ini_options]
15-
addopts = "-v"
15+
addopts = "-v --cov=nlsgpkgloader --cov-report html --cov-report term"
1616
testpaths = "tests"
1717

1818
[tool.coverage.report]
19-
omit = "nlsgpkgloader/qgis_plugin_tools/*"
19+
omit = ["nlsgpkgloader/qgis_plugin_tools/*"]

tests/test_settings_migration.py

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import pytest
2+
from qgis.core import QgsSettings
3+
4+
from nlsgpkgloader.nls_geopackage_loader import (
5+
OLD_SETTINGS_GROUP_NAME,
6+
NLSGeoPackageLoader,
7+
)
8+
from nlsgpkgloader.qgis_plugin_tools.tools.settings import get_setting
9+
10+
11+
@pytest.fixture
12+
def old_settings():
13+
settings = QgsSettings()
14+
settings.beginGroup(OLD_SETTINGS_GROUP_NAME)
15+
settings.setValue("setting1", "value1")
16+
settings.setValue("setting2", True)
17+
settings.endGroup()
18+
19+
yield settings
20+
21+
22+
def test_settings_migration(old_settings):
23+
NLSGeoPackageLoader._migrate_settings()
24+
25+
assert OLD_SETTINGS_GROUP_NAME not in old_settings.childGroups()
26+
27+
assert get_setting("setting1") == "value1"
28+
assert get_setting("setting2", typehint=bool) is True

0 commit comments

Comments
 (0)