Erstellen von Python-Skripts
In diesem Abschnitt werden folgenden Punkte beschrieben:
•Übergeben eines Python-Skripts an RaptorXML Server
•Python-Eintrittspunktfunktionen
•Vereinfachte Struktur eines Python-Skripts
•Die Python-Eintrittspunktfunktion im Detail
Python-Version
Vom Benutzer erstellte Python-Skripts müssen mindestens mit Python 3.3.1 kompatibel sein.
Python-Skripts sicher machen
Wenn ein Python-Skript in einem Befehl über HTTP an RaptorXML+XBRL Server adressiert ist, funktioniert das Skript nur, wenn es sich im vertrauenswürdigen Verzeichnis befindet. Das Skript wird vom vertrauenswürdigen Verzeichnis aus ausgeführt. Wenn Sie ein Python-Skript aus einem anderen Verzeichnis definieren, wird ein Fehler ausgegeben. Das vertrauenswürdige Verzeichnis wird in der server.script-root-dir Einstellung der Serverkonfigurationsdatei definiert. Wenn Sie Python-Skripts verwenden möchten, muss ein vertrauenswürdiges Verzeichnis definiert werden. Stellen Sie sicher, dass alle Python-Skripts, die verwendet werden sollen, in diesem Verzeichnis gespeichert werden.
Zwar werden alle vom Server für HTTP-Auftragsanforderungen generierten Ausgabedateien in das Auftragsausgabeverzeichnis (ein Unterverzeichnis von output-root-directory) geschrieben, doch gilt diese Einschränkung nicht für Python-Skripts, die in jeden Ordner geschrieben werden können. Der Server-Administrator muss die Python-Skripts im vertrauenswürdigen Verzeichnis auf potentielle Schwachstellen überprüfen.
Übergeben eines Python-Skripts an RaptorXML+XBRL Server
Ein Python-Skript wird mit dem --script-Parameter der folgenden Befehle übergeben:
Diese Befehle können über die Befehlszeilenschnittstelle oder die HTTP-Schnittstelle verwendet werden. Ein Beispiel dazu finden Sie im Abschnitt Ausführen von Python-Skripts.
Python-Eintrittspunktfunktionen
Die Befehle, die Zugriff auf die Python-Schnittstelle gestatten (siehe Liste oben), sind Validierungsbefehle und das Python-Skript wird nur dann ausgeführt, wenn die mit dem Befehl übergebenen Dateien gültig sind. Nachdem die Validierung erfolgreich ausgeführt wurde, ruft RaptorXML+XBRL Server je nachdem, welcher Befehl ausgeführt wurde, eine bestimmte Funktion auf. Die aufgerufene Funktion (siehe Tabelle unten) muss daher im Python-Skript definiert sein. Sie muss mit zwei Parametern definiert sein: der erste ist das Auftragsobjekt, der zweite ist abhängig davon, welcher Befehl ausgeführt wurde (siehe Tabelle).
Befehl | Von RaptorXML+XBRL Server aufgerufene Funktion |
on_xsi_valid(job,instance) | |
on_xsd_valid(job,schema) | |
on_dts_valid(job,dts) | |
on_xbrl_valid(job,instance) |
Vereinfachte Struktur des Python-Skripts
Ein Python-Skript, über das auf die Python-Schnittstelle zugegriffen wird, hat die folgende grundlegende Struktur. Beachten Sie, wie die Python-Eintrittspunktfunktion definiert ist.
1 | import os from altova import xml, xsd, xbrl |
2 | def on_xsi_valid(job,instance): filename = os.path.join(job.output_dir,'script_out.txt') job.append_output_filename(filename) f = open(filename,'w') f.write(str(type(job))+'\n') f.write(str(job)+'\n') f.write(job.output_dir+'\n') f.close() filename2 = os.path.join(job.output_dir,'script_out2.txt') job.append_output_filename(filename2) f2 = open(filename2,'w') print_instance(f2,instance) f2.close() |
3 | CodeBlock-1 ... CodeBlock-N |
Beschreibung der Struktur des obigen Skripts:
1 | Importiert das vordefinierte os Modul von Python und anschließend das xml, xsd, xbrl-Modul der Altova-Bibliothek. |
2 | Die Python-Eintrittspunktfunktion (siehe unten). Dabei könnte es sich um eine der folgenden handeln: on_xsi_valid(job,instance), on_xsd_valid(job,schema), |
3 | Zusätzliche Codeblöcke, von denen jeder Funktionsdefinitionen oder anderen Code enthält. |
Die Python-Eintrittspunktfunktion im Detail
In diesem Abschnitt werden anhand der folgenden Eintrittspunktfunktionsdefinition wichtige Punkte zur Python-Eintrittspunktfunktion erläutert.
def on_xsi_valid(job,instance):
filename = os.path.join(job.output_dir,'script_out.txt')
job.append_output_filename(filename)
f = open(filename,'w')
f.write(str(type(job))+'\n')
f.write(str(job)+'\n')
f.write(job.output_dir+'\n')
f.close()
filename2 = os.path.join(job.output_dir,'script_out2.txt')
job.append_output_filename(filename2)
f2 = open(filename2,'w')
print_instance(f2,instance)
f2.close
•Die Zeile def on_xsi_valid(job,instance): beginnt den Funktionsdefinitionsblock.
•Die Funktion hat den Namen on_xsi_valid(job,instance) und erhält zwei Argumente: job und instance.
•Dies ist die Funktion, die aufgerufen wird, nachdem RaptorXML+XBRL Server den Befehl valxml-withxsd (xsi) erfolgreich ausgeführt und die angegebene(n) XML-Datei(en) als gültig validiert hat.
•Die Werte der Argumente job und instance werden von RaptorXML+XBRL Server bereitgestellt.
•Der Wert der Variablen filename wird mit Hilfe von job.output_dir konstruiert. Der Wert von job.output_dir ist bei Verwendung der HTTP-Schnittstelle in der Server-Konfigurationsdatei definiert. Bei Verwendung des CLI ist er im Arbeitsverzeichnis definiert.
•Die Funktion job.append_output_filename hängt einen Dateinamen an die Auftragsausgabe an.