Skills-4-SE framework-migration-assistant
Automatically migrate Python web applications between frameworks (Flask → FastAPI, Django → FastAPI). Use when you need to migrate an existing web application to a modern framework while preserving functionality. The skill analyzes the codebase, updates routes, handlers, configuration, dependency injection patterns, and tests. Creates git commits for each migration phase and generates a comprehensive summary of all changes. Supports automatic dependency updates, code transformations, and test adaptations.
git clone https://github.com/ArabelaTso/Skills-4-SE
T=$(mktemp -d) && git clone --depth=1 https://github.com/ArabelaTso/Skills-4-SE "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/framework-migration-assistant" ~/.claude/skills/arabelatso-skills-4-se-framework-migration-assistant && rm -rf "$T"
skills/framework-migration-assistant/SKILL.mdFramework Migration Assistant
Overview
This skill automatically migrates Python web applications between frameworks, transforming code, configuration, and tests while preserving existing functionality. It handles route migration, request/response patterns, dependency injection, configuration updates, and test adaptations, committing changes incrementally with detailed summaries.
Quick Start
Basic Usage
# Navigate to your repository cd /path/to/your/repo # Run migration python scripts/migrate.py . --from flask --to fastapi
The migration process will:
- Create a migration branch
- Analyze your codebase
- Update dependencies
- Migrate routes and handlers
- Update configuration
- Adapt tests
- Generate a summary report
Example: Flask to FastAPI
# Migrate Flask app to FastAPI python scripts/migrate.py /path/to/flask-app --from flask --to fastapi # Output: # ✓ Created migration branch: migrate-flask-to-fastapi # ✓ Analyzing codebase... # ✓ Found 15 route files # ✓ Found 23 test files # ✓ Migrating dependencies... # ✓ Migrating routes... # ✓ Migrating configuration... # ✓ Migrating tests... # ✓ Migration completed successfully!
Supported Migration Paths
Flask → FastAPI
What gets migrated:
- Route decorators:
→@app.route()
,@app.get()
, etc.@app.post() - Request handling:
→ query parameters,request.args
→ Pydantic modelsrequest.json - Response handling:
→ direct returnjsonify() - Configuration: Flask config → Pydantic Settings
- Tests: Flask test client → FastAPI TestClient
- Dependencies: Flask packages → FastAPI equivalents
Example transformation:
Before (Flask):
@app.route('/users/<int:user_id>', methods=['GET']) def get_user(user_id): user = db.get_user(user_id) return jsonify(user)
After (FastAPI):
@app.get('/users/{user_id}') async def get_user(user_id: int) -> UserSchema: user = await db.get_user(user_id) return user
Django → FastAPI
What gets migrated:
- URL patterns → FastAPI routes
- Django views → FastAPI path operations
- Django ORM references → SQLAlchemy patterns
- Settings module → Pydantic Settings
- Django test cases → FastAPI tests
Migration Process
Phase 1: Preparation
The migration tool automatically:
- Validates the repository is a git repo
- Detects the source framework (if not specified)
- Creates a migration branch
- Analyzes the codebase structure
Phase 2: Dependency Migration
Updates package dependencies:
requirements.txtpyproject.toml- Replaces framework-specific packages
- Adds required FastAPI dependencies
Example changes:
flask>=2.0.0 → fastapi>=0.104.0 werkzeug>=2.0.0 → uvicorn[standard]>=0.24.0 flask-cors>=3.0.0 → fastapi-cors>=0.0.6
Phase 3: Route Migration
Transforms route definitions and handlers:
- Updates route decorators
- Converts HTTP method specifications
- Transforms path parameters
- Updates request/response handling
- Adds async/await where needed
- Adds type hints for validation
Phase 4: Configuration Migration
Updates configuration files:
- Migrates Flask config to Pydantic Settings
- Updates environment variable handling
- Converts middleware setup
- Updates CORS configuration
- Creates new config files if needed
Phase 5: Test Migration
Adapts test files:
- Updates test client initialization
- Converts test assertions
- Updates request methods
- Adapts fixtures and mocks
- Adds async test support
Phase 6: Summary Generation
Creates a comprehensive report:
- Total changes made
- Files modified by category
- Migration plan executed
- Next steps for manual review
- Saved as
MIGRATION_SUMMARY.json
Using the Migration Scripts
Main Migration Script
python scripts/migrate.py <repo_path> --from <source> --to <target> # Options: # repo_path: Path to the repository # --from: Source framework (flask, django, or auto) # --to: Target framework (fastapi)
Individual Migration Modules
You can also run individual migration steps:
from migrate_dependencies import DependencyMigrator from migrate_routes import RouteMigrator from migrate_config import ConfigMigrator from migrate_tests import TestMigrator # Run specific migration migrator = RouteMigrator(repo_path, 'flask', 'fastapi') migrator.migrate()
Post-Migration Steps
After migration completes:
-
Review the changes
git log --oneline git diff main..migrate-flask-to-fastapi -
Install new dependencies
pip install -r requirements.txt -
Run tests
pytest -
Manual review needed for:
- Complex authentication logic
- Custom middleware
- Database connection strings
- Third-party integrations
- Advanced error handling
-
Test the application
uvicorn main:app --reload -
Merge when ready
git checkout main git merge migrate-flask-to-fastapi
Reference Documentation
- Detailed comparison of Flask, Django, and FastAPI including architecture, routing, request handling, and performancereferences/framework_comparison.md
- Comprehensive migration guide with step-by-step instructions, common patterns, troubleshooting, and post-migration checklistreferences/migration_guide.md
- Common migration patterns for routes, requests, responses, authentication, database operations, and testingreferences/migration_patterns.md
Example Applications
Example applications are provided in
assets/:
- Flask application before migrationexample_flask_app.py
- Same application after migration to FastAPIexample_fastapi_app.py
Compare these files to understand the transformations applied.
Migration Summary
After migration, review
MIGRATION_SUMMARY.json:
{ "source_framework": "flask", "target_framework": "fastapi", "total_changes": 47, "changes_by_type": { "dependency": 5, "route": 15, "config": 4, "test": 23 }, "files_modified": [...], "next_steps": [...] }
Tips
- Always commit or backup your code before migration
- Review each migration commit individually
- Test thoroughly after migration
- Update documentation to reflect framework changes
- Consider performance improvements with async/await
- Use the generated API documentation (FastAPI auto-generates OpenAPI docs)
- Consult reference documentation for complex patterns
- Run tests frequently during manual adjustments
Troubleshooting
Issue: Import errors after migration
- Solution: Run
pip install -r requirements.txt
Issue: Tests fail with async errors
- Solution: Add
and install@pytest.mark.asynciopytest-asyncio
Issue: Database connections fail
- Solution: Update connection strings for async SQLAlchemy
Issue: CORS errors
- Solution: Configure CORS middleware in FastAPI
See
references/migration_guide.md for detailed troubleshooting.