Artikelbild: nur noch an einer Stelle, hochkant, und beim Import beruecksichtigt
Das alte Bild in der Chargen-Karte entfaellt - seit dem neuen Bild neben den Kennfeldern stand es doppelt auf der Seite. Der Rahmen ist jetzt hochkant (3:4) statt quadratisch. Lebensmittelverpackungen sind fast immer hoeher als breit; im Quadrat blieben links und rechts leere Streifen. Beim Import wurde image_url komplett verworfen, obwohl das JSON-Backup sie enthaelt - eingelesene Artikel blieben deshalb dauerhaft ohne Bild. Die Adresse wird jetzt uebernommen (bei bestehenden Artikeln nur ergaenzend, nie ueberschreibend); die lokale Kopie holt der Bildabruf beim ersten Ansehen. Bewusst nicht waehrend des Imports: Ein Backup mit 200 Artikeln wuerde sonst 200 Downloads in einer Anfrage abarbeiten. Ausserdem holen jetzt auch Artikelliste, Ein- und Auslagern ihr Vorschaubild aus der eigenen Datenbank statt direkt von Open Food Facts. Einzige Ausnahme bleibt der OFF-Vorschlag beim Scannen: Dort existiert der Artikel noch nicht. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -339,6 +339,17 @@ def _get_or_create_group(db: Session, name: str | None) -> Group | None:
|
||||
return group
|
||||
|
||||
|
||||
def _bildadresse_ergaenzen(product: Product, row: dict) -> None:
|
||||
"""Fehlende Bildadresse aus dem Backup nachtragen – vorhandene bleibt.
|
||||
|
||||
Nur ergaenzend: Ein Import soll Daten hinzufuegen, nicht stillschweigend
|
||||
etwas ueberschreiben, das jemand von Hand gesetzt hat.
|
||||
"""
|
||||
adresse = (row.get("image_url") or "").strip()
|
||||
if adresse and not product.image_url:
|
||||
product.image_url = adresse
|
||||
|
||||
|
||||
def _get_or_create_product(db: Session, row: dict, created: list[str]) -> Product:
|
||||
"""Sucht per Barcode, sonst per Name; legt das Produkt sonst an."""
|
||||
barcode = (row.get("barcode") or "").strip() or None
|
||||
@@ -346,10 +357,12 @@ def _get_or_create_product(db: Session, row: dict, created: list[str]) -> Produc
|
||||
if barcode:
|
||||
product = db.query(Product).filter(Product.barcode == barcode).first()
|
||||
if product:
|
||||
_bildadresse_ergaenzen(product, row)
|
||||
return product
|
||||
if name:
|
||||
product = db.query(Product).filter(Product.name == name).first()
|
||||
if product:
|
||||
_bildadresse_ergaenzen(product, row)
|
||||
return product
|
||||
if not name:
|
||||
raise ValueError("Produktname fehlt")
|
||||
@@ -363,6 +376,10 @@ def _get_or_create_product(db: Session, row: dict, created: list[str]) -> Produc
|
||||
barcode=barcode,
|
||||
name=name,
|
||||
brand=(row.get("marke") or "").strip() or None,
|
||||
# Die Bildadresse stand zwar immer im JSON-Backup, wurde beim Einlesen
|
||||
# aber verworfen - eingelesene Artikel blieben deshalb dauerhaft ohne
|
||||
# Bild. Die lokale Kopie holt sich der Bildabruf beim ersten Ansehen.
|
||||
image_url=(row.get("image_url") or "").strip() or None,
|
||||
base_unit=BASE_OF_KIND[unit.kind],
|
||||
display_unit_id=unit.id,
|
||||
package_size=_num(row.get("packungsgroesse")),
|
||||
|
||||
Reference in New Issue
Block a user