from typing import Any from ..connection import connect from ..quote_ident import quote_ident from ..slugify import slugify from .ensure_player_id_column import ensure_player_id_column from .resolve_row_player_key import PLAYER_SHARED, resolve_row_player_key def update_row_field( slug: str, definition: dict[str, Any], row_id: int, field_def: dict[str, Any], new_value: Any, player_id: str = PLAYER_SHARED, ) -> None: """Met à jour UNE SEULE colonne d'une ligne existante — utilisé par les actions "Modifier une donnée" du mode jouable, qui ne doivent jamais écraser les autres champs de la ligne (contrairement à update_row, qui attend un formulaire complet). Filtre aussi par player_id (voir get_row.py).""" ensure_player_id_column(slug, definition["table_name"]) key = resolve_row_player_key(definition, player_id) fname = slugify(field_def["name"]).replace("-", "_") col = f"{fname}_id" if field_def["type"] == "relation" else fname conn = connect(slug) conn.execute( f"UPDATE {definition['table_name']} SET {quote_ident(col)} = ? WHERE id = ? AND player_id = ?", # nosec B608 # noqa: S608 - table_name vient de slugify()+prefixe obj_ (db/table_name_for.py) ; col deja echappee via quote_ident() ; valeurs parametrees (?) (new_value, row_id, key), ) conn.commit() conn.close()