ai-learning-path-generator / fix_learning_path_indentation.py
“shubhamdhamal”
Deploy Flask app with Docker
7644eac
"""
Script to fix the indentation in src/learning_path.py
This adds proper try-except structure for observability tracking.
"""
import re
# Read the file
with open('src/learning_path.py', 'r', encoding='utf-8') as f:
content = f.read()
# Find the generate_path method and fix indentation
# The issue is that code after line 323 needs to be indented under the try block
# Pattern: Find from "relevant_docs = " to the end of generate_path method (before "def save_path")
# We need to indent everything between the try block and the except block
lines = content.split('\n')
fixed_lines = []
in_try_block = False
try_start_line = None
indent_needed = False
for i, line in enumerate(lines):
# Detect the start of the try block in generate_path
if 'try:' in line and i > 280 and i < 310: # Around line 300
in_try_block = True
try_start_line = i
fixed_lines.append(line)
continue
# Detect where indentation is missing (after the validation checks)
if in_try_block and line.strip().startswith('relevant_docs = '):
indent_needed = True
# Stop indenting at the except block or next method
if indent_needed and (line.strip().startswith('except Exception') or line.strip().startswith('def save_path')):
indent_needed = False
in_try_block = False
# Add the except block before this line if it's "def save_path"
if line.strip().startswith('def save_path'):
# Add proper except block
fixed_lines.append('')
fixed_lines.append(' except Exception as e:')
fixed_lines.append(' # Mark as failed')
fixed_lines.append(' error_message = str(e)')
fixed_lines.append(' ')
fixed_lines.append(' # Log failure metrics')
fixed_lines.append(' generation_time_ms = (time.time() - generation_start_time) * 1000')
fixed_lines.append(' self.obs_manager.log_metric("path_generation_success", 0.0, {')
fixed_lines.append(' "topic": topic,')
fixed_lines.append(' "expertise_level": expertise_level,')
fixed_lines.append(' "error": error_message,')
fixed_lines.append(' "duration_ms": generation_time_ms,')
fixed_lines.append(' "user_id": user_id')
fixed_lines.append(' })')
fixed_lines.append(' ')
fixed_lines.append(' self.obs_manager.log_event("path_generation_failed", {')
fixed_lines.append(' "topic": topic,')
fixed_lines.append(' "expertise_level": expertise_level,')
fixed_lines.append(' "error": error_message,')
fixed_lines.append(' "generation_time_ms": generation_time_ms,')
fixed_lines.append(' "user_id": user_id')
fixed_lines.append(' })')
fixed_lines.append(' ')
fixed_lines.append(' # Re-raise the exception')
fixed_lines.append(' raise')
fixed_lines.append('')
# Add indentation if needed
if indent_needed and line and not line.startswith(' '):
# Add 4 more spaces of indentation
if line.startswith(' '):
fixed_lines.append(' ' + line)
else:
fixed_lines.append(line)
else:
fixed_lines.append(line)
# Write back
with open('src/learning_path.py', 'w', encoding='utf-8') as f:
f.write('\n'.join(fixed_lines))
print("✅ Fixed indentation in src/learning_path.py")
print("⚠️ Please review the changes manually to ensure correctness")