Merge wt-export: Export-Plugin (Konflikte aufgelöst)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"""Gemeinsame Fixtures: App mit temporaerer SQLite-DB und TestClient."""
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from dataclasses import replace
|
||||
from pathlib import Path
|
||||
|
||||
@@ -69,6 +70,58 @@ def melde_an(
|
||||
return antwort
|
||||
|
||||
|
||||
def _installiere_weasyprint():
|
||||
"""Best effort: WeasyPrint nachinstallieren (z. B. frisches Checkout ohne uv sync).
|
||||
|
||||
Zuerst uv im Projektverzeichnis, als Rueckfallebene pip. Scheitert beides
|
||||
(kein Netz, keine Tools), skippen die PDF-Tests spaeter sauber.
|
||||
"""
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
befehle = [
|
||||
["uv", "pip", "install", "weasyprint"],
|
||||
[sys.executable, "-m", "pip", "install", "--quiet", "weasyprint"],
|
||||
]
|
||||
for befehl in befehle:
|
||||
if shutil.which(befehl[0]) is None:
|
||||
continue
|
||||
try:
|
||||
subprocess.run(
|
||||
befehl,
|
||||
cwd=str(PROJEKT_WURZEL),
|
||||
check=False,
|
||||
timeout=180,
|
||||
capture_output=True,
|
||||
)
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def pdf_faehig():
|
||||
"""WeasyPrint bereitstellen; PDF-Tests ueberspringen, wenn das System es nicht hergibt.
|
||||
|
||||
- fehlt das Paket: einmaliger Installationsversuch (uv, sonst pip)
|
||||
- fehlen die System-Bibliotheken (Pango/fontconfig & Co.): Probe-Renderung
|
||||
schlaegt fehl -> pytest.skip statt rotem Test
|
||||
"""
|
||||
try:
|
||||
import weasyprint # noqa: F401
|
||||
except ImportError:
|
||||
_installiere_weasyprint()
|
||||
try:
|
||||
import weasyprint # noqa: F401
|
||||
except ImportError:
|
||||
pytest.skip("WeasyPrint ist nicht installiert und konnte nicht nachinstalliert werden.")
|
||||
from weasyprint import HTML
|
||||
|
||||
try:
|
||||
HTML(string="<p>Probe äöü ß</p>").write_pdf()
|
||||
except Exception as exc:
|
||||
pytest.skip(f"WeasyPrint kann auf diesem System nicht rendern (System-Bibliotheken fehlen?): {exc}")
|
||||
|
||||
|
||||
def lege_benutzer_an(app, username: str, role: str, password: str = "test-12345678"):
|
||||
"""Legt direkt per DB einen Benutzer an (fuer Rollen-Tests)."""
|
||||
from redaktionskern.auth.models import User
|
||||
|
||||
Reference in New Issue
Block a user