using Python.Runtime; using System.Text.Json; namespace dopt.DeltaBarth { public class PythonParsingException : Exception { public PythonParsingException() { } public PythonParsingException(string message) : base(message) { } } public class Plugin : SharpPython.BasePlugin { protected dynamic pyModManagement; protected dynamic pyModPipeline; public Plugin(string runtimePath) : base(runtimePath: runtimePath, verbose: false) { base.Initialise(); using (Py.GIL()) { pyModManagement = Py.Import("delta_barth.management"); pyModPipeline = Py.Import("delta_barth.pipelines"); } } public void Startup(string datenPfad, string basisApiUrl, string nutzername, string passwort, string datenbank, string mandant) { AssertNotDisposed(); Setup(datenPfad, basisApiUrl); SetzeNutzerdaten(nutzername, passwort, datenbank, mandant); } public void SetzeNutzerdaten(string nutzername, string passwort, string datenbank, string mandant) { AssertNotDisposed(); using (Py.GIL()) { pyModManagement.set_credentials(nutzername, passwort, datenbank, mandant); } } 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(pyJson) ?? throw new PythonParsingException("Could not correctly parse object from Python"); return parsed; } public DataObjects.UmsatzPrognoseAusgabe Umsatzprognose(int? firmaId, DateTime? analyseBeginn) { AssertNotDisposed(); string pyJson; using (Py.GIL()) { pyJson = pyModPipeline.pipeline_sales_forecast(firmaId, analyseBeginn); } var parsed = JsonSerializer.Deserialize(pyJson) ?? throw new PythonParsingException("Could not correctly parse object from Python"); return parsed; } protected void Setup(string datenPfad, string basisApiUrl) { AssertNotDisposed(); using (Py.GIL()) { pyModManagement.setup(datenPfad, basisApiUrl); } } protected string GetBaseApiUrl() { AssertNotDisposed(); string pyJson; using (Py.GIL()) { pyJson = (string)pyModManagement.get_base_url(); } return pyJson; } protected string GetDataPath() { AssertNotDisposed(); string pyJson; using (Py.GIL()) { pyJson = (string)pyModManagement.get_data_path(); } return pyJson; } protected DataObjects.Credentials GetCredentials() { AssertNotDisposed(); string pyJson; using (Py.GIL()) { pyJson = (string)pyModManagement.get_credentials(); } DataObjects.Credentials? parsed = JsonSerializer.Deserialize(pyJson); return parsed ?? throw new PythonParsingException("Could not correctly parse object from Python"); } } }