Logging erweitert.

This commit is contained in:
Patrick Asmus
2026-09-20 22:31:59 +02:00
parent 6d07b12015
commit c3f68ace96
2 changed files with 54 additions and 20 deletions
+30 -17
View File
@@ -5,10 +5,10 @@ import os
import re
import subprocess
import threading
from typing import Optional, Callable
from typing import Callable
def _parse_ttl_seconds(ttl: str) -> Optional[int]:
def _parse_ttl_seconds(ttl: str) -> int | None:
if not ttl:
return None
m = re.match(r"^(\d+)d$", ttl)
@@ -28,17 +28,19 @@ def upload_file(
plik_url: str,
api_key: str = "",
ttl: str = "30d",
) -> Optional[dict]:
"""Upload a file to Plik. Returns dict with 'browser_url' and 'download_url', or None on failure."""
if not plik_url or not os.path.isfile(file_path):
return None
) -> dict | None:
"""Upload a file to Plik. Returns dict with 'browser_url', 'download_url', or {'error': reason} on failure."""
if not plik_url:
return {"error": "Keine Plik-URL konfiguriert"}
if not os.path.isfile(file_path):
return {"error": f"Datei nicht gefunden: {file_path}"}
if os.path.getsize(file_path) == 0:
return None
return {"error": "Datei ist leer"}
plik_base = plik_url.rstrip("/")
filename = os.path.basename(file_path)
cmd = ["curl", "-sS", "--max-time", "7200"]
cmd = ["curl", "-sS", "--fail-with-body", "--max-time", "7200"]
if api_key:
cmd += ["-H", f"X-PlikToken: {api_key}"]
@@ -53,13 +55,18 @@ def upload_file(
try:
result = subprocess.run(cmd, capture_output=True, text=True, timeout=7200, stdin=subprocess.DEVNULL)
if result.returncode != 0:
return None
err = result.stderr.strip() or result.stdout.strip() or f"curl exit code {result.returncode}"
return {"error": f"curl-Fehler: {err[:500]}"}
try:
data = json.loads(result.stdout)
if "error" in data:
return {"error": f"Plik-Server: {data['error']}"}
upload_id = data.get("id", "")
if not upload_id:
return None
return {"error": f"Keine Upload-ID in Antwort: {result.stdout[:300]}"}
browser_url = f"{plik_base}/#/?id={upload_id}"
@@ -83,9 +90,11 @@ def upload_file(
if uid:
return {"browser_url": f"{plik_base}/#/?id={uid}", "download_url": download_url}
return {"browser_url": download_url, "download_url": download_url}
return None
except Exception:
return None
return {"error": f"Antwort nicht lesbar: {result.stdout[:300]}"}
except subprocess.TimeoutExpired:
return {"error": "Upload-Timeout (max. 2h)"}
except Exception as e:
return {"error": str(e)}
class PlikUploader:
@@ -124,7 +133,9 @@ class PlikUploader:
self._log("INFO", f"Plik-Upload: {os.path.basename(file_path)} [{job_name}]", job_name)
result = upload_file(file_path, plik_url, api_key, ttl)
if result:
if result and "error" in result:
self._log("ERROR", f"Plik-Upload fehlgeschlagen: {result['error']} [{job_name}]", job_name)
elif result and result.get("browser_url"):
self._log("INFO", f"Plik-Upload abgeschlossen: {result['browser_url']} [{job_name}]", job_name)
if result.get("download_url"):
self._log("INFO", f"Plik-Download: {result['download_url']} [{job_name}]", job_name)
@@ -136,7 +147,7 @@ class PlikUploader:
os.remove(file_path)
self._log("INFO", f"Lokale Datei gelöscht: {file_path} [{job_name}]", job_name)
else:
self._log("ERROR", f"Plik-Upload fehlgeschlagen [{job_name}]", job_name)
self._log("ERROR", f"Plik-Upload fehlgeschlagen (unbekannter Fehler) [{job_name}]", job_name)
def _upload_segments(self, output_dir, job_name, plik_url, api_key, ttl, delete_after, ntfy_enabled, save_url_fn=None):
if not os.path.isdir(output_dir):
@@ -154,7 +165,9 @@ class PlikUploader:
continue
self._log("INFO", f"Plik Segment-Upload: {fname} [{job_name}]", job_name)
result = upload_file(fpath, plik_url, api_key, ttl)
if result:
if result and "error" in result:
self._log("ERROR", f"Plik Segment-Upload fehlgeschlagen: {fname} - {result['error']} [{job_name}]", job_name)
elif result and result.get("browser_url"):
last_browser_url = result["browser_url"]
self._log("INFO", f"Plik Segment hochgeladen: {last_browser_url} [{job_name}]", job_name)
uploaded += 1
@@ -162,7 +175,7 @@ class PlikUploader:
os.remove(fpath)
self._log("INFO", f"Segment gelöscht: {fname} [{job_name}]", job_name)
else:
self._log("ERROR", f"Plik Segment-Upload fehlgeschlagen: {fname} [{job_name}]", job_name)
self._log("ERROR", f"Plik Segment-Upload fehlgeschlagen: {fname} (unbekannter Fehler) [{job_name}]", job_name)
if uploaded > 0:
if save_url_fn and last_browser_url: