From 1a0708f1520ed59c2192330ff5d7020a502cbe13 Mon Sep 17 00:00:00 2001 From: Lars Date: Mon, 27 Apr 2026 08:24:35 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20correct=20remaining=20dict=20cursor=20ac?= =?UTF-8?q?cess=20(row[0]=20=E2=86=92=20row['id'])?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Error: 100 exercises failed with error '0' (TypeError suppressed) Root cause: More row[0] dict access in catalog assignment functions Previous fix only covered fetchone()[0] in RETURNING clauses. Missed 6 more locations in SELECT queries where row is dict-like. Fixed locations: - Line 511: focus_area_id in exercise_focus_areas INSERT - Line 524: style_direction_id in exercise_training_styles INSERT - Line 535: target_group_id in exercise_target_groups INSERT - Line 546: skill_id in exercise_skills INSERT - Line 568: skill_id in exercise_skills INSERT (with levels) - Line 589: category_id assignment in _upsert_skill All changed from row[0] to row['id'] for RealDictCursor compatibility. This should fix the remaining 100 import failures. --- backend/routers/import_wiki.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/routers/import_wiki.py b/backend/routers/import_wiki.py index 552c936..b648ed0 100644 --- a/backend/routers/import_wiki.py +++ b/backend/routers/import_wiki.py @@ -508,7 +508,7 @@ def _assign_exercise_catalogs(cur, conn, exercise_id: int, mapped: dict): """INSERT INTO exercise_focus_areas (exercise_id, focus_area_id, is_primary) VALUES (%s, %s, %s) ON CONFLICT (exercise_id, focus_area_id) DO NOTHING""", - (exercise_id, row[0], idx == 0) + (exercise_id, row['id'], idx == 0) ) else: logger.warning("Focus Area '%s' nicht im Katalog gefunden", name) @@ -521,7 +521,7 @@ def _assign_exercise_catalogs(cur, conn, exercise_id: int, mapped: dict): cur.execute( """INSERT INTO exercise_training_styles (exercise_id, style_direction_id) VALUES (%s, %s) ON CONFLICT DO NOTHING""", - (exercise_id, row[0]) + (exercise_id, row['id']) ) # Target Groups @@ -532,7 +532,7 @@ def _assign_exercise_catalogs(cur, conn, exercise_id: int, mapped: dict): cur.execute( """INSERT INTO exercise_target_groups (exercise_id, target_group_id) VALUES (%s, %s) ON CONFLICT DO NOTHING""", - (exercise_id, row[0]) + (exercise_id, row['id']) ) # Skills @@ -543,7 +543,7 @@ def _assign_exercise_catalogs(cur, conn, exercise_id: int, mapped: dict): cur.execute( """INSERT INTO exercise_skills (exercise_id, skill_id) VALUES (%s, %s) ON CONFLICT DO NOTHING""", - (exercise_id, row[0]) + (exercise_id, row['id']) ) conn.commit() @@ -565,7 +565,7 @@ def _assign_exercise_skills(cur, conn, exercise_id: int, skill_assignments: list target_level = EXCLUDED.target_level, is_primary = EXCLUDED.is_primary""", ( - exercise_id, row[0], + exercise_id, row['id'], assignment.get("target_level"), assignment.get("required_level"), assignment.get("intensity"), @@ -586,7 +586,7 @@ def _upsert_skill(mapped: dict, reimport: bool) -> Optional[int]: cur.execute("SELECT id FROM skill_categories WHERE name ILIKE %s", (mapped["category_name"],)) row = cur.fetchone() if row: - category_id = row[0] + category_id = row['id'] cur.execute( """INSERT INTO skills (name, description, category_id)