mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-23 00:03:02 -04:00
options should be available for certain model outputs and script algorithm outputs We do this by swapping the test for non-file based output support from checking only the algorithm's provider to instead checking on a parameter-by-parameter basis. This is done in order to support models. For models, depending on what child algorithm a model output is based off, an individual model may or may not have support for non-file based outputs. E.g a model may generate outputs from a native qgis alg (supporting these outputs) AND an output from a GDAL alg (with no support for these outputs). In this case we need to enable or disable the ui controls for non-file based outputs on an individual output basis. For scripts (for now) we blindly just say all outputs support non-file based formats. This is going to be the case most of the time, since scripts will usually be written using PyQGIS API. For the exceptions (e.g. scripts which call other algs like GDAL algs) we probably should add some way for the script to indicate whether an individual output supports this, but for now we just say they all do. Fixes #17949
109 lines
4.5 KiB
Python
109 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
***************************************************************************
|
|
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'
|
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
|
|
__revision__ = '$Format:%H$'
|
|
|
|
import os
|
|
|
|
from qgis.core import (QgsApplication,
|
|
QgsProcessingProvider)
|
|
|
|
from processing.core.ProcessingConfig import ProcessingConfig, Setting
|
|
from processing.gui.EditScriptAction import EditScriptAction
|
|
from processing.gui.DeleteScriptAction import DeleteScriptAction
|
|
from processing.gui.CreateNewScriptAction import CreateNewScriptAction
|
|
from processing.script.ScriptUtils import ScriptUtils
|
|
from processing.script.AddScriptFromFileAction import AddScriptFromFileAction
|
|
from processing.gui.GetScriptsAndModels import GetScriptsAction
|
|
from processing.gui.ProviderActions import (ProviderActions,
|
|
ProviderContextMenuActions)
|
|
from processing.script.CreateScriptCollectionPluginAction import CreateScriptCollectionPluginAction
|
|
|
|
pluginPath = os.path.split(os.path.dirname(__file__))[0]
|
|
|
|
|
|
class ScriptAlgorithmProvider(QgsProcessingProvider):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.algs = []
|
|
self.folder_algorithms = []
|
|
self.actions = [CreateNewScriptAction('Create new script',
|
|
CreateNewScriptAction.SCRIPT_PYTHON),
|
|
AddScriptFromFileAction(),
|
|
GetScriptsAction(),
|
|
CreateScriptCollectionPluginAction()]
|
|
self.contextMenuActions = \
|
|
[EditScriptAction(EditScriptAction.SCRIPT_PYTHON),
|
|
DeleteScriptAction(DeleteScriptAction.SCRIPT_PYTHON)]
|
|
|
|
def load(self):
|
|
ProcessingConfig.settingIcons[self.name()] = self.icon()
|
|
ProcessingConfig.addSetting(Setting(self.name(),
|
|
ScriptUtils.SCRIPTS_FOLDER,
|
|
self.tr('Scripts folder', 'ScriptAlgorithmProvider'),
|
|
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_FOLDER)
|
|
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', 'ScriptAlgorithmProvider')
|
|
|
|
def loadAlgorithms(self):
|
|
self.algs = []
|
|
folders = ScriptUtils.scriptsFolders()
|
|
for f in folders:
|
|
self.algs.extend(ScriptUtils.loadFromFolder(f))
|
|
self.algs.extend(self.folder_algorithms)
|
|
for a in self.algs:
|
|
self.addAlgorithm(a)
|
|
|
|
def addAlgorithmsFromFolder(self, folder):
|
|
self.folder_algorithms.extend(ScriptUtils.loadFromFolder(folder))
|
|
|
|
def supportsNonFileBasedOutput(self):
|
|
# TODO - this may not be strictly true. We probably need a way for scripts
|
|
# to indicate whether individual outputs support non-file based outputs,
|
|
# but for now allow it. At best we expose nice features to users, at worst
|
|
# they'll get an error if they use them with incompatible outputs...
|
|
return True
|