# FastAPI Admin 1.0.4 Migration Guide **Date:** March 22, 2026 **Status:** In Progress - Needs Completion **Priority:** High (Blocking Deployment) --- ## Problem The `requirements.txt` specified `fastapi-admin>=1.4.0` but only version `1.0.4` is available on PyPI. The API between these versions is completely different, causing multiple `AttributeError` crashes on startup. --- ## What's Been Fixed (Partially) ### 1. `inputs.Select` - Line 135, 141, 147, 189, 223, 255, 285, 350 **Before (1.4.0 API):** ```python input_=inputs.Select(options=["ctt", "irt", "hybrid"], default="ctt") ``` **After (1.0.4 API):** ```python input_=inputs.Select(default="ctt") # No 'options' parameter ``` **Fix Applied:** ✅ Yes (via sed) --- ### 2. `displays.Select` - Multiple lines **Before:** ```python display=displays.Select(choices=["ctt", "irt", "hybrid"]) ``` **After:** ```python display=displays.Display() # Select doesn't exist ``` **Fix Applied:** ✅ Yes (via sed) --- ### 3. `displays.DateTime` - Multiple lines **Before:** ```python display=displays.DateTime() ``` **After:** ```python display=displays.DatetimeDisplay() # Note the capital 'D' and lowercase 'i' ``` **Fix Applied:** ✅ Yes (via sed) --- ### 4. `displays.Text` - Line 230+ **Before:** ```python display=displays.Text(maxlen=100) ``` **After:** ```python display=displays.Display() # Text doesn't exist ``` **Fix Applied:** ✅ Yes (via sed) --- ## What Still Needs Fixing ### 5. `admin_app.settings` - Lines 602-606 **Current Error:** ``` AttributeError: 'FastAPIAdmin' object has no attribute 'settings' ``` **Current Code (Lines 600-610):** ```python # Configure admin app admin_app.settings.logo_url = "/static/logo.png" admin_app.settings.site_title = "IRT Bank Soal Admin" admin_app.settings.site_description = "Admin Panel for Adaptive Question Bank System" # Register authentication provider admin_app.settings.auth_provider = AdminAuthProvider() ``` **Needs Investigation:** Check how to configure FastAPIAdmin in 1.0.4: ```bash python3 -c "from fastapi_admin.app import app; print(dir(app))" ``` Likely need to pass settings during initialization or use a different configuration method. --- ### 6. Custom Link Resources - Lines 617-620 **Current Code:** ```python # Register dashboard links admin_app.register(CalibrationDashboardLink) admin_app.register(ItemStatisticsLink) admin_app.register(SessionOverviewLink) ``` **Needs Investigation:** Check if `Link` resource type exists in 1.0.4 and if `admin_app.register()` works the same way. --- ## Available Classes in 1.0.4 ### `fastapi_admin.widgets.inputs` ``` Color, Date, DateTime, DisplayOnly, Editor, Email, Enum, File, FileUpload, ForeignKey, Image, Input, Json, List, ManyToMany, Model, Number, Password, Radio, RadioEnum, Select, Switch, Text, TextArea ``` **Note:** `Select` only accepts: `help_text`, `default`, `null`, `disabled` ### `fastapi_admin.widgets.displays` ``` Boolean, DateDisplay, DatetimeDisplay, Display, Image, InputOnly, Json ``` **Note:** No `Select`, `Text`, `Number` - use `Display` instead --- ## Commands to Complete Migration ### Step 1: Check FastAPIAdmin available attributes ```bash cd /www/wwwroot/irt-bank-soal source venv/bin/activate python3 -c "from fastapi_admin.app import app; print([x for x in dir(app) if not x.startswith('_')])" ``` ### Step 2: Read the create_admin_app function ```bash sed -n '590,630p' /www/wwwroot/irt-bank-soal/app/admin.py ``` ### Step 3: Check how to initialize FastAPIAdmin properly Look at fastapi-admin 1.0.4 documentation or source code to understand: - How to set logo_url - How to set site_title - How to set site_description - How to register auth provider - How to register resources ### Step 4: Fix the admin configuration Rewrite `create_admin_app()` function to use 1.0.4 API ### Step 5: Test ```bash pm2 restart irt-bank-soal sleep 3 pm2 logs irt-bank-soal --lines 10 curl http://127.0.0.1:8000/ ``` --- ## Quick Fix Option (Disable Admin Panel) If admin panel is not immediately needed, temporarily disable it: **In `app/main.py` line 19:** ```python # Temporarily disabled for 1.0.4 migration # from app.admin import admin as admin_app admin_app = None ``` **And comment out the mounting code:** ```python # if admin_app: # app.mount("/admin", admin_app) ``` This allows the main API to run while admin panel is being fixed. --- ## Files Modified | File | Status | |------|--------| | `requirements.txt` | Changed `fastapi-admin>=1.4.0` to `fastapi-admin>=1.0.0` | | `app/admin.py` | Partially fixed (inputs.Select, displays.*) | --- ## Remaining Tasks - [ ] Fix `admin_app.settings` configuration - [ ] Verify `admin_app.register()` works for Model resources - [ ] Verify Link resources work - [ ] Test admin panel at `/admin` endpoint - [ ] Document final working configuration --- ## Reference: Full Admin File To see the full admin.py file: ```bash cat /www/wwwroot/irt-bank-soal/app/admin.py ``` --- **Document End** **Next Agent:** Complete the admin configuration fix and verify the app starts successfully.