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 resolve_row_player_key, PLAYER_SHARED def update_row_field(slug, definition, row_id, field_def, new_value, player_id=PLAYER_SHARED): """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 = ?", (new_value, row_id, key), ) conn.commit() conn.close()