# FastAPI Admin 1.0.4 - Complete Fix Script **Date:** March 22, 2026 **Purpose:** Fix all compatibility issues after `git pull` resets the code --- ## Quick Fix Script Run this entire script after every `git pull`: ```bash #!/bin/bash # File: fix_fastapi_admin_1.0.4.sh # Usage: chmod +x fix_fastapi_admin_1.0.4.sh && ./fix_fastapi_admin_1.0.4.sh PROJECT_DIR="/www/wwwroot/irt-bank-soal" echo "=== Fixing requirements.txt ===" sed -i 's/fastapi-admin>=1.4.0/fastapi-admin>=1.0.0/g' $PROJECT_DIR/requirements.txt echo "=== Fixing inputs.Select (remove options parameter) ===" sed -i 's/inputs\.Select(options=\[[^]]*\], /inputs.Select(/g' $PROJECT_DIR/app/admin.py sed -i 's/inputs\.Select(options=\[[^]]*\])/inputs.Select()/g' $PROJECT_DIR/app/admin.py echo "=== Fixing displays.Select -> Display ===" sed -i 's/displays\.Select(choices=\[[^]]*\])/displays.Display()/g' $PROJECT_DIR/app/admin.py echo "=== Fixing displays.DateTime -> DatetimeDisplay ===" sed -i 's/displays\.DateTime()/displays.DatetimeDisplay()/g' $PROJECT_DIR/app/admin.py echo "=== Fixing displays.Text -> Display ===" sed -i 's/displays\.Text([^)]*)/displays.Display()/g' $PROJECT_DIR/app/admin.py echo "=== Fixing displays.Number -> Display ===" sed -i 's/displays\.Number([^)]*)/displays.Display()/g' $PROJECT_DIR/app/admin.py echo "=== Fixing admin_app.settings (comment out) ===" # Comment out settings lines that don't exist in 1.0.4 sed -i 's/^\(\s*\)admin_app\.settings\./\1# admin_app.settings./g' $PROJECT_DIR/app/admin.py echo "=== Reinstalling dependencies ===" cd $PROJECT_DIR source venv/bin/activate pip install -r requirements.txt echo "=== Restarting PM2 ===" pm2 restart irt-bank-soal echo "=== Done! Checking logs ===" sleep 3 pm2 logs irt-bank-soal --lines 15 ``` --- ## One-Liner Command (Copy-Paste) Run this single command to fix everything: ```bash cd /www/wwwroot/irt-bank-soal && \ sed -i 's/fastapi-admin>=1.4.0/fastapi-admin>=1.0.0/g' requirements.txt && \ sed -i 's/inputs\.Select(options=\[[^]]*\], /inputs.Select(/g' app/admin.py && \ sed -i 's/inputs\.Select(options=\[[^]]*\])/inputs.Select()/g' app/admin.py && \ sed -i 's/displays\.Select(choices=\[[^]]*\])/displays.Display()/g' app/admin.py && \ sed -i 's/displays\.DateTime()/displays.DatetimeDisplay()/g' app/admin.py && \ sed -i 's/displays\.Text([^)]*)/displays.Display()/g' app/admin.py && \ sed -i 's/displays\.Number([^)]*)/displays.Display()/g' app/admin.py && \ sed -i 's/^\(\s*\)admin_app\.settings\./\1# admin_app.settings./g' app/admin.py && \ source venv/bin/activate && pip install -r requirements.txt && \ pm2 restart irt-bank-soal && sleep 3 && pm2 logs irt-bank-soal --lines 15 ``` --- ## Individual Fixes Explained ### 1. requirements.txt ```bash # Change: fastapi-admin>=1.4.0 # To: fastapi-admin>=1.0.0 ``` ### 2. inputs.Select (8+ occurrences) ```bash # Change: input_=inputs.Select(options=["ctt", "irt", "hybrid"], default="ctt") # To: input_=inputs.Select(default="ctt") ``` ### 3. displays.Select (8+ occurrences) ```bash # Change: display=displays.Select(choices=["ctt", "irt", "hybrid"]) # To: display=displays.Display() ``` ### 4. displays.DateTime (12+ occurrences) ```bash # Change: display=displays.DateTime() # To: display=displays.DatetimeDisplay() ``` ### 5. displays.Text ```bash # Change: display=displays.Text(maxlen=100) # To: display=displays.Display() ``` ### 6. displays.Number ```bash # Change: display=displays.Number() # To: display=displays.Display() ``` ### 7. admin_app.settings (Lines ~602-606) ```bash # Comment out these lines (API doesn't exist in 1.0.4): # 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" # admin_app.settings.auth_provider = AdminAuthProvider() ``` --- ## Verify Fix After running the fix: ```bash # Test API curl http://127.0.0.1:8000/ # Expected response: # {"status": "healthy", "project_name": "IRT Bank Soal", "version": "1.0.0"} ``` --- ## Available Classes Reference ### fastapi_admin.widgets.inputs (1.0.4) | Class | Parameters | |-------|------------| | `Select` | `help_text`, `default`, `null`, `disabled` | | `Input` | standard | | `TextArea` | standard | | `DateTime` | standard | | `Number` | standard | | `Password` | standard | | `Email` | standard | | `File` | standard | | `Image` | standard | | `Switch` | standard | | `Editor` | standard | | `Json` | standard | ### fastapi_admin.widgets.displays (1.0.4) | Class | Notes | |-------|-------| | `Display` | Generic display (use for most fields) | | `DatetimeDisplay` | For datetime fields | | `DateDisplay` | For date fields | | `Boolean` | For boolean fields | | `Image` | For image fields | | `Json` | For JSON fields | | `InputOnly` | Input only | **NOT available:** `Select`, `Text`, `Number` --- ## Permanent Solution To avoid fixing after every `git pull`, update the source code in the git repository: 1. On your local machine, apply all fixes to `app/admin.py` 2. Update `requirements.txt` to use `fastapi-admin>=1.0.0` 3. Commit and push: ```bash git add app/admin.py requirements.txt git commit -m "fix: compatibility with fastapi-admin 1.0.4" git push origin main ``` Then on server: ```bash git pull source venv/bin/activate pip install -r requirements.txt pm2 restart irt-bank-soal ``` --- ## Troubleshooting ### Still getting errors after fix? 1. Check if sed worked: ```bash grep -n "inputs.Select(options" /www/wwwroot/irt-bank-soal/app/admin.py grep -n "displays.Select(choices" /www/wwwroot/irt-bank-soal/app/admin.py grep -n "admin_app.settings" /www/wwwroot/irt-bank-soal/app/admin.py ``` 2. If any matches found, the sed didn't work. Try manual fix. 3. Check PM2 logs for new errors: ```bash pm2 logs irt-bank-soal --lines 50 ``` --- **Document End**