17. Créer une extension avec Processing

Depending on the kind of plugin that you are going to develop, it might be a better option to add its functionality as a Processing algorithm (or a set of them). That would provide a better integration within QGIS, additional functionality (since it can be run in the components of Processing, such as the modeler or the batch processing interface), and a quicker development time (since Processing will take of a large part of the work).

Pour distribuer ces algorithmes, vous devez créer un nouveau plugin qui les ajoute à la boîte à outils de traitement. Le plugin doit contenir un fournisseur d’algorithmes, qui doit être enregistré lors de l’instanciation du plugin.

17.1. Creating from scratch

Pour créer un plugin à partir de zéro qui contient un fournisseur d’algorithme, vous pouvez suivre ces étapes en utilisant Plugin Builder :

  1. Install the Plugin Builder plugin

  2. Créez une nouvelle extension à l’aide de Plugin Builder. Lorsque l’application vous demande le modèle à utiliser, sélectionnez « Processing Provider ».

  3. L’extension créée contient un fournisseur disposant d’un seul algorithme. Les fichiers du fournisseur et de l’algorithme sont correctement commentés et contiennent de l’information sur comment modifier le fournisseur et comment ajouter de nouveaux algorithmes. S’y référerer pour plus d’informations.

17.2. Updating a plugin

Si vous souhaitez ajouter votre extension à Processing, il vous faut@ ajouter un peu de code.

  1. In your metadata.txt file, you need to add a variable:

    hasProcessingProvider=yes
    
  2. Au sein du fichier Python qui contient la méthode initGui paramétrant votre extension, vous devez adapter quelques lignes comme suit :

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    from qgis.core import QgsApplication
    from processing_provider.provider import Provider
    
    class YourPluginName():
    
        def __init__(self):
            self.provider = None
    
        def initProcessing(self):
            self.provider = Provider()
            QgsApplication.processingRegistry().addProvider(self.provider)
    
        def initGui(self):
            self.initProcessing()
    
        def unload(self):
            QgsApplication.processingRegistry().removeProvider(self.provider)
    
  3. You can create a folder processing_provider with three files in it:

    • __init__.py with nothing in it. This is necessary to make a valid Python package.

    • provider.py which will create the Processing provider and expose your algorithms.

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      from qgis.core import QgsProcessingProvider
      
      from processing_provider.example_processing_algorithm import ExampleProcessingAlgorithm
      
      
      class Provider(QgsProcessingProvider):
      
          def loadAlgorithms(self, *args, **kwargs):
              self.addAlgorithm(ExampleProcessingAlgorithm())
              # add additional algorithms here
              # self.addAlgorithm(MyOtherAlgorithm())
      
          def id(self, *args, **kwargs):
              """The ID of your plugin, used for identifying the provider.
      
              This string should be a unique, short, character only string,
              eg "qgis" or "gdal". This string should not be localised.
              """
              return 'yourplugin'
      
          def name(self, *args, **kwargs):
              """The human friendly name of your plugin in Processing.
      
              This string should be as short as possible (e.g. "Lastools", not
              "Lastools version 1.0.1 64-bit") and localised.
              """
              return self.tr('Your plugin')
      
          def icon(self):
              """Should return a QIcon which is used for your provider inside
              the Processing toolbox.
              """
              return QgsProcessingProvider.icon(self)
      
    • example_processing_algorithm.py which contains the example algorithm file. Copy/paste the content of the script template file and update it according to your needs.

  4. Now you can reload your plugin in QGIS and you should see your example script in the Processing toolbox and modeler.