Spaces:
Running
Running
| print("DEBUG: Migration script starting") | |
| from db import SanatanDatabase | |
| import logging | |
| from dotenv import load_dotenv | |
| # Load environment variables | |
| load_dotenv() | |
| # Configure logging | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| def update_wiki_paths(): | |
| arcadedb = SanatanDatabase() | |
| scripture_name = "divya_prabandham" | |
| # Query all verses using a simpler structure | |
| query = "MATCH (s:Scripture {name: $name})<-[:PART_OF]-(v:Verse) RETURN v" | |
| logger.info("Fetching all verses for %s...", scripture_name) | |
| results = arcadedb.run_cypher(query, {"name": scripture_name}) | |
| logger.info(f"DEBUG: Type of results: {type(results)}") | |
| if results: | |
| logger.info(f"DEBUG: Number of results: {len(results)}") | |
| logger.info(f"DEBUG: First result keys: {results[0].keys()}") | |
| else: | |
| logger.info("DEBUG: Results is empty or None") | |
| logger.info(f"Found {len(results)} verses. Updating wiki_path...") | |
| for r in results: | |
| v = r # Accessing directly, as ArcadeDB returns properties as root keys | |
| if not v or "global_id" not in v: | |
| continue | |
| old_wiki_path = v.get("wiki_path", "") | |
| # Properties required for new wiki_path | |
| prabandham = v.get("prabandham_name") | |
| decade = v.get("decade") | |
| padigam = v.get("chapter") # 'chapter' field maps to 'Padigam' in DP | |
| pos = v.get("position_in_chapter") | |
| if not all([prabandham, decade, padigam, pos]): | |
| logger.warning(f"Missing hierarchy data for verse {v.get('global_id')}: {prabandham}, {decade}, {padigam}, {pos}") | |
| continue | |
| # Construct new wiki_path | |
| # Example: Thiruvaimozhi__Decade_10__Padigam_10__10 | |
| new_wiki_path = f"{prabandham}__Decade_{decade}__Padigam_{padigam}__{pos}" | |
| if old_wiki_path == new_wiki_path: | |
| continue | |
| # Update in ArcadeDB | |
| update_query = """ | |
| MATCH (v:Verse {global_id: $global_id}) | |
| SET v.wiki_path = $new_wiki_path | |
| RETURN v | |
| """ | |
| try: | |
| arcadedb.run_cypher(update_query, { | |
| "global_id": v.get("global_id"), | |
| "new_wiki_path": new_wiki_path | |
| }) | |
| logger.info(f"Updated {v.get('global_id')}: {old_wiki_path} -> {new_wiki_path}") | |
| except Exception as e: | |
| logger.error(f"Failed to update {v.get('global_id')}: {e}") | |
| if __name__ == "__main__": | |
| update_wiki_paths() | |