Promotion: fix(export): HTML-Export robust gegen Netzwerkpfade überarbeitet

This commit is contained in:
2025-07-29 18:57:30 +02:00
parent d30f654578
commit 89887edc1c
3 changed files with 87 additions and 13 deletions

View File

@ -1,8 +1,33 @@
import os import os
# Neue Exportfunktion: HTML in /tmp speichern, per SCP übertragen, PNG lokal speichern
def export_figure(fig, name, export_flag_html, export_flag_png):
from config_korrelation import export_path_png
safe_filename = slugify(name)
remote_path = "johajo@sternenflottenakademie.local:/mnt/deep-space-nine/public/plot/promotion/"
if export_flag_html:
export_path_html = f"/tmp/{safe_filename}.html"
fig.write_html(export_path_html, full_html=True, include_plotlyjs="cdn")
try:
subprocess.run(["scp", export_path_html, remote_path], check=True)
print(f"✅ HTML-Datei '{export_path_html}' erfolgreich übertragen.")
os.remove(export_path_html)
print(f"🗑️ Lokale HTML-Datei '{export_path_html}' wurde gelöscht.")
except subprocess.CalledProcessError as e:
print("❌ Fehler beim HTML-Übertragen:")
print(e.stderr)
if export_flag_png:
export_path_png = os.path.join(export_path_png, f"{safe_filename}.png")
try:
fig.write_image(export_path_png, width=1200, height=800, scale=2)
print(f"✅ PNG-Datei lokal gespeichert: '{export_path_png}'")
except Exception as e:
print("❌ Fehler beim PNG-Export:", str(e))
# Import theme and all export_fig_... variables from central config before any use # Import theme and all export_fig_... variables from central config before any use
from ci_template.plotly_template import export_figure
from config_korrelation import ( from config_korrelation import (
theme, theme,
export_fig_visual, export_fig_visual,
@ -19,7 +44,8 @@ from config_korrelation import (
export_fig_correlation_kategorien_kategorien, export_fig_correlation_kategorien_kategorien,
export_fig_correlation_indizes_indizes, export_fig_correlation_indizes_indizes,
export_fig_summary_plot, export_fig_summary_plot,
bib_filename bib_filename,
export_path_html
) )
# Terminal leeren # Terminal leeren
@ -61,7 +87,12 @@ def prepare_figure_export(fig, name):
return f"{safe_filename}.html" return f"{safe_filename}.html"
def export_and_transfer_figure(fig, function_name, export_flag): def export_and_transfer_figure(fig, function_name, export_flag):
export_figure(fig, function_name, export_flag, export_fig_png) export_figure(
fig,
function_name,
export_flag,
export_fig_png
)
fig.show() fig.show()
# BibTeX-Datei laden # BibTeX-Datei laden

View File

@ -1,7 +1,6 @@
from config_netzwerk import theme, export_fig_visual, bib_filename from config_netzwerk import theme, export_fig_visual, bib_filename
from ci_template.plotly_template import export_figure as export_figure_ci
import os import os
@ -66,7 +65,24 @@ from config_netzwerk import (
from config_netzwerk import export_fig_png from config_netzwerk import export_fig_png
def export_figure_local(fig, name, flag, bib_filename=None): def export_figure_local(fig, name, flag, bib_filename=None):
export_figure_ci(fig, name, flag, export_fig_png) from config_netzwerk import export_path_html, export_path_png
if flag:
local_tmp_path = f"/tmp/{slugify(name)}.html"
fig.write_html(local_tmp_path, full_html=True, include_plotlyjs="cdn")
try:
subprocess.run(["scp", local_tmp_path, f"{export_path_html}/{slugify(name)}.html"], check=True)
print(f"✅ HTML-Datei erfolgreich übertragen.")
os.remove(local_tmp_path)
print(f"🗑️ Lokale HTML-Datei '{local_tmp_path}' wurde gelöscht.")
except subprocess.CalledProcessError as e:
print("❌ Fehler bei der Übertragung via SCP:", e)
if export_fig_png:
png_path = os.path.join(export_path_png, f"{slugify(name)}.png")
try:
fig.write_image(png_path, width=1200, height=800, scale=2)
print(f"✅ PNG-Datei exportiert nach: {png_path}")
except Exception as e:
print("❌ Fehler beim PNG-Export:", str(e))
from ci_template.plotly_template import get_colors, get_plot_styles, get_standard_layout from ci_template.plotly_template import get_colors, get_plot_styles, get_standard_layout

View File

@ -3,13 +3,14 @@
# =============================== # ===============================
# --- System- und Modul-Imports --- # --- System- und Modul-Imports ---
import os
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import plotly.graph_objects as go import plotly.graph_objects as go
from datetime import date from datetime import date
from scipy.stats.mstats import winsorize from scipy.stats.mstats import winsorize
from scipy.stats import iqr from scipy.stats import iqr
import os
import subprocess
# --- CI-Template & Konfiguration --- # --- CI-Template & Konfiguration ---
from ci_template.plotly_template import ( from ci_template.plotly_template import (
@ -17,9 +18,14 @@ from ci_template.plotly_template import (
get_colors, get_colors,
set_theme set_theme
) )
from ci_template.plotly_template import export_figure from config_deskriptive_literaturauswahl import (
from config_deskriptive_literaturauswahl import theme, export_fig_visual theme,
from config_deskriptive_literaturauswahl import export_fig_png, export_fig_silhouette_plot export_fig_visual,
export_fig_png,
export_fig_silhouette_plot,
export_path_html,
export_path_png
)
# --- Initialisierung --- # --- Initialisierung ---
os.system('cls' if os.name == 'nt' else 'clear') os.system('cls' if os.name == 'nt' else 'clear')
@ -143,9 +149,30 @@ layout["legend"] = dict(
) )
fig.update_layout(**layout) fig.update_layout(**layout)
# --- Export-Funktion ---
def export_figure(fig, name, export_flag_html, export_flag_png):
from config_deskriptive_literaturauswahl import export_path_png, export_path_html
safe_name = name.replace(" ", "_").replace("/", "_").lower()
html_path = f"/tmp/{safe_name}.html"
if export_flag_html:
fig.write_html(html_path, include_plotlyjs='cdn', config={"responsive": True})
try:
subprocess.run(["scp", html_path, export_path_html], check=True)
print(f"✅ HTML-Datei '{html_path}' erfolgreich übertragen.")
os.remove(html_path)
print(f"🗑️ Lokale HTML-Datei '{html_path}' wurde gelöscht.")
except subprocess.CalledProcessError as e:
print("❌ Fehler beim HTML-Übertragen:")
print(e.stderr)
if export_flag_png:
png_path = os.path.join(export_path_png, f"{safe_name}.png")
try:
fig.write_image(png_path, scale=2)
print(f"✅ PNG-Datei lokal gespeichert: '{png_path}'")
except Exception as e:
print("❌ Fehler beim PNG-Export:", str(e))
# --- Export --- # --- Export ---
export_figure(fig, "silhouette_scores_und_fallzahlen", export_fig_silhouette_plot, export_fig_png) export_figure(fig, "silhouette_scores_und_fallzahlen", export_fig_silhouette_plot, export_fig_png)
fig.show()
# (Hinweis: Balkenfarbe wird direkt im Bar-Trace gesetzt)
fig.show(config={"responsive": True})