Blueprints für Commandline Applikationen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mosesontheweb

Hallo zusammen,

bin freudig auf dieses deutschsprachige Python-Forum gestoßen und möchte es gleich mit einer Frage füttern: kennt wer einen Weg, Applikationen auf der Kommandozeile zu entwickeln, die mit einem ähnlichen Mechanismus arbeiten wie Flask mit seinen Blueprints?

Die Frage kommt für mich nicht von ungefähr: ich habe für ein Projekt einen sogenannten ETL-Prozess mit Python umgesetzt, der eben Daten von A abholt und in B speichert, damit C sie weiterverarbeiten kann. Es geht hier vor allem um Daten, die in der Quelle linear und nicht vertikal gespeichert sind (ein Objekt hat mehrere Einträge aber immer für eine unterschiedliche Kategorie z.B. Ich aber brauche die Datensätze in einer Reihe angeordnet). Jetzt ist dieser Mechanismus etwas wackelig aus meiner Sicht. Ich verwende ein Haupt- und verschiedene Nebenkonfigurationsdateien, die Auskunft darüber geben, welches Modul da ist und auch aktiv ist.

Beispiel: in der Hauptkonfig ist angegeben, welche Module es gibt. In der (namentlich gleichlautenden) Nebenkonfigurationsdatei des Moduls, steht dann drinnen, welche Funktionen es gibt, in welcher Reihenfolge diese abgearbeitet werden sollen (bei Aufruf aller Funktionen) und ob diese aktiv ist, etc. Wenn ich allerdings von vornherein schon so etwas wie einen Blueprint-Ansatz hätte, bei dem ich das Modul schon alleine durch den Aufruf register_blueprint laden kann und danach aufrufe, wäre mir viel geholfen und wäre auch nicht mehr so fehleranfällig in der Konfigurationsdatei.

Aus Flask kenne ich solche Blueprints, allerdings ist mir ein passendes Modul oder Tutorial für einen gleichartigen Mechanismus außerhalb von Flask bisher nicht untergekommen.

Hat jemand hier schon einmal einen ähnlichen Ansatz verfolgt und gelöst?

Besten Dank im Voraus! Beste Grüße, Thomas
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Hast du schon einmal überlegt einfach den Flask Code zu lesen um zu verstehen wie Blueprints da implementiert sind?
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

mosesontheweb hat geschrieben: Montag 6. Mai 2019, 11:55 Hat jemand hier schon einmal einen ähnlichen Ansatz verfolgt und gelöst?
Leider nicht. Falls du aber an Alternativen zu deinem Blueprint-Ansatz interessiert bist, kannst du ja die Details deines Prozesses noch mal etwas ausführen: Was heißt denn überhaupt "wackelig" und was hat es mit den "aktiven" und "inaktiven" Modulen auf sich? Geht es einfach darum, dass du Verschiedene, teilweise von einander abhängige Einzelschritte hast, die koordiniert ausgeführt werden sollen?
mosesontheweb

DasIch hat geschrieben: Montag 6. Mai 2019, 19:25 Hast du schon einmal überlegt einfach den Flask Code zu lesen um zu verstehen wie Blueprints da implementiert sind?
Bereits einige Male schon, Einiges habe ich verstanden, anderes wiederum nicht - zugegeben. Warum?
mosesontheweb

nezzcarth hat geschrieben: Montag 6. Mai 2019, 20:00
mosesontheweb hat geschrieben: Montag 6. Mai 2019, 11:55 Hat jemand hier schon einmal einen ähnlichen Ansatz verfolgt und gelöst?
Leider nicht. Falls du aber an Alternativen zu deinem Blueprint-Ansatz interessiert bist, kannst du ja die Details deines Prozesses noch mal etwas ausführen: Was heißt denn überhaupt "wackelig" und was hat es mit den "aktiven" und "inaktiven" Modulen auf sich? Geht es einfach darum, dass du Verschiedene, teilweise von einander abhängige Einzelschritte hast, die koordiniert ausgeführt werden sollen?
Der derzeitige Ansatz ist, dass ich über ein erstes Konfigurationsfile Adaptionen anführe. Ist ein Array mit Namen wie abc oder def. Steht das in dem Array, dann kann das Modul ausgeführt werden. Dazu muss es eine abc.yml und ein abc.py geben. In abc.yml stehen diverse Settings, die für das Modul interessant sind, allen voran die Funktion. Der Abschnitt im .yml-File hat den gleichen Namen wie die Funktion im Modul, d.h. es gibt einen Abschnitt 'functions', unter dem sich dann die Funktionsnamen aus dem Modul befinden. Unter diesen wiederum stehen dann verschiedene Parameter, die für die Funktion notwendig sind.

Beispiel:

Code: Alles auswählen

functions:
       meine_function_1:
                 enabled: true
                 update: true
                 delete: true
                 unique_key: uuid
                 fields: ['field1', 'field2', ...]
D.h. das Konfigurationsfile muss immer synchron mit dem Modul stehen, sonst geht die Rechnung schon mal nicht auf. Der Aufruf erfolgt dann über ein dynamischen Laden des Moduls und der Funktion, die mittels Argument von der Kommandozeile angegeben werden.

Code: Alles auswählen

elias.py execute <adaption> <function>
Jetzt war die Idee, zumindest mal das Laden der jeweiligen Adaption mittels eines Blueprint-Mechanismus zu vereinfachen. Daher die Frage.

Aber den ersten Resonanzen nach bin ich scheinbar ein Depp, der schon nichts mehr sagen sollte .... sorry für Eure Zeit.

Beste Grüße, Thomas
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@mosesontheweb: ich verstehe noch nicht, was eigentlich das Problem ist, das Du lösen möchtest. Kannst Du ein minimales Beispiel geben, inklusive Code und Konfigurationen, das zeigt, was Du machen möchtest, und erklären, an welcher Stelle Dir das nicht gefällt.
mosesontheweb

Hat sich erledigt, ich verfolge das Thema nicht mehr weiter.

Gruß, Thomas
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

mosesontheweb hat geschrieben: Dienstag 7. Mai 2019, 08:25 Aber den ersten Resonanzen nach bin ich scheinbar ein Depp, der schon nichts mehr sagen sollte .... sorry für Eure Zeit.
....
Hat sich erledigt, ich verfolge das Thema nicht mehr weiter.
Nein, das hat doch keiner gesagt. Schade, dass du scheinbar abgeschreckt bist. Ich muss zugeben, dass ich nicht ganz nachvollziehen kann, was diese Reaktion ausgelöst hast. Der Umgangston hier im Forum kann zwar manchmal etwas direkt sein, aber in diesem Thread ging es nach meinem Empfinden doch recht sachlich zu.
Antworten