Plugins

Important

Plugins est une fonctionnalité expérimentale ! L’API peut changer.

Nous vous invitons à l’essayer et à nous faire part de vos commentaires.

Les plugins vous permettent d’étendre les fonctionnalités de Gaphor au-delà des fonctionnalités fournies dans les distributions standard. En particulier, les plugins peuvent être utiles si vous installez les distributions binaires disponibles sur la page de téléchargement.

Gaphor peut être étendu par des points d’entrée de plusieurs manières :

  1. Services d’application (globaux) (gaphor.appservices)

  2. Services spécifiques à la session (gaphor.services)

  3. Langues de modélisation (gaphor.modelinglanguages)

  4. Analyseurs de ligne de (sous-)commande (gaphor.argparsers)

  5. Modules chargés indirectement (gaphor.modules), principalement pour les composants de l’interface utilisateur

L’emplacement par défaut des plugins est $HOME/.local/gaphor/plugins-2 ($USER/.local/gaphor/plugins-2 sous Windows). Cet emplacement peut être modifié en définissant la variable d’environnement GAPHOR_PLUGIN_PATH et en pointant vers un répertoire.

Installer un plugin

Pour l’instant, Gaphor ne dispose pas de fonctionnalités intégrées permettant d’installer et de gérer des extensions. Pour installer une extension, utilisez pip à partir d’une installation Python sur votre ordinateur. Sous macOS et Linux, cela devrait être simple ; sous Windows, vous devrez peut-être installer Python séparément depuis python.org ou le Windows Store.

Important

  1. Comme les plugins sont installés avec la version Python de votre système, il est important qu’ils soient purement Python et ne contiennent pas de code C compilé.

  2. Si vous utilisez Gaphor installé via Flatpak, vous devez lui accorder l’accès aux fichiers utilisateur (filesystem=home) afin qu’il puisse trouver les fichiers dans votre dossier .local. Vous pouvez utiliser FlatSeal pour modifier les droits d’accès des applications Flatpak.

Par exemple : pour installer le plugin Hello World sur Linux et macOS, entrez :

pip install --target $HOME/.local/gaphor/plugins-2 git+https://github.com/gaphor/gaphor_plugin_helloworld.git

Ensuite, démarrez Gaphor comme vous le feriez normalement. Une nouvelle entrée Hello World a été ajoutée au menu des outils ( Icône de menu → Outils → Hello World).

Créez votre propre plugin

Si vous souhaitez écrire votre propre plugin, vous pouvez vous familiariser avec les principes de conception, l’architecture orientée services et le cadre orienté événements de Gaphor design principles, service oriented architecture, and event driven framework.

Exemple de plugin

Vous pouvez consulter le Hello World plugin disponible sur GitHub pour un exemple de création de votre propre plugin.

Le fichier pyproject.toml contient un plugin :

[tool.poetry.plugins."gaphor.services"]
"helloworld" = "gaphor_helloworld_plugin:HelloWorldPlugin"

Ceci fait référence à la classe HelloWorldPlugin dans le paquet/module gaphor_plugins_helloworld.

Voici une version dépouillée du plugin hello world :

from gaphor.abc import Service, ActionProvider
from gaphor.core import _, action

class HelloWorldPlugin(Service, ActionProvider):     # 1.

    def __init__(self, tools_menu):                  # 2.
        self.tools_menu = tools_menu
        tools_menu.add_actions(self)                 # 3.

    def shutdown(self):                              # 4.
        self.tools_menu.remove_actions(self)

    @action(                                         # 5.
        name="helloworld",
        label=_("Hello world"),
        tooltip=_("Every application…"),
    )
    def helloworld_action(self):
        main_window = self.main_window
        ...  # gtk code left out
  1. Comme indiqué précédemment, un plugin doit implémenter l’interface Service. Il implémente également l’interface ActionProvider, ce qui signifie qu’il a des actions à effectuer par l’utilisateur.

  2. L’entrée de menu fera partie du menu d’extension « Outils ». Ce point d’extension est créé en tant que service. D’autres services peuvent également être transmis en tant que dépendances. Les services peuvent obtenir des références à d’autres services en les définissant comme arguments du constructeur.

  3. Toutes les actions définies dans ce service sont enregistrées.

  4. Chaque service a une méthode shutdown(). Cela permet au service d’effectuer un certain nettoyage lorsqu’il est arrêté.

  5. L’action qui peut être invoquée. L’action est définie et sera récupérée par la méthode add_actions() (voir 3.)

FAQ sur le développement de plugins

Comment accéder aux services gaphor dans mon plugin ?

Les services de Gaphor peuvent être rendus accessibles en listant les noms des services dans la fonction init de votre classe de plugin. Cela nécessite également d’inclure Service en tant que classe de base. Dans l’exemple de HelloWorldPlugin, le service tools_menu est inclus.

Une description plus complète de cette approche est disponible sur la page de documentation de l’architecture orientée services.

Plugins développés par la communauté

Gaphor_Tools

Que fait-il ?

Il permet l’importation et l’exportation d’exigences et de notes SysML vers Excel et Confluence. Il en est actuellement au stade de la preuve de concept, mais il permet d’exporter un tableau d’exigences, puis de l’éditer et de l’importer en apportant toutes les modifications au modèle, de la même manière pour les notes sur les éléments.

Où puis-je l’obtenir ?

De ce BitBucket Repo