fix requirements
This commit is contained in:
229
FASTAPI_ADMIN_1.0.4_FIX_SCRIPT.md
Normal file
229
FASTAPI_ADMIN_1.0.4_FIX_SCRIPT.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# 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**
|
||||
Reference in New Issue
Block a user