BoardGameGeek verlangt für die XML API2 jetzt Bearer-Authentifizierung
(Thread 3602374); ohne Token antwortet die API mit 401.
- BggClient: neuer Parameter token, sendet Authorization: Bearer … auf
allen Requests; Token kommt aus SPIELE_BGG_TOKEN (vor jedem Sync gelesen)
- HTTP 401 → klarer BggAuthFehler ('BGG hat die Anfrage abgelehnt (401) —
bitte gültigen API-Token in SPIELE_BGG_TOKEN hinterlegen.') statt
generischer Meldung, kein Retry
- Ohne konfigurierten Token wird der Sync übersprungen ('Kein BGG-API-Token
konfiguriert (SPIELE_BGG_TOKEN) — Sync übersprungen.'), statt Requests zu
feuern; Meldung erscheint im Sync-Ergebnis, UI-Banner und Protokoll
- SyncService: BggAuthFehler bricht den Lauf ab (weitere Suchbegriffe
scheitern zwangsläufig gleich), Teilergebnisse bleiben erhalten
- Tests: Bearer-Header, 401-Fall (Client/Sync/UI), Skip ohne Token;
bestehende Sync-UI-Tests setzen Test-Token
- README: neue Env-Variable SPIELE_BGG_TOKEN + Hinweis auf Token-Pflicht
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
"""Zugriff auf die neuheiten-Plugin-Module über den vom Plugin-Loader
|
|
verwendeten Modulnamen (`spiele_redaktion_plugins.neuheiten`).
|
|
|
|
Der Kern teilt sich eine SQLAlchemy-MetaData; deshalb darf es pro Prozess
|
|
nur eine Modul-Identität geben. Tests importieren das Plugin daher über
|
|
diesen Helper statt direkt über `plugins.neuheiten`.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from redaktionskern.plugin_loader import discover_plugins
|
|
|
|
_PROJEKT_WURZEL = Path(__file__).resolve().parents[1]
|
|
|
|
if "spiele_redaktion_plugins.neuheiten" not in sys.modules:
|
|
discover_plugins(
|
|
_PROJEKT_WURZEL / "plugins",
|
|
entry_point_group="spiele_redaktion.tests.keine_entry_points",
|
|
)
|
|
|
|
_neuheiten = sys.modules["spiele_redaktion_plugins.neuheiten"]
|
|
|
|
bgg = _neuheiten.bgg
|
|
sync_modul = _neuheiten.sync
|
|
models = _neuheiten.models
|
|
|
|
BggClient = bgg.BggClient
|
|
BggFehler = bgg.BggFehler
|
|
BggAuthFehler = bgg.BggAuthFehler
|
|
MELDUNG_401 = bgg.MELDUNG_401
|
|
SuchTreffer = bgg.SuchTreffer
|
|
BggSpiel = bgg.BggSpiel
|
|
parse_suche = bgg.parse_suche
|
|
parse_things = bgg.parse_things
|
|
|
|
SyncService = sync_modul.SyncService
|
|
SyncErgebnis = sync_modul.SyncErgebnis
|
|
ist_moeglicher_prototyp = sync_modul.ist_moeglicher_prototyp
|
|
speichere_oder_aktualisiere = sync_modul.speichere_oder_aktualisiere
|
|
|
|
Neuheit = models.Neuheit
|
|
STATUS_NEUHEIT = models.STATUS_NEUHEIT
|