123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- """
- ***************************************************************************
- ScriptAlgorithmProvider.py
- ---------------------
- Date : August 2012
- Copyright : (C) 2012 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. *
- * *
- ***************************************************************************
- """
- __author__ = 'Victor Olaya'
- __date__ = 'August 2012'
- __copyright__ = '(C) 2012, Victor Olaya'
- import os
- from qgis.core import (Qgis,
- QgsMessageLog,
- QgsApplication,
- QgsProcessingProvider,
- QgsRuntimeProfiler)
- from processing.core.ProcessingConfig import ProcessingConfig, Setting
- from processing.gui.ProviderActions import (ProviderActions,
- ProviderContextMenuActions)
- from processing.script.AddScriptFromFileAction import AddScriptFromFileAction
- from processing.script.CreateNewScriptAction import CreateNewScriptAction
- from processing.script.AddScriptFromTemplateAction import AddScriptFromTemplateAction
- from processing.script.DeleteScriptAction import DeleteScriptAction
- from processing.script.EditScriptAction import EditScriptAction
- from processing.script.OpenScriptFromFileAction import OpenScriptFromFileAction
- from processing.script import ScriptUtils
- from processing.tools.system import userFolder
- class ScriptAlgorithmProvider(QgsProcessingProvider):
- def __init__(self):
- super().__init__()
- self.algs = []
- self.additional_algorithm_classes = []
- self.actions = [CreateNewScriptAction(),
- AddScriptFromTemplateAction(),
- OpenScriptFromFileAction(),
- AddScriptFromFileAction()
- ]
- self.contextMenuActions = [EditScriptAction(),
- DeleteScriptAction()]
- def load(self):
- with QgsRuntimeProfiler.profile('Script Provider'):
- ProcessingConfig.settingIcons[self.name()] = self.icon()
- ProcessingConfig.addSetting(Setting(self.name(),
- ScriptUtils.SCRIPTS_FOLDERS,
- self.tr("Scripts folder(s)"),
- ScriptUtils.defaultScriptsFolder(),
- valuetype=Setting.MULTIPLE_FOLDERS))
- ProviderActions.registerProviderActions(self, self.actions)
- ProviderContextMenuActions.registerProviderContextMenuActions(self.contextMenuActions)
- ProcessingConfig.readSettings()
- self.refreshAlgorithms()
- return True
- def unload(self):
- ProcessingConfig.removeSetting(ScriptUtils.SCRIPTS_FOLDERS)
- ProviderActions.deregisterProviderActions(self)
- ProviderContextMenuActions.deregisterProviderContextMenuActions(self.contextMenuActions)
- def icon(self):
- return QgsApplication.getThemeIcon("/processingScript.svg")
- def svgIconPath(self):
- return QgsApplication.iconPath("processingScript.svg")
- def id(self):
- return "script"
- def name(self):
- return self.tr("Scripts")
- def supportsNonFileBasedOutput(self):
-
-
-
-
- return True
- def add_algorithm_class(self, algorithm_class):
- """
- Adds an algorithm class to the provider
- """
- self.additional_algorithm_classes.append(algorithm_class)
- self.refreshAlgorithms()
- def loadAlgorithms(self):
- self.algs = []
- folders = ScriptUtils.scriptsFolders()
-
- defaultScriptFolder = ScriptUtils.defaultScriptsFolder()
- if defaultScriptFolder not in folders:
- folders.append(defaultScriptFolder)
-
- for folder in folders:
- folder = ScriptUtils.resetScriptFolder(folder)
- if not folder:
- continue
- for path, subdirs, files in os.walk(folder):
- for entry in files:
- if entry.lower().endswith(".py"):
- moduleName = os.path.splitext(os.path.basename(entry))[0]
- filePath = os.path.abspath(os.path.join(path, entry))
- alg = ScriptUtils.loadAlgorithm(moduleName, filePath)
- if alg is not None:
- self.algs.append(alg)
- for alg_class in self.additional_algorithm_classes:
- self.algs.append(alg_class())
- for a in self.algs:
- self.addAlgorithm(a)
|