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...
Scanned 5/27/2026
Install via CLI
openskills install ArabelaTso/Skills-4-SE---
name: framework-migration-assistant
description: 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.
---
# Framework 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
```bash
# Navigate to your repository
cd /path/to/your/repo
# Run migration
python scripts/migrate.py . --from flask --to fastapi
```
The migration process will:
1. Create a migration branch
2. Analyze your codebase
3. Update dependencies
4. Migrate routes and handlers
5. Update configuration
6. Adapt tests
7. Generate a summary report
### Example: Flask to FastAPI
```bash
# 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()`, `@app.post()`, etc.
- Request handling: `request.args` → query parameters, `request.json` → Pydantic models
- Response handling: `jsonify()` → direct return
- Configuration: Flask config → Pydantic Settings
- Tests: Flask test client → FastAPI TestClient
- Dependencies: Flask packages → FastAPI equivalents
**Example transformation:**
Before (Flask):
```python
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
user = db.get_user(user_id)
return jsonify(user)
```
After (FastAPI):
```python
@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.txt`
- `pyproject.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
```bash
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:
```python
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:
1. **Review the changes**
```bash
git log --oneline
git diff main..migrate-flask-to-fastapi
```
2. **Install new dependencies**
```bash
pip install -r requirements.txt
```
3. **Run tests**
```bash
pytest
```
4. **Manual review needed for:**
- Complex authentication logic
- Custom middleware
- Database connection strings
- Third-party integrations
- Advanced error handling
5. **Test the application**
```bash
uvicorn main:app --reload
```
6. **Merge when ready**
```bash
git checkout main
git merge migrate-flask-to-fastapi
```
## Reference Documentation
- **`references/framework_comparison.md`** - Detailed comparison of Flask, Django, and FastAPI including architecture, routing, request handling, and performance
- **`references/migration_guide.md`** - Comprehensive migration guide with step-by-step instructions, common patterns, troubleshooting, and post-migration checklist
- **`references/migration_patterns.md`** - Common migration patterns for routes, requests, responses, authentication, database operations, and testing
## Example Applications
Example applications are provided in `assets/`:
- `example_flask_app.py` - Flask application before migration
- `example_fastapi_app.py` - Same application after migration to FastAPI
Compare these files to understand the transformations applied.
## Migration Summary
After migration, review `MIGRATION_SUMMARY.json`:
```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 `@pytest.mark.asyncio` and install `pytest-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.
No comments yet. Be the first to comment!