mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-01 00:46:20 -05:00
Contains variables for model parameters, algorithm results for other child algorithms which are not dependent on the algorithm. Allows removal of final pieces of ModelerAlgorithm code
123 lines
5.2 KiB
Python
123 lines
5.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
***************************************************************************
|
|
ModelerAlgorithmProvider.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.PyQt.QtXml import QDomDocument
|
|
|
|
from qgis.core import (QgsApplication,
|
|
QgsProcessingProvider,
|
|
QgsMessageLog,
|
|
QgsProcessingModelAlgorithm,
|
|
QgsProcessingUtils,
|
|
QgsXmlUtils)
|
|
|
|
from processing.core.ProcessingConfig import ProcessingConfig, Setting
|
|
from processing.modeler.ModelerUtils import ModelerUtils
|
|
from processing.modeler.WrongModelException import WrongModelException
|
|
from processing.modeler.EditModelAction import EditModelAction
|
|
from processing.modeler.CreateNewModelAction import CreateNewModelAction
|
|
from processing.modeler.DeleteModelAction import DeleteModelAction
|
|
from processing.modeler.AddModelFromFileAction import AddModelFromFileAction
|
|
from processing.gui.GetScriptsAndModels import GetModelsAction
|
|
from processing.gui.ProviderActions import (ProviderActions,
|
|
ProviderContextMenuActions)
|
|
|
|
pluginPath = os.path.split(os.path.dirname(__file__))[0]
|
|
|
|
|
|
class ModelerAlgorithmProvider(QgsProcessingProvider):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.actions = [CreateNewModelAction(), AddModelFromFileAction(), GetModelsAction()]
|
|
self.contextMenuActions = [EditModelAction(), DeleteModelAction()]
|
|
self.algs = []
|
|
|
|
# must reload models if providers list is changed - previously unavailable algorithms
|
|
# which models depend on may now be available
|
|
QgsApplication.processingRegistry().providerAdded.connect(self.refreshAlgorithms)
|
|
|
|
def load(self):
|
|
ProcessingConfig.settingIcons[self.name()] = self.icon()
|
|
ProcessingConfig.addSetting(Setting(self.name(),
|
|
ModelerUtils.MODELS_FOLDER, self.tr('Models folder', 'ModelerAlgorithmProvider'),
|
|
ModelerUtils.defaultModelsFolder(), valuetype=Setting.MULTIPLE_FOLDERS))
|
|
ProviderActions.registerProviderActions(self, self.actions)
|
|
ProviderContextMenuActions.registerProviderContextMenuActions(self.contextMenuActions)
|
|
ProcessingConfig.readSettings()
|
|
self.refreshAlgorithms()
|
|
return True
|
|
|
|
def unload(self):
|
|
ProviderActions.deregisterProviderActions(self)
|
|
ProviderContextMenuActions.deregisterProviderContextMenuActions(self.contextMenuActions)
|
|
|
|
def modelsFolder(self):
|
|
return ModelerUtils.modelsFolders()[0]
|
|
|
|
def name(self):
|
|
return self.tr('Models', 'ModelerAlgorithmProvider')
|
|
|
|
def id(self):
|
|
return 'model'
|
|
|
|
def icon(self):
|
|
return QgsApplication.getThemeIcon("/processingModel.svg")
|
|
|
|
def svgIconPath(self):
|
|
return QgsApplication.iconPath("processingModel.svg")
|
|
|
|
def loadAlgorithms(self):
|
|
self.algs = []
|
|
folders = ModelerUtils.modelsFolders()
|
|
for f in folders:
|
|
self.loadFromFolder(f)
|
|
for a in self.algs:
|
|
self.addAlgorithm(a)
|
|
|
|
def loadFromFolder(self, folder):
|
|
if not os.path.exists(folder):
|
|
return
|
|
for path, subdirs, files in os.walk(folder):
|
|
for descriptionFile in files:
|
|
if descriptionFile.endswith('model3'):
|
|
try:
|
|
fullpath = os.path.join(path, descriptionFile)
|
|
|
|
alg = QgsProcessingModelAlgorithm()
|
|
if alg.fromFile(fullpath):
|
|
if alg.name():
|
|
alg.setSourceFilePath(fullpath)
|
|
self.algs.append(alg)
|
|
else:
|
|
QgsMessageLog.logMessage(self.tr('Could not load model {0}', 'ModelerAlgorithmProvider').format(descriptionFile),
|
|
self.tr('Processing'), QgsMessageLog.CRITICAL)
|
|
except WrongModelException as e:
|
|
QgsMessageLog.logMessage(self.tr('Could not load model {0}\n{1}', 'ModelerAlgorithmProvider').format(descriptionFile, e.msg),
|
|
self.tr('Processing'), QgsMessageLog.CRITICAL)
|