Files
yellow-bank-soal/FASTAPI_ADMIN_1.0.4_FIX_SCRIPT.md
Dwindi Ramadhana 436bcf93be fix requirements
2026-03-22 07:32:58 +07:00

230 lines
5.7 KiB
Markdown

# 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**