mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
[sextante] reintroduced Model->Python conversion
This commit is contained in:
parent
f451d24015
commit
ffa87a2d88
@ -16,6 +16,7 @@
|
|||||||
* *
|
* *
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'Victor Olaya'
|
__author__ = 'Victor Olaya'
|
||||||
__date__ = 'August 2012'
|
__date__ = 'August 2012'
|
||||||
__copyright__ = '(C) 2012, Victor Olaya'
|
__copyright__ = '(C) 2012, Victor Olaya'
|
||||||
@ -26,6 +27,7 @@ from PyQt4.QtCore import *
|
|||||||
from PyQt4.QtGui import *
|
from PyQt4.QtGui import *
|
||||||
import os.path
|
import os.path
|
||||||
from sextante.core.SextanteConfig import SextanteConfig, Setting
|
from sextante.core.SextanteConfig import SextanteConfig, Setting
|
||||||
|
from sextante.modeler.SaveAsPythonScriptAction import SaveAsPythonScriptAction
|
||||||
from sextante.core.SextanteLog import SextanteLog
|
from sextante.core.SextanteLog import SextanteLog
|
||||||
from sextante.modeler.ModelerUtils import ModelerUtils
|
from sextante.modeler.ModelerUtils import ModelerUtils
|
||||||
from sextante.modeler.ModelerAlgorithm import ModelerAlgorithm
|
from sextante.modeler.ModelerAlgorithm import ModelerAlgorithm
|
||||||
@ -41,7 +43,7 @@ class ModelerAlgorithmProvider(AlgorithmProvider):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
AlgorithmProvider.__init__(self)
|
AlgorithmProvider.__init__(self)
|
||||||
self.actions = [CreateNewModelAction()]
|
self.actions = [CreateNewModelAction()]
|
||||||
self.contextMenuActions = [EditModelAction(), DeleteModelAction()]
|
self.contextMenuActions = [EditModelAction(), DeleteModelAction(), SaveAsPythonScriptAction()]
|
||||||
|
|
||||||
def initializeSettings(self):
|
def initializeSettings(self):
|
||||||
AlgorithmProvider.initializeSettings(self)
|
AlgorithmProvider.initializeSettings(self)
|
||||||
|
116
python/plugins/sextante/modeler/SaveAsPythonScriptAction.py
Normal file
116
python/plugins/sextante/modeler/SaveAsPythonScriptAction.py
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
***************************************************************************
|
||||||
|
SaveAsPythonScriptAction.py
|
||||||
|
---------------------
|
||||||
|
Date : April 2013
|
||||||
|
Copyright : (C) 2013 by Victor Olaya
|
||||||
|
Email : volayaf at gmail dot com
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
"""
|
||||||
|
import sys
|
||||||
|
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
|
||||||
|
|
||||||
|
__author__ = 'Victor Olaya'
|
||||||
|
__date__ = 'April 2013'
|
||||||
|
__copyright__ = '(C) 2013, Victor Olaya'
|
||||||
|
# This will get replaced with a git SHA1 when you do a git archive
|
||||||
|
__revision__ = '$Format:%H$'
|
||||||
|
|
||||||
|
from sextante.gui.ContextAction import ContextAction
|
||||||
|
from sextante.modeler.ModelerAlgorithm import ModelerAlgorithm,\
|
||||||
|
AlgorithmAndParameter
|
||||||
|
from sextante.script.ScriptUtils import ScriptUtils
|
||||||
|
from PyQt4.QtCore import *
|
||||||
|
from PyQt4.QtGui import *
|
||||||
|
|
||||||
|
class SaveAsPythonScriptAction(ContextAction):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.name="Save as Python script"
|
||||||
|
|
||||||
|
def isEnabled(self):
|
||||||
|
return isinstance(self.alg, ModelerAlgorithm)
|
||||||
|
|
||||||
|
def execute(self):
|
||||||
|
filename = str(QFileDialog.getSaveFileName(None, "Save Script", ScriptUtils.scriptsFolder(), "Python scripts (*.py)"))
|
||||||
|
|
||||||
|
if filename:
|
||||||
|
if not filename.endswith(".py"):
|
||||||
|
filename += ".py"
|
||||||
|
text = self.translateToPythonCode(self.alg)
|
||||||
|
try:
|
||||||
|
fout = open(filename, "w")
|
||||||
|
fout.write(text)
|
||||||
|
fout.close()
|
||||||
|
if filename.replace("\\","/").startswith(ScriptUtils.scriptsFolder().replace("\\","/")):
|
||||||
|
self.toolbox.updateTree()
|
||||||
|
except:
|
||||||
|
QMessageBox.warning(self,
|
||||||
|
self.tr("I/O error"),
|
||||||
|
self.tr("Unable to save edits. Reason:\n %1").arg(unicode(sys.exc_info()[1]))
|
||||||
|
)
|
||||||
|
|
||||||
|
def translateToPythonCode(self, model):
|
||||||
|
s = ["##" + model.name + "=name"]
|
||||||
|
for param in model.parameters:
|
||||||
|
s.append(str(param.getAsScriptCode().lower()))
|
||||||
|
i = 0
|
||||||
|
for outs in model.algOutputs:
|
||||||
|
for out in outs.keys():
|
||||||
|
if outs[out]:
|
||||||
|
s.append("##" + out.lower() + "_alg" + str(i) +"=" + model.getOutputType(i, out))
|
||||||
|
i += 1
|
||||||
|
i = 0
|
||||||
|
iMultiple = 0
|
||||||
|
for alg in model.algs:
|
||||||
|
multiple= []
|
||||||
|
runline = "outputs_" + str(i) + "=Sextante.runalg(\"" + alg.commandLineName() + "\""
|
||||||
|
for param in alg.parameters:
|
||||||
|
aap = model.algParameters[i][param.name]
|
||||||
|
if aap == None:
|
||||||
|
runline += ", None"
|
||||||
|
elif isinstance(param, ParameterMultipleInput):
|
||||||
|
value = model.paramValues[aap.param]
|
||||||
|
tokens = value.split(";")
|
||||||
|
layerslist = []
|
||||||
|
for token in tokens:
|
||||||
|
iAlg, paramname = token.split("|")
|
||||||
|
if float(iAlg) == float(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM):
|
||||||
|
if model.ismodelparam(paramname):
|
||||||
|
value = paramname.lower()
|
||||||
|
else:
|
||||||
|
value = model.paramValues[paramname]
|
||||||
|
else:
|
||||||
|
value = "outputs_" + str(iAlg) + "['" + paramname +"']"
|
||||||
|
layerslist.append(str(value))
|
||||||
|
|
||||||
|
multiple.append("multiple_" + str(iMultiple) +"=[" + ",".join(layerslist) + "]")
|
||||||
|
runline +=", \";\".join(multiple_" + str(iMultiple) + ") "
|
||||||
|
else:
|
||||||
|
if float(aap.alg) == float(AlgorithmAndParameter.PARENT_MODEL_ALGORITHM):
|
||||||
|
if model.ismodelparam(aap.param):
|
||||||
|
runline += ", " + aap.param.lower()
|
||||||
|
else:
|
||||||
|
runline += ", " + str(model.paramValues[aap.param])
|
||||||
|
else:
|
||||||
|
runline += ", outputs_" + str(aap.alg) + "['" + aap.param +"']"
|
||||||
|
for out in alg.outputs:
|
||||||
|
value = model.algOutputs[i][out.name]
|
||||||
|
if value:
|
||||||
|
name = out.name.lower() + "_alg" + str(i)
|
||||||
|
else:
|
||||||
|
name = str(None)
|
||||||
|
runline += ", " + name
|
||||||
|
i += 1
|
||||||
|
s += multiple
|
||||||
|
s.append(str(runline + ")"))
|
||||||
|
return "\n".join(s)
|
Loading…
x
Reference in New Issue
Block a user