fix(plantes): import_graines — idempotence plant_variety + media + import unicodedata

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-08 19:08:32 +01:00
parent 0f5ebd25be
commit d4d104b2c2

View File

@@ -6,6 +6,7 @@ Usage: cd /chemin/projet && python3 backend/scripts/import_graines.py
import json
import shutil
import sqlite3
import unicodedata
import uuid
from datetime import datetime, timezone
from pathlib import Path
@@ -86,6 +87,13 @@ def copy_image(src: Path, variety_id: int, conn: sqlite3.Connection) -> None:
if not src.exists():
print(f" WARNING image absente: {src}")
return
# Vérifier si cette image existe déjà dans media pour cette variété
existing_m = conn.execute(
"SELECT id FROM media WHERE entity_type = 'plant_variety' AND entity_id = ? AND url LIKE ?",
(variety_id, f"%{src.stem}%")
).fetchone()
if existing_m:
return
UPLOADS_DIR.mkdir(parents=True, exist_ok=True)
# Use UUID-based filename like the rest of the app
dest_name = f"{uuid.uuid4()}.jpg"
@@ -99,7 +107,6 @@ def copy_image(src: Path, variety_id: int, conn: sqlite3.Connection) -> None:
def normalize(s: str) -> str:
"""Normalise string: minuscules, supprime accents simples."""
import unicodedata
return ''.join(c for c in unicodedata.normalize('NFD', s.lower()) if unicodedata.category(c) != 'Mn')
@@ -169,6 +176,15 @@ def import_graines(conn: sqlite3.Connection) -> None:
(*updates.values(), plant_id),
)
# Vérifier si cette variété existe déjà pour cette plante
existing_v = conn.execute(
"SELECT id FROM plant_variety WHERE plant_id = ? AND LOWER(variete) = LOWER(?)",
(plant_id, variete_name)
).fetchone()
if existing_v:
print(f"{nom_commun}{variete_name} (déjà importé)")
continue
# Créer plant_variety
conn.execute(
"INSERT INTO plant_variety (plant_id, variete, created_at) VALUES (?, ?, ?)",
@@ -229,6 +245,15 @@ def import_arbustre(conn: sqlite3.Connection) -> None:
if exposition:
conn.execute("UPDATE plant SET besoin_soleil = ? WHERE id = ?", (exposition, plant_id))
# Vérifier si cette variété existe déjà pour cette plante
existing_v = conn.execute(
"SELECT id FROM plant_variety WHERE plant_id = ? AND LOWER(variete) = LOWER(?)",
(plant_id, variete_name)
).fetchone()
if existing_v:
print(f"{nom_commun}{variete_name} (déjà importé)")
continue
conn.execute(
"INSERT INTO plant_variety (plant_id, variete, created_at) VALUES (?, ?, ?)",
(plant_id, variete_name, datetime.now(timezone.utc).isoformat()),