[processing] ressurect 'add from file' action

This commit is contained in:
Alexander Bruy 2018-01-29 19:13:49 +02:00
parent b747a6b50c
commit 7115e044e3

View File

@ -26,55 +26,42 @@ __copyright__ = '(C) 201, Victor Olaya'
__revision__ = '$Format:%H$' __revision__ = '$Format:%H$'
import os import os
import shutil
from qgis.PyQt.QtWidgets import QFileDialog, QMessageBox from qgis.PyQt.QtWidgets import QFileDialog
from qgis.PyQt.QtCore import QFileInfo
from qgis.core import QgsApplication, QgsSettings from qgis.core import QgsApplication, QgsMessageLog, QgsSettings
from processing.gui.ToolboxAction import ToolboxAction from processing.gui.ToolboxAction import ToolboxAction
from processing.script.ScriptAlgorithm import ScriptAlgorithm
from processing.script.WrongScriptException import WrongScriptException
from processing.script import ScriptUtils from processing.script import ScriptUtils
pluginPath = os.path.split(os.path.dirname(__file__))[0]
class AddScriptFromFileAction(ToolboxAction): class AddScriptFromFileAction(ToolboxAction):
def __init__(self): def __init__(self):
self.name = self.tr('Add script from file') self.name = self.tr("Add script from file")
self.group = self.tr('Tools') self.group = self.tr("Tools")
def getIcon(self):
return QgsApplication.getThemeIcon("/processingScript.svg")
def execute(self): def execute(self):
settings = QgsSettings() settings = QgsSettings()
lastDir = settings.value('Processing/lastScriptsDir', '') lastDir = settings.value("processing/lastScriptsDir", "")
filenames, selected_filter = QFileDialog.getOpenFileNames(self.toolbox, files, _ = QFileDialog.getOpenFileNames(self.toolbox,
self.tr('Script files'), self.tr("Script file"),
lastDir, lastDir,
self.tr('Script files (*.py *.PY)')) self.tr("Script files (*.py *.PY)"))
if filenames: if files:
validAlgs = 0 settings.setValue("processing/lastScriptsDir", os.path.dirname(files[0]))
wrongAlgs = []
for filename in filenames: valid = 0
for f in files:
try: try:
settings.setValue('Processing/lastScriptsDir', shutil.copy(f, ScriptUtils.scriptsFolders()[0])
QFileInfo(filename).absoluteDir().absolutePath()) valid += 1
script = ScriptAlgorithm(filename) except OSError as e:
destFilename = os.path.join(ScriptUtils.scriptsFolders()[0], os.path.basename(filename)) QgsMessageLog.logMessage("Could not copy script '{}'\n{}".format(s, str(e)),
with open(destFilename, 'w') as f: "Processing",
f.write(script.script) QgsMessageLog.WARNING)
validAlgs += 1
except WrongScriptException: if valid > 0:
wrongAlgs.append(os.path.basename(filename)) QgsApplication.processingRegistry().providerById("script").refreshAlgorithms()
if validAlgs:
QgsApplication.processingRegistry().providerById('script').refreshAlgorithms()
if wrongAlgs:
QMessageBox.warning(self.toolbox,
self.tr('Error reading scripts'),
self.tr('The following files do not contain a valid script:\n') +
"\n- ".join(wrongAlgs))