Skip to content

Commit e6b76c4

Browse files
committed
[processing] cleaning and restructuring
This fixes some design errors (mainly the ModelerUtils class, which is not needed anymore to hold a copy of algs and providers in order to avoid circular dependencies) and removes unused code
1 parent b4b05ba commit e6b76c4

14 files changed

+70
-629
lines changed

python/plugins/processing/ProcessingPlugin.py

+13
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,19 @@
4343
from processing.modeler.ModelerDialog import ModelerDialog
4444
from processing.tools.system import tempFolder
4545
from processing.gui.menus import removeMenus, initializeMenus, createMenus
46+
from processing.modeler.ModelerAlgorithmProvider import ModelerAlgorithmProvider
47+
from processing.modeler.ModelerOnlyAlgorithmProvider import ModelerOnlyAlgorithmProvider
48+
from processing.algs.qgis.QGISAlgorithmProvider import QGISAlgorithmProvider
49+
from processing.algs.grass.GrassAlgorithmProvider import GrassAlgorithmProvider
50+
from processing.algs.grass7.Grass7AlgorithmProvider import Grass7AlgorithmProvider
51+
from processing.algs.lidar.LidarToolsAlgorithmProvider import LidarToolsAlgorithmProvider
52+
from processing.algs.gdal.GdalOgrAlgorithmProvider import GdalOgrAlgorithmProvider
53+
from processing.algs.otb.OTBAlgorithmProvider import OTBAlgorithmProvider
54+
from processing.algs.r.RAlgorithmProvider import RAlgorithmProvider
55+
from processing.algs.saga.SagaAlgorithmProvider import SagaAlgorithmProvider
56+
from processing.script.ScriptAlgorithmProvider import ScriptAlgorithmProvider
57+
from processing.algs.taudem.TauDEMAlgorithmProvider import TauDEMAlgorithmProvider
58+
from processing.preconfigured.PreconfiguredAlgorithmProvider import PreconfiguredAlgorithmProvider
4659

4760

4861
cmd_folder = os.path.split(inspect.getfile(inspect.currentframe()))[0]

python/plugins/processing/core/GeoAlgorithm.py

+6
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,12 @@ def getAsCommand(self):
541541
s = s[:-1] + ')'
542542
return s
543543

544+
def displayName(self):
545+
return self.i18n_name or self.name
546+
547+
def displayNames(self):
548+
return self.name, self.i18n_name
549+
544550
def tr(self, string, context=''):
545551
if context == '':
546552
context = self.__class__.__name__

python/plugins/processing/core/Processing.py

+13-99
Original file line numberDiff line numberDiff line change
@@ -36,29 +36,14 @@
3636
from qgis.core import QgsMessageLog
3737

3838
import processing
39-
from processing.gui import AlgorithmClassification
40-
from processing.modeler.ModelerUtils import ModelerUtils
39+
from processing.core.AlgorithmProvider import AlgorithmProvider
4140
from processing.core.ProcessingConfig import ProcessingConfig
4241
from processing.core.GeoAlgorithm import GeoAlgorithm
4342
from processing.core.ProcessingLog import ProcessingLog
4443
from processing.gui.MessageBarProgress import MessageBarProgress
4544
from processing.gui.RenderingStyles import RenderingStyles
4645
from processing.gui.Postprocessing import handleAlgorithmResults
4746
from processing.gui.AlgorithmExecutor import runalg
48-
from processing.modeler.ModelerAlgorithmProvider import ModelerAlgorithmProvider
49-
from processing.modeler.ModelerOnlyAlgorithmProvider import ModelerOnlyAlgorithmProvider
50-
from processing.algs.qgis.QGISAlgorithmProvider import QGISAlgorithmProvider
51-
from processing.algs.grass.GrassAlgorithmProvider import GrassAlgorithmProvider
52-
from processing.algs.grass7.Grass7AlgorithmProvider import Grass7AlgorithmProvider
53-
from processing.algs.lidar.LidarToolsAlgorithmProvider import LidarToolsAlgorithmProvider
54-
from processing.algs.gdal.GdalOgrAlgorithmProvider import GdalOgrAlgorithmProvider
55-
from processing.algs.otb.OTBAlgorithmProvider import OTBAlgorithmProvider
56-
from processing.algs.r.RAlgorithmProvider import RAlgorithmProvider
57-
from processing.algs.saga.SagaAlgorithmProvider import SagaAlgorithmProvider
58-
from processing.script.ScriptAlgorithmProvider import ScriptAlgorithmProvider
59-
from processing.algs.taudem.TauDEMAlgorithmProvider import TauDEMAlgorithmProvider
60-
from processing.preconfigured.PreconfiguredAlgorithmProvider import PreconfiguredAlgorithmProvider
61-
6247
from processing.tools import dataobjects
6348

6449

@@ -85,22 +70,21 @@ class Processing:
8570
# All the registered context menu actions for the toolbox
8671
contextMenuActions = []
8772

88-
modeler = ModelerAlgorithmProvider()
89-
9073
@staticmethod
91-
def addProvider(provider, updateList=True):
74+
def addProvider(provider):
9275
"""Use this method to add algorithms from external providers.
9376
"""
9477

95-
# Note: this might slow down the initialization process if
96-
# there are many new providers added. Should think of a
97-
# different solution
78+
if provider.getName() in [p.getName for p in Processing.providers]:
79+
return
9880
try:
9981
provider.initializeSettings()
10082
Processing.providers.append(provider)
10183
ProcessingConfig.readSettings()
102-
if updateList:
103-
Processing.updateAlgsList()
84+
provider.loadAlgorithms()
85+
Processing.algs[provider.getName()] = {a.commandLineName(): a for a in provider.algs}
86+
Processing.actions[provider.getName()] = provider.actions
87+
Processing.contextMenuActions.extend(provider.contextMenuActions)
10488
algListWatcher.providerAdded.emit(provider.getName())
10589
except:
10690
ProcessingLog.addToLog(
@@ -125,7 +109,7 @@ def removeProvider(provider):
125109
# This try catch block is here to avoid problems if the
126110
# plugin with a provider is unloaded after the Processing
127111
# framework itself has been unloaded. It is a quick fix
128-
# before I found out how to properly avoid that.
112+
# before I find out how to properly avoid that.
129113
pass
130114

131115
@staticmethod
@@ -139,27 +123,12 @@ def getProviderFromName(name):
139123
@staticmethod
140124
def initialize():
141125
# Add the basic providers
142-
Processing.addProvider(QGISAlgorithmProvider(), updateList=False)
143-
Processing.addProvider(ModelerOnlyAlgorithmProvider(), updateList=False)
144-
Processing.addProvider(GdalOgrAlgorithmProvider(), updateList=False)
145-
Processing.addProvider(LidarToolsAlgorithmProvider(), updateList=False)
146-
Processing.addProvider(OTBAlgorithmProvider(), updateList=False)
147-
Processing.addProvider(RAlgorithmProvider(), updateList=False)
148-
Processing.addProvider(SagaAlgorithmProvider(), updateList=False)
149-
Processing.addProvider(GrassAlgorithmProvider(), updateList=False)
150-
Processing.addProvider(Grass7AlgorithmProvider(), updateList=False)
151-
Processing.addProvider(ScriptAlgorithmProvider(), updateList=False)
152-
Processing.addProvider(TauDEMAlgorithmProvider(), updateList=False)
153-
Processing.addProvider(PreconfiguredAlgorithmProvider(), updateList=False)
154-
Processing.addProvider(Processing.modeler, updateList=False)
155-
Processing.modeler.initializeSettings()
156-
126+
for c in AlgorithmProvider.__subclasses__():
127+
Processing.addProvider(c())
157128
# And initialize
158-
AlgorithmClassification.loadClassification()
159129
ProcessingConfig.initialize()
160130
ProcessingConfig.readSettings()
161131
RenderingStyles.loadStyles()
162-
Processing.loadFromProviders()
163132

164133
@staticmethod
165134
def updateAlgsList():
@@ -168,21 +137,10 @@ def updateAlgsList():
168137
algorithm providers.
169138
"""
170139
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
171-
Processing.loadFromProviders()
140+
for p in Processing.providers:
141+
Processing.reloadProvider(p)
172142
QApplication.restoreOverrideCursor()
173143

174-
@staticmethod
175-
def loadFromProviders():
176-
Processing.loadAlgorithms()
177-
Processing.loadActions()
178-
Processing.loadContextMenuActions()
179-
180-
@staticmethod
181-
def updateProviders():
182-
providers = [p for p in Processing.providers if p.getName() != "model"]
183-
for provider in providers:
184-
provider.loadAlgorithms()
185-
186144
@staticmethod
187145
def reloadProvider(providerName):
188146
for p in Processing.providers:
@@ -191,50 +149,6 @@ def reloadProvider(providerName):
191149
Processing.algs[
192150
p.getName()] = {a.commandLineName(): a for a in p.algs}
193151

194-
@staticmethod
195-
def loadAlgorithms():
196-
Processing.algs = {}
197-
Processing.updateProviders()
198-
providers = [p for p in Processing.providers if p.getName() != "model"]
199-
for provider in providers:
200-
providerAlgs = provider.algs
201-
algs = {}
202-
for alg in providerAlgs:
203-
algs[alg.commandLineName()] = alg
204-
Processing.algs[provider.getName()] = algs
205-
206-
provs = {}
207-
for provider in Processing.providers:
208-
provs[provider.getName()] = provider
209-
210-
ModelerUtils.allAlgs = Processing.algs
211-
ModelerUtils.providers = provs
212-
213-
Processing.modeler.loadAlgorithms()
214-
215-
algs = {}
216-
for alg in Processing.modeler.algs:
217-
algs[alg.commandLineName()] = alg
218-
Processing.algs[Processing.modeler.getName()] = algs
219-
220-
@staticmethod
221-
def loadActions():
222-
for provider in Processing.providers:
223-
providerActions = provider.actions
224-
actions = list()
225-
for action in providerActions:
226-
actions.append(action)
227-
Processing.actions[provider.getName()] = actions
228-
229-
Processing.actions[provider.getName()] = actions
230-
231-
@staticmethod
232-
def loadContextMenuActions():
233-
Processing.contextMenuActions = []
234-
for provider in Processing.providers:
235-
providerActions = provider.contextMenuActions
236-
for action in providerActions:
237-
Processing.contextMenuActions.append(action)
238152

239153
@staticmethod
240154
def getAlgorithm(name):

python/plugins/processing/gui/AlgorithmClassification.py

-80
This file was deleted.

python/plugins/processing/gui/AlgorithmDialogBase.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
from qgis.core import QgsNetworkAccessManager
3737

3838
from processing.core.ProcessingConfig import ProcessingConfig
39-
from processing.gui import AlgorithmClassification
4039

4140
pluginPath = os.path.split(os.path.dirname(__file__))[0]
4241
WIDGET, BASE = uic.loadUiType(
@@ -62,7 +61,7 @@ def __init__(self, alg):
6261

6362
self.btnClose = self.buttonBox.button(QDialogButtonBox.Close)
6463

65-
self.setWindowTitle(AlgorithmClassification.getDisplayName(self.alg))
64+
self.setWindowTitle(self.alg.displayName())
6665

6766
desktop = QDesktopWidget()
6867
if desktop.physicalDpiX() > 96:

python/plugins/processing/gui/ProcessingToolbox.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
from processing.core.ProcessingLog import ProcessingLog
3939
from processing.core.ProcessingConfig import ProcessingConfig, settingsWatcher
4040
from processing.gui.MessageDialog import MessageDialog
41-
from processing.gui import AlgorithmClassification
4241
from processing.gui.AlgorithmDialog import AlgorithmDialog
4342
from processing.gui.BatchAlgorithmDialog import BatchAlgorithmDialog
4443
from processing.gui.EditRenderingStylesDialog import EditRenderingStylesDialog
@@ -344,7 +343,7 @@ def __init__(self, alg):
344343
QTreeWidgetItem.__init__(self)
345344
self.alg = alg
346345
icon = alg.getIcon()
347-
nameEn, name = AlgorithmClassification.getDisplayNames(alg)
346+
nameEn, name = alg.displayNames()
348347
name = name if name != '' else nameEn
349348
self.setIcon(0, icon)
350349
self.setToolTip(0, name)

python/plugins/processing/gui/ScriptEditorDialog.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
***************************************************************************
1818
"""
1919

20-
2120
__author__ = 'Alexander Bruy'
2221
__date__ = 'December 2012'
2322
__copyright__ = '(C) 2012, Alexander Bruy'
@@ -39,7 +38,7 @@
3938
from qgis.core import QgsApplication
4039
from qgis.utils import iface
4140

42-
from processing.modeler.ModelerUtils import ModelerUtils
41+
from processing.core.Processing import Processing
4342
from processing.gui.AlgorithmDialog import AlgorithmDialog
4443
from processing.gui.HelpEditionDialog import HelpEditionDialog
4544
from processing.algs.r.RAlgorithm import RAlgorithm
@@ -63,8 +62,8 @@ def __init__(self, algType, alg):
6362
super(ScriptEditorDialog, self).__init__(None)
6463
self.setupUi(self)
6564

66-
self.setWindowFlags(Qt.WindowMinimizeButtonHint |
67-
Qt.WindowMaximizeButtonHint |
65+
self.setWindowFlags(Qt.WindowMinimizeButtonHint |
66+
Qt.WindowMaximizeButtonHint |
6867
Qt.WindowCloseButtonHint)
6968
# Set icons
7069
self.btnOpen.setIcon(
@@ -274,10 +273,10 @@ def setHasChanged(self, hasChanged):
274273
def runAlgorithm(self):
275274
if self.algType == self.SCRIPT_PYTHON:
276275
alg = ScriptAlgorithm(None, unicode(self.editor.text()))
277-
alg.provider = ModelerUtils.providers['script']
276+
alg.provider = Processing.getProviderFromName('script')
278277
if self.algType == self.SCRIPT_R:
279278
alg = RAlgorithm(None, unicode(self.editor.text()))
280-
alg.provider = ModelerUtils.providers['r']
279+
alg.provider = Processing.getProviderFromName('r')
281280

282281
dlg = alg.getCustomParametersDialog()
283282
if not dlg:

0 commit comments

Comments
 (0)