# -#- coding: utf-8 -#- ########################################################################### # __init__.py # --------------------- # Date : November 2018 # Copyright : (C) 2018 by Nathan Woodrow # Email : woodrow dot nathan 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. # # # ########################################################################### """ QGIS Processing Python additions. This module contains stable API adding additional Python specific functionality to the core QGIS c++ Processing classes. """ __author__ = 'Nathan Woodrow' __date__ = 'November 2018' __copyright__ = '(C) 2018, Nathan Woodrow' import typing as _typing from qgis.core import QgsProcessingAlgorithm as _QgsProcessingAlgorithm from qgis.core import QgsProcessingFeedback as _QgsProcessingFeedback from qgis.core import QgsProcessingContext as _QgsProcessingContext from .algfactory import ProcessingAlgFactory alg = ProcessingAlgFactory() # "Forward declare" functions which will be patched in when the Processing plugin loads: def algorithmHelp(id: str) -> None: """ Prints algorithm parameters with their types. Also provides information about parameters and outputs, and their acceptable values. :param id: An algorithm's ID, eg "native:buffer" :raises: QgsNotSupportedException if the Processing plugin has not been loaded """ from qgis.core import QgsNotSupportedException raise QgsNotSupportedException('Processing plugin has not been loaded') def run(algOrName: _typing.Union[str, _QgsProcessingAlgorithm], parameters: _typing.Dict[str, object], onFinish: _typing.Optional[_typing.Callable] = None, feedback: _typing.Optional[_QgsProcessingFeedback] = None, context: _typing.Optional[_QgsProcessingContext] = None, is_child_algorithm: bool = False) -> _typing.Union[_typing.Dict, None]: """ Executes given algorithm and returns its outputs as dictionary object. :param algOrName: Either an instance of an algorithm, or an algorithm's ID :param parameters: Algorithm parameters dictionary :param onFinish: optional function to run after the algorithm has completed :param feedback: Processing feedback object :param context: Processing context object :param is_child_algorithm: Set to True if this algorithm is being run as part of a larger algorithm, i.e. it is a sub-part of an algorithm which calls other Processing algorithms. :return: algorithm results as a dictionary, or None if execution failed :raises: QgsNotSupportedException if the Processing plugin has not been loaded """ from qgis.core import QgsNotSupportedException raise QgsNotSupportedException('Processing plugin has not been loaded') def runAndLoadResults(algOrName: _typing.Union[str, _QgsProcessingAlgorithm], parameters: _typing.Dict[str, object], feedback: _typing.Optional[_QgsProcessingFeedback] = None, context: _typing.Optional[_QgsProcessingContext] = None) -> _typing.Union[_typing.Dict, None]: """ Executes given algorithm and load its results into the current QGIS project when possible. :param algOrName: Either an instance of an algorithm, or an algorithm's ID :param parameters: Algorithm parameters dictionary :param feedback: Processing feedback object :param context: Processing context object :return: algorithm results as a dictionary, or None if execution failed :rtype: Union[dict, None] :raises: QgsNotSupportedException if the Processing plugin has not been loaded """ from qgis.core import QgsNotSupportedException raise QgsNotSupportedException('Processing plugin has not been loaded') def createAlgorithmDialog(algOrName: _typing.Union[str, _QgsProcessingAlgorithm], parameters: _typing.Dict[str, object] = {}) -> _typing.Union[str, _QgsProcessingAlgorithm]: """ Creates and returns an algorithm dialog for the specified algorithm, prepopulated with a given set of parameters. It is the caller's responsibility to execute and delete this dialog. :param algOrName: Either an instance of an algorithm, or an algorithm's ID :param parameters: Initial algorithm parameters dictionary :return: algorithm results as a dictionary, or None if execution failed :raises: QgsNotSupportedException if the Processing plugin has not been loaded """ from qgis.core import QgsNotSupportedException raise QgsNotSupportedException('Processing plugin has not been loaded') def execAlgorithmDialog(algOrName: _typing.Union[str, _QgsProcessingAlgorithm], parameters: _typing.Dict[str, object] = {}) -> _typing.Union[_typing.Dict, None]: """ Executes an algorithm dialog for the specified algorithm, prepopulated with a given set of parameters. :param algOrName: Either an instance of an algorithm, or an algorithm's ID :param parameters: Initial algorithm parameters dictionary :return: algorithm results as a dictionary, or None if execution failed :raises: QgsNotSupportedException if the Processing plugin has not been loaded """ from qgis.core import QgsNotSupportedException raise QgsNotSupportedException('Processing plugin has not been loaded') def createContext(feedback: _typing.Optional[_QgsProcessingFeedback] = None) -> _QgsProcessingContext: """ Creates a default processing context :param feedback: Optional existing QgsProcessingFeedback object, or None to use a default feedback object :type feedback: Optional[QgsProcessingFeedback] :returns: New QgsProcessingContext object :raises: QgsNotSupportedException if the Processing plugin has not been loaded """ from qgis.core import QgsNotSupportedException raise QgsNotSupportedException('Processing plugin has not been loaded')