Skip to content

Commit 784b46b

Browse files
committedJul 11, 2014
[processing] allow adding core processing algs using scripts
1 parent 11f197e commit 784b46b

File tree

6 files changed

+46
-31
lines changed

6 files changed

+46
-31
lines changed
 

‎python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
* *
1717
***************************************************************************
1818
"""
19+
from processing.script.ScriptUtils import ScriptUtils
20+
import os
1921

2022

2123
__author__ = 'Victor Olaya'
@@ -114,6 +116,8 @@
114116

115117
class QGISAlgorithmProvider(AlgorithmProvider):
116118

119+
_icon = QIcon(':/processing/images/qgis.png')
120+
117121
def __init__(self):
118122
AlgorithmProvider.__init__(self)
119123
self.alglist = [SumLines(), PointsInPolygon(),
@@ -166,6 +170,13 @@ def __init__(self):
166170
# RasterLayerHistogram(), MeanAndStdDevPlot(),
167171
# BarPlot(), PolarPlot()
168172
]
173+
174+
folder = os.path.join(os.path.dirname(__file__), 'scripts')
175+
scripts = ScriptUtils.loadFromFolder(folder)
176+
for script in scripts:
177+
script._icon = self._icon
178+
script.allowEdit = False
179+
self.alglist.extend(scripts)
169180

170181
def initializeSettings(self):
171182
AlgorithmProvider.initializeSettings(self)
@@ -180,7 +191,7 @@ def getDescription(self):
180191
return 'QGIS geoalgorithms'
181192

182193
def getIcon(self):
183-
return QIcon(':/processing/images/qgis.png')
194+
return self._icon
184195

185196
def _loadAlgorithms(self):
186197
self.algs = self.alglist

‎python/plugins/processing/gui/DeleteScriptAction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def __init__(self, scriptType):
4646

4747
def isEnabled(self):
4848
if self.scriptType == self.SCRIPT_PYTHON:
49-
return isinstance(self.alg, ScriptAlgorithm)
49+
return isinstance(self.alg, ScriptAlgorithm) and self.alg.allowEdit
5050
elif self.scriptType == self.SCRIPT_R:
5151
return isinstance(self.alg, RAlgorithm)
5252

‎python/plugins/processing/gui/EditScriptAction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def __init__(self, scriptType):
4242

4343
def isEnabled(self):
4444
if self.scriptType == ScriptEditorDialog.SCRIPT_PYTHON:
45-
return isinstance(self.alg, ScriptAlgorithm)
45+
return isinstance(self.alg, ScriptAlgorithm) and self.alg.allowEdit
4646
elif self.scriptType == ScriptEditorDialog.SCRIPT_R:
4747
return isinstance(self.alg, RAlgorithm)
4848

‎python/plugins/processing/script/ScriptAlgorithm.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555

5656
class ScriptAlgorithm(GeoAlgorithm):
5757

58+
_icon = QtGui.QIcon(os.path.dirname(__file__) + '/../images/script.png')
59+
5860
def __init__(self, descriptionFile, script=None):
5961
"""The script parameter can be used to directly pass the code
6062
of the script without a file.
@@ -65,6 +67,7 @@ def __init__(self, descriptionFile, script=None):
6567

6668
GeoAlgorithm.__init__(self)
6769
self.script = script
70+
self.allowEdit = True
6871
self.descriptionFile = descriptionFile
6972
if script is not None:
7073
self.defineCharacteristicsFromScript()
@@ -77,7 +80,7 @@ def getCopy(self):
7780
return newone
7881

7982
def getIcon(self):
80-
return QtGui.QIcon(os.path.dirname(__file__) + '/../images/script.png')
83+
return self._icon
8184

8285
def defineCharacteristicsFromFile(self):
8386
self.script = ''

‎python/plugins/processing/script/ScriptAlgorithmProvider.py

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,21 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
import os.path
2928
from PyQt4.QtCore import *
3029
from PyQt4.QtGui import *
3130
from processing.core.ProcessingConfig import ProcessingConfig, Setting
32-
from processing.core.ProcessingLog import ProcessingLog
3331
from processing.core.AlgorithmProvider import AlgorithmProvider
3432
from processing.gui.EditScriptAction import EditScriptAction
3533
from processing.gui.DeleteScriptAction import DeleteScriptAction
3634
from processing.gui.CreateNewScriptAction import CreateNewScriptAction
37-
from processing.script.ScriptAlgorithm import ScriptAlgorithm
3835
from processing.script.ScriptUtils import ScriptUtils
39-
from processing.script.WrongScriptException import WrongScriptException
4036
from processing.script.AddScriptFromFileAction import AddScriptFromFileAction
4137
from processing.gui.GetScriptsAndModels import GetScriptsAction
4238
import processing.resources_rc
4339

4440

4541
class ScriptAlgorithmProvider(AlgorithmProvider):
46-
42+
4743
def __init__(self):
4844
AlgorithmProvider.__init__(self)
4945
self.actions.extend([CreateNewScriptAction('Create new script',
@@ -76,24 +72,6 @@ def getDescription(self):
7672

7773
def _loadAlgorithms(self):
7874
folder = ScriptUtils.scriptsFolder()
79-
self.loadFromFolder(folder)
80-
folder = os.path.join(os.path.dirname(__file__), 'scripts')
81-
self.loadFromFolder(folder)
75+
self.algs = ScriptUtils.loadFromFolder(folder)
76+
8277

83-
def loadFromFolder(self, folder):
84-
if not os.path.exists(folder):
85-
return
86-
for path, subdirs, files in os.walk(folder):
87-
for descriptionFile in files:
88-
if descriptionFile.endswith('py'):
89-
try:
90-
fullpath = os.path.join(path, descriptionFile)
91-
alg = ScriptAlgorithm(fullpath)
92-
if alg.name.strip() != '':
93-
self.algs.append(alg)
94-
except WrongScriptException, e:
95-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR, e.msg)
96-
except Exception, e:
97-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
98-
'Could not load script:' + descriptionFile + '\n'
99-
+ unicode(e))

‎python/plugins/processing/script/ScriptUtils.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@
2727

2828
import os
2929
from processing.core.ProcessingConfig import ProcessingConfig
30-
from processing.tools.system import *
31-
30+
from processing.script.ScriptAlgorithm import ScriptAlgorithm
31+
from processing.script.WrongScriptException import WrongScriptException
32+
from processing.core.ProcessingLog import ProcessingLog
33+
from processing.tools.system import mkdir, userFolder
3234

3335
class ScriptUtils:
3436

@@ -43,3 +45,24 @@ def scriptsFolder():
4345
mkdir(folder)
4446

4547
return os.path.abspath(folder)
48+
49+
@staticmethod
50+
def loadFromFolder(folder):
51+
if not os.path.exists(folder):
52+
return []
53+
algs = []
54+
for path, subdirs, files in os.walk(folder):
55+
for descriptionFile in files:
56+
if descriptionFile.endswith('py'):
57+
try:
58+
fullpath = os.path.join(path, descriptionFile)
59+
alg = ScriptAlgorithm(fullpath)
60+
if alg.name.strip() != '':
61+
algs.append(alg)
62+
except WrongScriptException, e:
63+
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR, e.msg)
64+
except Exception, e:
65+
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
66+
'Could not load script:' + descriptionFile + '\n'
67+
+ unicode(e))
68+
return algs

0 commit comments

Comments
 (0)
Please sign in to comment.