add debug method to look for relevant paths, related to delta-barth/delta-barth-py#33
This commit is contained in:
+148
-126
@@ -88,6 +88,10 @@ namespace dopt.DeltaBarth
|
||||
/// </summary>
|
||||
protected dynamic pyModPipeline;
|
||||
/// <summary>
|
||||
/// Debug-Modul für Python-Umgebung
|
||||
/// </summary>
|
||||
protected dynamic pyDebug;
|
||||
/// <summary>
|
||||
/// Konstruktor der Plugin-Klasse.
|
||||
/// Kann mit beliebigem Pfad zu einer Python-Runtime initialisiert werden.
|
||||
/// </summary>
|
||||
@@ -100,141 +104,159 @@ namespace dopt.DeltaBarth
|
||||
{
|
||||
pyModManagement = Py.Import("delta_barth.management");
|
||||
pyModPipeline = Py.Import("delta_barth.pipelines");
|
||||
pyDebug = Py.Import("delta_barth._debug");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Initialisiert das Plugin mit allen relevanten Paramtern für die weitere Nutzung.
|
||||
/// Diese Methode sollte nur einmal je Instanz genutzt werden.
|
||||
/// Gibt Runtime-relevante Pfade in der Konsole aus
|
||||
/// </summary>
|
||||
/// <param name="datenPfad">Pfad zu einem Ordner, in dem Programmdaten ohne Bedenken dauerhaft abgelegt werden können.</param>
|
||||
/// <param name="basisApiUrl">Basis-URL zum Zugriff auf die API. Dies muss eine vollständige URL sein inkl. der Route "/api".</param>
|
||||
/// <param name="nutzername">Nutzername für die Datenbankanmeldung.</param>
|
||||
/// <param name="passwort">Passwort für die Datenbankanmeldung.</param>
|
||||
/// <param name="datenbank">Name der Datenbank, bei der die Anmeldung erfolgen soll.</param>
|
||||
/// <param name="mandant">Mandant für die Datenbankanmeldung.</param>
|
||||
public void Startup(string datenPfad, string basisApiUrl, string nutzername, string passwort, string datenbank, string mandant)
|
||||
public string DebugCall()
|
||||
{
|
||||
AssertNotDisposed();
|
||||
Setup(datenPfad, basisApiUrl);
|
||||
SetzeNutzerdaten(nutzername, passwort, datenbank, mandant);
|
||||
}
|
||||
/// <summary>
|
||||
/// Diese Methode erlaubt es, die relevanten Nutzerdaten zur Laufzeit des Plugins zu ändern.
|
||||
/// Dies beinhaltet: Nutzername, Passwort, Datenbankname, Mandant
|
||||
/// </summary>
|
||||
/// <param name="nutzername">Nutzername für die Datenbankanmeldung.</param>
|
||||
/// <param name="passwort">Passwort für die Datenbankanmeldung.</param>
|
||||
/// <param name="datenbank">Name der Datenbank, bei der die Anmeldung erfolgen soll.</param>
|
||||
/// <param name="mandant">Mandant für die Datenbankanmeldung.</param>
|
||||
public void SetzeNutzerdaten(string nutzername, string passwort, string datenbank, string mandant)
|
||||
{
|
||||
AssertNotDisposed();
|
||||
using (Py.GIL()) {
|
||||
pyModManagement.set_credentials(nutzername, passwort, datenbank, mandant);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Ausführung der Umsatzprognose-Pipeline mit Dummy-Daten.
|
||||
/// Es werden keine API-Abrufe durchgeführt und somit auch keine Live-Daten genutzt.
|
||||
/// </summary>
|
||||
/// <param name="firmaId">optional: Firmen-ID, für die die Pipeline ausgeführt werden soll.
|
||||
/// Wird der Parameter nicht zur Verfügung gestellt, werden alle Firmen bzw. Kunden abgerufen</param>
|
||||
/// <param name="analyseBeginn">optional: Start-Datum, ab dem die Daten für die Erstellung des Prognosemodells genutzt werden.
|
||||
/// Daten, die weiter in der Vergangenheit liegen, werden nicht berücksichtigt.
|
||||
/// Wird der Parameter nicht zur Verfügung gestellt, wird die gesamte Historie genutzt.</param>
|
||||
/// <returns cref="DataObjects.UmsatzPrognoseAusgabe">Umsatzprognose inkl. Status-Objekt zur Nachvollziehbarkeit etwaig aufgetretener Fehler.</returns>
|
||||
/// <exception cref="PythonParsingException"></exception>
|
||||
public DataObjects.UmsatzPrognoseAusgabe UmsatzprognoseDummy(int? firmaId, DateTime? analyseBeginn)
|
||||
{
|
||||
AssertNotDisposed();
|
||||
string pyJson;
|
||||
string infos;
|
||||
using (Py.GIL())
|
||||
{
|
||||
pyJson = pyModPipeline.pipeline_sales_forecast_dummy(firmaId, analyseBeginn);
|
||||
}
|
||||
var parsed = JsonSerializer.Deserialize<DataObjects.UmsatzPrognoseAusgabe>(pyJson) ?? throw new PythonParsingException("Could not correctly parse object from Python");
|
||||
return parsed;
|
||||
}
|
||||
/// <summary>
|
||||
/// Ausführung der Umsatzprognose-Pipeline mit Live-Daten.
|
||||
/// Es werden API-Abrufe durchgeführt und somit auch Live-Daten genutzt.
|
||||
/// Hierfür muss sichergestellt sein, dass der API-Server erreichbar und abrufbereit ist.
|
||||
/// </summary>
|
||||
/// <param name="firmaIds">optional: Liste von Firmen-IDs, für die die Pipeline ausgeführt werden soll.
|
||||
/// Wird der Parameter nicht zur Verfügung gestellt, werden alle Firmen bzw. Kunden abgerufen</param>
|
||||
/// <param name="analyseBeginn">optional: Start-Datum, ab dem die Daten für die Erstellung des Prognosemodells genutzt werden.
|
||||
/// Daten, die weiter in der Vergangenheit liegen, werden nicht berücksichtigt.
|
||||
/// Wird der Parameter nicht zur Verfügung gestellt, wird die gesamte Historie genutzt.</param>
|
||||
/// <returns cref="DataObjects.UmsatzPrognoseAusgabe">Umsatzprognose inkl. Status-Objekt zur Nachvollziehbarkeit etwaig aufgetretener Fehler.</returns>
|
||||
/// <exception cref="PythonParsingException"></exception>
|
||||
public DataObjects.UmsatzPrognoseAusgabe Umsatzprognose(List<int>? firmaIds, DateTime? analyseBeginn)
|
||||
{
|
||||
AssertNotDisposed();
|
||||
string pyJson;
|
||||
using (Py.GIL())
|
||||
{
|
||||
pyJson = pyModPipeline.pipeline_sales_forecast(firmaIds, analyseBeginn);
|
||||
}
|
||||
var parsed = JsonSerializer.Deserialize<DataObjects.UmsatzPrognoseAusgabe>(pyJson) ?? throw new PythonParsingException("Could not correctly parse object from Python");
|
||||
return parsed;
|
||||
}
|
||||
/// <summary>
|
||||
/// Setup der Python-internen Umgebung
|
||||
/// </summary>
|
||||
/// <param name="datenPfad">Pfad zu einem Ordner, in dem Programmdaten ohne Bedenken dauerhaft abgelegt werden können.</param>
|
||||
/// <param name="basisApiUrl">Basis-URL zum Zugriff auf die API. Dies muss eine vollständige URL sein inkl. der Route "/api".</param>
|
||||
protected void Setup(string datenPfad, string basisApiUrl)
|
||||
{
|
||||
AssertNotDisposed();
|
||||
using (Py.GIL())
|
||||
{
|
||||
pyModManagement.setup(datenPfad, basisApiUrl);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Hole die konfigurierte API-Basis-URL aus der Python-Umgebung
|
||||
/// </summary>
|
||||
/// <returns>konfigurierte Basis-URL</returns>
|
||||
protected string GetBaseApiUrl()
|
||||
{
|
||||
AssertNotDisposed();
|
||||
string pyJson;
|
||||
using (Py.GIL())
|
||||
{
|
||||
pyJson = (string)pyModManagement.get_base_url();
|
||||
}
|
||||
return pyJson;
|
||||
}
|
||||
/// <summary>
|
||||
/// Hole den konfigurierten Datenpfad zur Dateiverwaltung aus der Python-Umgebung
|
||||
/// </summary>
|
||||
/// <returns>konfigurierten Datenpfad</returns>
|
||||
protected string GetDataPath()
|
||||
{
|
||||
AssertNotDisposed();
|
||||
string pyJson;
|
||||
using (Py.GIL())
|
||||
{
|
||||
pyJson = (string)pyModManagement.get_data_path();
|
||||
}
|
||||
return pyJson;
|
||||
}
|
||||
/// <summary>
|
||||
/// Hole die konfigurierten Nutzerdaten zur API-Interaktion aus der Python-Umgebung
|
||||
/// </summary>
|
||||
/// <returns cref="DataObjects.Credentials">konfigurierte Nutzerdaten</returns>
|
||||
/// <exception cref="PythonParsingException"></exception>
|
||||
protected DataObjects.Credentials GetCredentials()
|
||||
{
|
||||
AssertNotDisposed();
|
||||
string pyJson;
|
||||
using (Py.GIL())
|
||||
{
|
||||
pyJson = (string)pyModManagement.get_credentials();
|
||||
|
||||
infos = pyDebug.print_infos();
|
||||
}
|
||||
Console.WriteLine(infos);
|
||||
Console.WriteLine($"PyEngine - PYHOME: {PythonEngine.PythonHome}");
|
||||
Console.WriteLine($"PyEngine - PYPATH: {PythonEngine.PythonPath}");
|
||||
|
||||
DataObjects.Credentials? parsed = JsonSerializer.Deserialize<DataObjects.Credentials>(pyJson);
|
||||
return parsed ?? throw new PythonParsingException("Could not correctly parse object from Python");
|
||||
return infos;
|
||||
}
|
||||
///// <summary>
|
||||
///// Initialisiert das Plugin mit allen relevanten Paramtern für die weitere Nutzung.
|
||||
///// Diese Methode sollte nur einmal je Instanz genutzt werden.
|
||||
///// </summary>
|
||||
///// <param name="datenPfad">Pfad zu einem Ordner, in dem Programmdaten ohne Bedenken dauerhaft abgelegt werden können.</param>
|
||||
///// <param name="basisApiUrl">Basis-URL zum Zugriff auf die API. Dies muss eine vollständige URL sein inkl. der Route "/api".</param>
|
||||
///// <param name="nutzername">Nutzername für die Datenbankanmeldung.</param>
|
||||
///// <param name="passwort">Passwort für die Datenbankanmeldung.</param>
|
||||
///// <param name="datenbank">Name der Datenbank, bei der die Anmeldung erfolgen soll.</param>
|
||||
///// <param name="mandant">Mandant für die Datenbankanmeldung.</param>
|
||||
//public void Startup(string datenPfad, string basisApiUrl, string nutzername, string passwort, string datenbank, string mandant)
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// Setup(datenPfad, basisApiUrl);
|
||||
// SetzeNutzerdaten(nutzername, passwort, datenbank, mandant);
|
||||
//}
|
||||
///// <summary>
|
||||
///// Diese Methode erlaubt es, die relevanten Nutzerdaten zur Laufzeit des Plugins zu ändern.
|
||||
///// Dies beinhaltet: Nutzername, Passwort, Datenbankname, Mandant
|
||||
///// </summary>
|
||||
///// <param name="nutzername">Nutzername für die Datenbankanmeldung.</param>
|
||||
///// <param name="passwort">Passwort für die Datenbankanmeldung.</param>
|
||||
///// <param name="datenbank">Name der Datenbank, bei der die Anmeldung erfolgen soll.</param>
|
||||
///// <param name="mandant">Mandant für die Datenbankanmeldung.</param>
|
||||
//public void SetzeNutzerdaten(string nutzername, string passwort, string datenbank, string mandant)
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// using (Py.GIL()) {
|
||||
// pyModManagement.set_credentials(nutzername, passwort, datenbank, mandant);
|
||||
// }
|
||||
//}
|
||||
///// <summary>
|
||||
///// Ausführung der Umsatzprognose-Pipeline mit Dummy-Daten.
|
||||
///// Es werden keine API-Abrufe durchgeführt und somit auch keine Live-Daten genutzt.
|
||||
///// </summary>
|
||||
///// <param name="firmaId">optional: Firmen-ID, für die die Pipeline ausgeführt werden soll.
|
||||
///// Wird der Parameter nicht zur Verfügung gestellt, werden alle Firmen bzw. Kunden abgerufen</param>
|
||||
///// <param name="analyseBeginn">optional: Start-Datum, ab dem die Daten für die Erstellung des Prognosemodells genutzt werden.
|
||||
///// Daten, die weiter in der Vergangenheit liegen, werden nicht berücksichtigt.
|
||||
///// Wird der Parameter nicht zur Verfügung gestellt, wird die gesamte Historie genutzt.</param>
|
||||
///// <returns cref="DataObjects.UmsatzPrognoseAusgabe">Umsatzprognose inkl. Status-Objekt zur Nachvollziehbarkeit etwaig aufgetretener Fehler.</returns>
|
||||
///// <exception cref="PythonParsingException"></exception>
|
||||
//public DataObjects.UmsatzPrognoseAusgabe UmsatzprognoseDummy(int? firmaId, DateTime? analyseBeginn)
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// string pyJson;
|
||||
// using (Py.GIL())
|
||||
// {
|
||||
// pyJson = pyModPipeline.pipeline_sales_forecast_dummy(firmaId, analyseBeginn);
|
||||
// }
|
||||
// var parsed = JsonSerializer.Deserialize<DataObjects.UmsatzPrognoseAusgabe>(pyJson) ?? throw new PythonParsingException("Could not correctly parse object from Python");
|
||||
// return parsed;
|
||||
//}
|
||||
///// <summary>
|
||||
///// Ausführung der Umsatzprognose-Pipeline mit Live-Daten.
|
||||
///// Es werden API-Abrufe durchgeführt und somit auch Live-Daten genutzt.
|
||||
///// Hierfür muss sichergestellt sein, dass der API-Server erreichbar und abrufbereit ist.
|
||||
///// </summary>
|
||||
///// <param name="firmaIds">optional: Liste von Firmen-IDs, für die die Pipeline ausgeführt werden soll.
|
||||
///// Wird der Parameter nicht zur Verfügung gestellt, werden alle Firmen bzw. Kunden abgerufen</param>
|
||||
///// <param name="analyseBeginn">optional: Start-Datum, ab dem die Daten für die Erstellung des Prognosemodells genutzt werden.
|
||||
///// Daten, die weiter in der Vergangenheit liegen, werden nicht berücksichtigt.
|
||||
///// Wird der Parameter nicht zur Verfügung gestellt, wird die gesamte Historie genutzt.</param>
|
||||
///// <returns cref="DataObjects.UmsatzPrognoseAusgabe">Umsatzprognose inkl. Status-Objekt zur Nachvollziehbarkeit etwaig aufgetretener Fehler.</returns>
|
||||
///// <exception cref="PythonParsingException"></exception>
|
||||
//public DataObjects.UmsatzPrognoseAusgabe Umsatzprognose(List<int>? firmaIds, DateTime? analyseBeginn)
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// string pyJson;
|
||||
// using (Py.GIL())
|
||||
// {
|
||||
// pyJson = pyModPipeline.pipeline_sales_forecast(firmaIds, analyseBeginn);
|
||||
// }
|
||||
// var parsed = JsonSerializer.Deserialize<DataObjects.UmsatzPrognoseAusgabe>(pyJson) ?? throw new PythonParsingException("Could not correctly parse object from Python");
|
||||
// return parsed;
|
||||
//}
|
||||
///// <summary>
|
||||
///// Setup der Python-internen Umgebung
|
||||
///// </summary>
|
||||
///// <param name="datenPfad">Pfad zu einem Ordner, in dem Programmdaten ohne Bedenken dauerhaft abgelegt werden können.</param>
|
||||
///// <param name="basisApiUrl">Basis-URL zum Zugriff auf die API. Dies muss eine vollständige URL sein inkl. der Route "/api".</param>
|
||||
//protected void Setup(string datenPfad, string basisApiUrl)
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// using (Py.GIL())
|
||||
// {
|
||||
// pyModManagement.setup(datenPfad, basisApiUrl);
|
||||
// }
|
||||
//}
|
||||
///// <summary>
|
||||
///// Hole die konfigurierte API-Basis-URL aus der Python-Umgebung
|
||||
///// </summary>
|
||||
///// <returns>konfigurierte Basis-URL</returns>
|
||||
//protected string GetBaseApiUrl()
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// string pyJson;
|
||||
// using (Py.GIL())
|
||||
// {
|
||||
// pyJson = (string)pyModManagement.get_base_url();
|
||||
// }
|
||||
// return pyJson;
|
||||
//}
|
||||
///// <summary>
|
||||
///// Hole den konfigurierten Datenpfad zur Dateiverwaltung aus der Python-Umgebung
|
||||
///// </summary>
|
||||
///// <returns>konfigurierten Datenpfad</returns>
|
||||
//protected string GetDataPath()
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// string pyJson;
|
||||
// using (Py.GIL())
|
||||
// {
|
||||
// pyJson = (string)pyModManagement.get_data_path();
|
||||
// }
|
||||
// return pyJson;
|
||||
//}
|
||||
///// <summary>
|
||||
///// Hole die konfigurierten Nutzerdaten zur API-Interaktion aus der Python-Umgebung
|
||||
///// </summary>
|
||||
///// <returns cref="DataObjects.Credentials">konfigurierte Nutzerdaten</returns>
|
||||
///// <exception cref="PythonParsingException"></exception>
|
||||
//protected DataObjects.Credentials GetCredentials()
|
||||
//{
|
||||
// AssertNotDisposed();
|
||||
// string pyJson;
|
||||
// using (Py.GIL())
|
||||
// {
|
||||
// pyJson = (string)pyModManagement.get_credentials();
|
||||
// }
|
||||
|
||||
// DataObjects.Credentials? parsed = JsonSerializer.Deserialize<DataObjects.Credentials>(pyJson);
|
||||
// return parsed ?? throw new PythonParsingException("Could not correctly parse object from Python");
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<Platforms>x64</Platforms>
|
||||
<Version>0.4.0</Version>
|
||||
<Version>0.4.1-alpha1</Version>
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user