Skip to content

Commit 33fc3be

Browse files
committed
[processing] separated alglist to its own module
1 parent 9a5c583 commit 33fc3be

24 files changed

+172
-120
lines changed

python/plugins/processing/ProcessingPlugin.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@
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.core.defaultproviders import loadDefaultProviders
47-
46+
from processing.core.alglist import algList
4847

4948

5049
cmd_folder = os.path.split(inspect.getfile(inspect.currentframe()))[0]
@@ -58,7 +57,7 @@ def __init__(self, iface):
5857
self.iface = iface
5958

6059
def initGui(self):
61-
loadDefaultProviders()
60+
6261
Processing.initialize()
6362

6463
self.commander = None
@@ -163,7 +162,7 @@ def openModeler(self):
163162
dlg = ModelerDialog()
164163
dlg.exec_()
165164
if dlg.update:
166-
self.toolbox.updateProvider('model')
165+
algList.reloadProvider('model')
167166

168167
def openResults(self):
169168
dlg = ResultsDialog()

python/plugins/processing/core/Processing.py

+26-38
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,28 @@
4545
from processing.gui.Postprocessing import handleAlgorithmResults
4646
from processing.gui.AlgorithmExecutor import runalg
4747
from processing.tools import dataobjects
48-
49-
50-
class AlgListWatcher(QObject):
51-
52-
providerAdded = pyqtSignal(str)
53-
providerRemoved = pyqtSignal(str)
54-
55-
algListWatcher = AlgListWatcher()
56-
48+
from processing.core.alglist import algList
49+
50+
from processing.modeler.ModelerAlgorithmProvider import ModelerAlgorithmProvider
51+
from processing.modeler.ModelerOnlyAlgorithmProvider import ModelerOnlyAlgorithmProvider
52+
from processing.algs.qgis.QGISAlgorithmProvider import QGISAlgorithmProvider
53+
from processing.algs.grass.GrassAlgorithmProvider import GrassAlgorithmProvider
54+
from processing.algs.grass7.Grass7AlgorithmProvider import Grass7AlgorithmProvider
55+
from processing.algs.lidar.LidarToolsAlgorithmProvider import LidarToolsAlgorithmProvider
56+
from processing.algs.gdal.GdalOgrAlgorithmProvider import GdalOgrAlgorithmProvider
57+
from processing.algs.otb.OTBAlgorithmProvider import OTBAlgorithmProvider
58+
from processing.algs.r.RAlgorithmProvider import RAlgorithmProvider
59+
from processing.algs.saga.SagaAlgorithmProvider import SagaAlgorithmProvider
60+
from processing.script.ScriptAlgorithmProvider import ScriptAlgorithmProvider
61+
from processing.algs.taudem.TauDEMAlgorithmProvider import TauDEMAlgorithmProvider
62+
from processing.preconfigured.PreconfiguredAlgorithmProvider import PreconfiguredAlgorithmProvider
5763

5864
class Processing:
5965

60-
listeners = []
6166
providers = []
6267

63-
# A dictionary of algorithms. Keys are names of providers
64-
# and values are list with all algorithms from that provider
65-
algs = {}
6668

67-
# Same structure as algs
69+
# Same structure as algs in algList
6870
actions = {}
6971

7072
# All the registered context menu actions for the toolbox
@@ -75,17 +77,16 @@ def addProvider(provider, update=True):
7577
"""Use this method to add algorithms from external providers.
7678
"""
7779

78-
if provider.getName() in [p.getName for p in Processing.providers]:
80+
if provider.getName() in [p.getName for p in algList.providers]:
7981
return
8082
try:
8183
provider.initializeSettings()
8284
Processing.providers.append(provider)
8385
ProcessingConfig.readSettings()
8486
provider.loadAlgorithms()
85-
Processing.algs[provider.getName()] = {a.commandLineName(): a for a in provider.algs}
8687
Processing.actions[provider.getName()] = provider.actions
8788
Processing.contextMenuActions.extend(provider.contextMenuActions)
88-
algListWatcher.providerAdded.emit(provider.getName())
89+
algList.addProvider(provider)
8990
except:
9091
ProcessingLog.addToLog(
9192
ProcessingLog.LOG_ERROR,
@@ -103,8 +104,10 @@ def removeProvider(provider):
103104
try:
104105
provider.unload()
105106
Processing.providers.remove(provider)
106-
del Processing.algs[provider.getName()]
107-
algListWatcher.providerRemoved.emit(provider.getName())
107+
algList.remove(provider.getName())
108+
del Processing.actions[provider.getName()]
109+
for act in provider.contextMenuActions:
110+
Processing.contextMenuActions.remove(act)
108111
except:
109112
# This try catch block is here to avoid problems if the
110113
# plugin with a provider is unloaded after the Processing
@@ -115,10 +118,7 @@ def removeProvider(provider):
115118
@staticmethod
116119
def getProviderFromName(name):
117120
"""Returns the provider with the given name."""
118-
for provider in Processing.providers:
119-
if provider.getName() == name:
120-
return provider
121-
return Processing.modeler
121+
return algList.getProviderFromName(name)
122122

123123
@staticmethod
124124
def initialize():
@@ -143,27 +143,15 @@ def updateAlgsList():
143143

144144
@staticmethod
145145
def reloadProvider(providerName):
146-
for p in Processing.providers:
147-
if p.getName() == providerName:
148-
p.loadAlgorithms()
149-
Processing.algs[
150-
p.getName()] = {a.commandLineName(): a for a in p.algs}
151-
146+
algList.reloadProvider(providerName)
152147

153148
@staticmethod
154149
def getAlgorithm(name):
155-
for provider in Processing.algs.values():
156-
if name in provider:
157-
return provider[name]
158-
return None
150+
return algList.getAlgorithm(name)
159151

160152
@staticmethod
161153
def getAlgorithmFromFullName(name):
162-
for provider in Processing.algs.values():
163-
for alg in provider.values():
164-
if alg.name == name:
165-
return alg
166-
return None
154+
return algList.getAlgorithmFromFullName(name)
167155

168156
@staticmethod
169157
def getObject(uri):
+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
Processing.py
6+
---------------------
7+
Date : August 2012
8+
Copyright : (C) 2012 by Victor Olaya
9+
Email : volayaf at gmail dot com
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Victor Olaya'
21+
__date__ = 'August 2012'
22+
__copyright__ = '(C) 2012, Victor Olaya'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
from qgis.PyQt.QtCore import QObject, pyqtSignal
29+
30+
class AlgorithmList(QObject):
31+
32+
providerAdded = pyqtSignal(str)
33+
providerRemoved = pyqtSignal(str)
34+
providerUpdated = pyqtSignal(str)
35+
36+
# A dictionary of algorithms. Keys are names of providers
37+
# and values are list with all algorithms from that provider
38+
algs = {}
39+
40+
providers = []
41+
42+
def removeProvider(self, providerName):
43+
for p in self.providers:
44+
if p.getName() == providerName:
45+
self.providers.remove(p)
46+
break
47+
self.algs.remove(providerName)
48+
self.providerRemoved.emit(providerName)
49+
50+
def reloadProvider(self, providerName):
51+
for p in self.providers:
52+
if p.getName() == providerName:
53+
p.loadAlgorithms()
54+
self.algs[p.getName()] = {a.commandLineName(): a for a in p.algs}
55+
self.providerUpdated.emit(p.getName())
56+
break
57+
58+
def addProvider(self, provider):
59+
self.providers.append(provider)
60+
self.algs[provider.getName()] = {a.commandLineName(): a for a in provider.algs}
61+
self.providerAdded.emit(provider.getName())
62+
63+
def getProviderFromName(self, name):
64+
for provider in self.providers:
65+
if provider.getName() == name:
66+
return provider
67+
68+
def getAlgorithm(self, name):
69+
for provider in self.algs.values():
70+
if name in provider:
71+
return provider[name]
72+
73+
def getAlgorithmFromFullName(self, name):
74+
for provider in self.algs.values():
75+
for alg in provider.values():
76+
if alg.name == name:
77+
return alg
78+
79+
algList = AlgorithmList()

python/plugins/processing/core/defaultproviders.py

-13
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,6 @@
2626
__revision__ = '$Format:%H$'
2727

2828

29-
from processing.modeler.ModelerAlgorithmProvider import ModelerAlgorithmProvider
30-
from processing.modeler.ModelerOnlyAlgorithmProvider import ModelerOnlyAlgorithmProvider
31-
from processing.algs.qgis.QGISAlgorithmProvider import QGISAlgorithmProvider
32-
from processing.algs.grass.GrassAlgorithmProvider import GrassAlgorithmProvider
33-
from processing.algs.grass7.Grass7AlgorithmProvider import Grass7AlgorithmProvider
34-
from processing.algs.lidar.LidarToolsAlgorithmProvider import LidarToolsAlgorithmProvider
35-
from processing.algs.gdal.GdalOgrAlgorithmProvider import GdalOgrAlgorithmProvider
36-
from processing.algs.otb.OTBAlgorithmProvider import OTBAlgorithmProvider
37-
from processing.algs.r.RAlgorithmProvider import RAlgorithmProvider
38-
from processing.algs.saga.SagaAlgorithmProvider import SagaAlgorithmProvider
39-
from processing.script.ScriptAlgorithmProvider import ScriptAlgorithmProvider
40-
from processing.algs.taudem.TauDEMAlgorithmProvider import TauDEMAlgorithmProvider
41-
from processing.preconfigured.PreconfiguredAlgorithmProvider import PreconfiguredAlgorithmProvider
4229

4330
def loadDefaultProviders():
4431
# this is here just to "trigger" the above imports so providers are loaded

python/plugins/processing/gui/CommanderWindow.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from qgis.PyQt.QtCore import QSortFilterProxyModel
3333
from qgis.utils import iface
3434
from processing.core.Processing import Processing
35+
from processing.core.alglist import algList
3536
from processing.gui.MessageDialog import MessageDialog
3637
from processing.gui.AlgorithmDialog import AlgorithmDialog
3738
from processing.tools.system import userFolder, mkdir
@@ -99,9 +100,7 @@ def fillCombo(self):
99100
self.combo.clear()
100101

101102
# Add algorithms
102-
for providerName in Processing.algs.keys():
103-
provider = Processing.algs[providerName]
104-
algs = provider.values()
103+
for algs in algList.algs.values():
105104
for alg in algs:
106105
self.combo.addItem('Processing algorithm: ' + alg.name)
107106

@@ -111,7 +110,7 @@ def fillCombo(self):
111110
types.FunctionType):
112111
self.combo.addItem('Command: ' + command)
113112

114-
#Add menu entries
113+
# Add menu entries
115114
menuActions = []
116115
actions = iface.mainWindow().menuBar().actions()
117116
for action in actions:

python/plugins/processing/gui/ContextAction.py

-8
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,6 @@ def setData(self, itemData, toolbox):
3535
self.itemData = itemData
3636
self.toolbox = toolbox
3737

38-
def updateToolbox(self):
39-
'''
40-
Updates the list of algorithms and then the toolbox.
41-
It only update the item corresponding to the provider of the algorithm.
42-
To be called after the action is executed, if needed
43-
'''
44-
self.toolbox.updateProvider(self.alg.provider.getName())
45-
4638
def tr(self, string, context=''):
4739
if context == '':
4840
context = 'ContextAction'

python/plugins/processing/gui/CreateNewScriptAction.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
from processing.gui.ToolboxAction import ToolboxAction
3333
from processing.gui.ScriptEditorDialog import ScriptEditorDialog
34+
from processing.core.alglist import algList
3435

3536
pluginPath = os.path.split(os.path.dirname(__file__))[0]
3637

@@ -62,6 +63,6 @@ def execute(self):
6263
dlg.exec_()
6364
if dlg.update:
6465
if self.scriptType == self.SCRIPT_PYTHON:
65-
self.toolbox.updateProvider('script')
66+
algList.reloadProvider('script')
6667
elif self.scriptType == self.SCRIPT_R:
67-
self.toolbox.updateProvider('r')
68+
algList.reloadProvider('r')

python/plugins/processing/gui/DeleteScriptAction.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
from processing.algs.r.RAlgorithm import RAlgorithm
3535
from processing.script.ScriptAlgorithm import ScriptAlgorithm
36-
36+
from processing.core.alglist import algList
3737

3838
class DeleteScriptAction(ContextAction):
3939

@@ -60,6 +60,6 @@ def execute(self):
6060
if reply == QMessageBox.Yes:
6161
os.remove(self.itemData.descriptionFile)
6262
if self.scriptType == self.SCRIPT_PYTHON:
63-
self.toolbox.updateProvider('script')
63+
algList.reloadProvider('script')
6464
elif self.scriptType == self.SCRIPT_R:
65-
self.toolbox.updateProvider('r')
65+
algList.reloadProvider('r')

python/plugins/processing/gui/EditScriptAction.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from processing.gui.ScriptEditorDialog import ScriptEditorDialog
3030
from processing.algs.r.RAlgorithm import RAlgorithm
3131
from processing.script.ScriptAlgorithm import ScriptAlgorithm
32-
32+
from processing.core.alglist import algList
3333

3434
class EditScriptAction(ContextAction):
3535

@@ -52,6 +52,6 @@ def execute(self):
5252
dlg.exec_()
5353
if dlg.update:
5454
if self.scriptType == ScriptEditorDialog.SCRIPT_PYTHON:
55-
self.toolbox.updateProvider('script')
55+
algList.reloadProvider('script')
5656
elif self.scriptType == ScriptEditorDialog.SCRIPT_R:
57-
self.toolbox.updateProvider('r')
57+
algList.reloadProvider('r')

python/plugins/processing/gui/GetScriptsAndModels.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ def getIcon(self):
6464
def execute(self):
6565
dlg = GetScriptsAndModelsDialog(GetScriptsAndModelsDialog.SCRIPTS)
6666
dlg.exec_()
67-
if dlg.updateToolbox:
68-
self.toolbox.updateProvider('script')
67+
if dlg.updateProvider:
68+
algList.reloadProvider('script')
6969

7070

7171
class GetRScriptsAction(ToolboxAction):
@@ -80,7 +80,7 @@ def getIcon(self):
8080
def execute(self):
8181
dlg = GetScriptsAndModelsDialog(GetScriptsAndModelsDialog.RSCRIPTS)
8282
dlg.exec_()
83-
if dlg.updateToolbox:
83+
if dlg.updateProvider:
8484
self.toolbox.updateProvider('r')
8585

8686

@@ -96,8 +96,8 @@ def getIcon(self):
9696
def execute(self):
9797
dlg = GetScriptsAndModelsDialog(GetScriptsAndModelsDialog.MODELS)
9898
dlg.exec_()
99-
if dlg.updateToolbox:
100-
self.toolbox.updateProvider('model')
99+
if dlg.updateProvider:
100+
algList.reloadProvider('model')
101101

102102

103103
class GetScriptsAndModelsDialog(BASE, WIDGET):
@@ -141,7 +141,7 @@ def __init__(self, resourceType):
141141
self.icon = QIcon(os.path.join(pluginPath, 'images', 'r.svg'))
142142

143143
self.lastSelectedItem = None
144-
self.updateToolbox = False
144+
self.updateProvider = False
145145
self.populateTree()
146146
self.buttonBox.accepted.connect(self.okPressed)
147147
self.buttonBox.rejected.connect(self.cancelPressed)
@@ -305,7 +305,7 @@ def okPressed(self):
305305
if os.path.exists(path):
306306
os.remove(path)
307307

308-
self.updateToolbox = len(toDownload) + len(toDelete) > 0
308+
self.updateProvider = len(toDownload) + len(toDelete) > 0
309309
super(GetScriptsAndModelsDialog, self).accept()
310310

311311

0 commit comments

Comments
 (0)