Skip to content

Commit 5bdda19

Browse files
committedFeb 19, 2021
[processing] Automatically load the native and 3d providers
when a script calls Processing.initialize() if they are not already loaded This means the following ugly code can be avoided: Processing.initialize() QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms(QgsApplication.processingRegistry())) QgsApplication.processingRegistry().addProvider(Qgs3DAlgorithms(QgsApplication.processingRegistry())) and instead the call to Processing.initialize() is sufficient to load ALL providers Fixes #41310 (cherry picked from commit b402544)
1 parent 0afe729 commit 5bdda19

File tree

8 files changed

+21
-16
lines changed

8 files changed

+21
-16
lines changed
 

‎python/plugins/processing/core/Processing.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
QgsProcessingOutputMultipleLayers,
4343
QgsProcessingFeedback,
4444
QgsRuntimeProfiler)
45+
from qgis.analysis import QgsNativeAlgorithms
4546

4647
import processing
4748
from processing.core.ProcessingConfig import ProcessingConfig
@@ -99,6 +100,20 @@ def initialize():
99100
return
100101

101102
with QgsRuntimeProfiler.profile('Initialize'):
103+
104+
# add native provider if not already added
105+
if "native" not in [p.id() for p in QgsApplication.processingRegistry().providers()]:
106+
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms(QgsApplication.processingRegistry()))
107+
108+
# add 3d provider if available and not already added
109+
if "3d" not in [p.id() for p in QgsApplication.processingRegistry().providers()]:
110+
try:
111+
from qgis._3d import Qgs3DAlgorithms
112+
QgsApplication.processingRegistry().addProvider(Qgs3DAlgorithms(QgsApplication.processingRegistry()))
113+
except ImportError:
114+
# no 3d library available
115+
pass
116+
102117
# Add the basic providers
103118
for c in [
104119
QgisAlgorithmProvider,

‎python/plugins/processing/tests/AlgorithmsTestBase.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,6 @@ def setUpClass(cls):
404404
start_app()
405405
from processing.core.Processing import Processing
406406
Processing.initialize()
407-
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
408407
cls.cleanup_paths = []
409408

410409
@classmethod

‎python/plugins/processing/tests/CheckValidityAlgorithm.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ def setUpClass(cls):
5454
"QGIS_TestPyQgsProcessingCheckValidity")
5555
QgsSettings().clear()
5656
Processing.initialize()
57-
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
5857
cls.registry = QgsApplication.instance().processingRegistry()
5958

6059
def _make_layer(self, layer_wkb_name):

‎python/plugins/processing/tests/ProcessingGeneralTest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ def setUpClass(cls):
4444
start_app()
4545
from processing.core.Processing import Processing
4646
Processing.initialize()
47-
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
4847
cls.cleanup_paths = []
4948
cls.in_place_layers = {}
5049
cls.vector_layer_params = {}

‎python/plugins/processing/tests/QgisAlgorithmsTest1.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,16 @@ def setUpClass(cls):
6767
start_app()
6868
from processing.core.Processing import Processing
6969
Processing.initialize()
70-
ProcessingConfig.setSettingValue(ModelerUtils.MODELS_FOLDER, os.path.join(os.path.dirname(__file__), 'models'))
71-
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
7270
cls.cleanup_paths = []
7371
cls.in_place_layers = {}
7472
cls.vector_layer_params = {}
75-
cls._original_models_folder = ProcessingConfig.getSetting(ModelerUtils.MODELS_FOLDER)
7673

7774
@classmethod
7875
def tearDownClass(cls):
7976
from processing.core.Processing import Processing
8077
Processing.deinitialize()
8178
for path in cls.cleanup_paths:
8279
shutil.rmtree(path)
83-
ProcessingConfig.setSettingValue(ModelerUtils.MODELS_FOLDER, cls._original_models_folder)
8480

8581
def test_definition_file(self):
8682
return 'qgis_algorithm_tests1.yaml'

‎python/plugins/processing/tests/QgisAlgorithmsTest2.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,16 @@ def setUpClass(cls):
4242
start_app()
4343
from processing.core.Processing import Processing
4444
Processing.initialize()
45-
ProcessingConfig.setSettingValue(ModelerUtils.MODELS_FOLDER, os.path.join(os.path.dirname(__file__), 'models'))
46-
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
4745
cls.cleanup_paths = []
4846
cls.in_place_layers = {}
4947
cls.vector_layer_params = {}
50-
cls._original_models_folder = ProcessingConfig.getSetting(ModelerUtils.MODELS_FOLDER)
5148

5249
@classmethod
5350
def tearDownClass(cls):
5451
from processing.core.Processing import Processing
5552
Processing.deinitialize()
5653
for path in cls.cleanup_paths:
5754
shutil.rmtree(path)
58-
ProcessingConfig.setSettingValue(ModelerUtils.MODELS_FOLDER, cls._original_models_folder)
5955

6056
def test_definition_file(self):
6157
return 'qgis_algorithm_tests2.yaml'

‎python/plugins/processing/tests/QgisAlgorithmsTest3.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,16 @@ def setUpClass(cls):
4242
start_app()
4343
from processing.core.Processing import Processing
4444
Processing.initialize()
45-
ProcessingConfig.setSettingValue(ModelerUtils.MODELS_FOLDER, os.path.join(os.path.dirname(__file__), 'models'))
46-
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
4745
cls.cleanup_paths = []
4846
cls.in_place_layers = {}
4947
cls.vector_layer_params = {}
50-
cls._original_models_folder = ProcessingConfig.getSetting(ModelerUtils.MODELS_FOLDER)
5148

5249
@classmethod
5350
def tearDownClass(cls):
5451
from processing.core.Processing import Processing
5552
Processing.deinitialize()
5653
for path in cls.cleanup_paths:
5754
shutil.rmtree(path)
58-
ProcessingConfig.setSettingValue(ModelerUtils.MODELS_FOLDER, cls._original_models_folder)
5955

6056
def test_definition_file(self):
6157
return 'qgis_algorithm_tests3.yaml'

‎python/plugins/processing/tests/QgisAlgorithmsTest4.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,13 @@ def setUpClass(cls):
4242
start_app()
4343
from processing.core.Processing import Processing
4444
Processing.initialize()
45+
46+
# change the model provider folder so that it looks in the test directory for models
4547
ProcessingConfig.setSettingValue(ModelerUtils.MODELS_FOLDER, os.path.join(os.path.dirname(__file__), 'models'))
46-
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
48+
for p in QgsApplication.processingRegistry().providers():
49+
if p.id() == "model":
50+
p.refreshAlgorithms()
51+
4752
cls.cleanup_paths = []
4853
cls.in_place_layers = {}
4954
cls.vector_layer_params = {}

0 commit comments

Comments
 (0)
Please sign in to comment.