LeTTo Doc

Eigenes Plugin in Python erstellen

Ein Script wie setpluginname.bat im Java-Projekt gibt es im Python-Projekt nicht; Servicepfad und Namen werden von Hand angepasst. Die folgenden Schritte ergeben sich aus dem Aufbau des Projekts.

Voraussetzungen

1. Demoprojekt auschecken

git clone https://github.com/LeTTo-GmbH/plugin-demo-python.git

2. Servicepfad und Namen festlegen

Der Servicepfad ist der öffentliche Pfad des Plugins nach dem Servernamen (im Demo /plugindemopython) und muss am Server eindeutig sein. Er und die Namen kommen an mehreren Stellen vor und müssen überall gleich geändert werden:

Datei Anpassen
app/main.py CONF_STANDARD_SERVICEPATH, CONF_APPLICATION_NAME, CONF_PLUGIN_NAME, Standardwerte von NW_LETTO_ADDRESS und DOCKER_CONTAINER_NAME
yml/docker-service-plugindemopython.yml Dateiname, Projektname (name:), Service-Name, Image, hostname, container_name, Log-Verzeichnis, SERVICEPATH, network_letto_address, docker_container_name, letto_plugin_uri_intern, Ports (8209/5209 dürfen nicht mit anderen Plugins kollidieren)
proxy/plugindemopython.conf Dateiname, location /<servicepath>/, Variablenname und Ziel letto-<name>.nw-letto:8080
Dockerfile ENV SERVICEPATH
build.bat Image-Name und Name der yml-Datei
resources/index.html, Hilfedateien Links auf Swagger-UI und Quellcode
tests/ Pfade /plugindemopython/... in den Tests

Die Umgebungsvariable SERVICEPATH in der Compose-Datei hat Vorrang vor CONF_STANDARD_SERVICEPATH.

3. Plugin konfigurieren

In app/main.py die CONF_*-Konstanten setzen – Bedeutung siehe Plugin-API:

CONF_PLUGIN = "MeinPlugin"                        # Plugin-Typ in LeTTo
CONF_VERSION = "1.0"
CONF_INIT_JS = "initPluginMein"                   # JS-Methode für die Eingabe
CONF_CONFIG_JS = "configPluginMein"               # JS-Methode für den Konfigurationsdialog
CONF_HELPFILES = ["plugins/mein/Mein.html"]
CONF_JSLIBS = ["plugins/mein/meinScript.js", "plugins/mein/meinConfigScript.js"]

4. Plugin-Klasse programmieren

5. Plugin registrieren

REGISTERED_PLUGINS: Dict[str, str] = {
    CONF_PLUGIN: "Mein Plugin",
}

def create_plugin(typ: str, name: str, params: str) -> Optional[PluginDemo]:
    if typ == CONF_PLUGIN:
        return PluginDemo(name, params)
    return None

Für mehrere Plugins in einem Service weitere Einträge in REGISTERED_PLUGINS und weitere Fälle in create_plugin ergänzen. Die CONF_*-Konstanten gelten dann für alle Plugins des Services; Werte, die je Plugin verschieden sind, in die Plugin-Klasse verlegen.

6. Ressourcen anlegen

7. Testen, bauen, deployen

Referenz-Plugin (Python)