Fix CLI argument handling for all commands

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Daniel 2026-04-08 20:57:58 +02:00
parent affd2fc116
commit 197181f6f9

View file

@ -44,7 +44,7 @@ def reset_password(email: str, new_password: str):
db.close()
def list_users():
def list_users(args=None):
db = SessionLocal()
try:
users = db.query(User).order_by(User.id).all()
@ -119,7 +119,7 @@ def delete_user(email: str):
db.close()
def stats():
def stats(args=None):
from app.models.quiz import Quiz
from app.models.question import Question
from app.models.attempt import QuizAttempt
@ -160,28 +160,31 @@ def stats():
db.close()
def list_courses():
def list_courses(args=None):
from app.models.course import Course, CourseEnrollment
from sqlalchemy import func
db = SessionLocal()
try:
counts = dict(db.query(CourseEnrollment.course_id, func.count()).group_by(CourseEnrollment.course_id).all())
courses = db.query(Course).order_by(Course.id).all()
print(f"{'ID':<5} {'Title':<35} {'Status':<12} {'Creator':<20} {'Enrolled':<10}")
print("-" * 82)
for c in courses:
creator = db.query(User).filter(User.id == c.user_id).first()
name = creator.name if creator else "?"
print(f"{c.id:<5} {(c.title or '-')[:34]:<35} {c.status:<12} {name[:19]:<20} {c.enrolled_count or 0:<10}")
enrolled = counts.get(c.id, 0)
print(f"{c.id:<5} {(c.title or '-')[:34]:<35} {c.status:<12} {name[:19]:<20} {enrolled:<10}")
print(f"\n{len(courses)} course(s)")
finally:
db.close()
def list_quizzes(show_all=False):
def list_quizzes(args=None):
from app.models.quiz import Quiz
db = SessionLocal()
try:
q = db.query(Quiz)
if not show_all:
if not (args and "--all" in args):
q = q.filter(Quiz.deleted_at.is_(None))
quizzes = q.order_by(Quiz.id).all()
print(f"{'ID':<5} {'Title':<35} {'Qs':<5} {'Mode':<10} {'Type':<10} {'Status':<10}")
@ -195,7 +198,7 @@ def list_quizzes(show_all=False):
db.close()
def list_docs():
def list_docs(args=None):
from app.models.pdf_document import PDFDocument
db = SessionLocal()
try:
@ -214,7 +217,7 @@ def list_docs():
db.close()
def fix_stuck_docs():
def fix_stuck_docs(args=None):
from datetime import datetime, timedelta
from app.models.pdf_document import PDFDocument
db = SessionLocal()
@ -261,7 +264,7 @@ def reprocess_doc(doc_id: str):
db.close()
def cleanup_redis():
def cleanup_redis(args=None):
from app.config import settings
import redis as redis_lib
r = redis_lib.from_url(settings.REDIS_URL, decode_responses=True)
@ -281,7 +284,7 @@ def cleanup_redis():
print(f"Cleaned {expired} orphaned keys out of {len(keys) + len(session_keys)} total")
def export_users():
def export_users(args=None):
db = SessionLocal()
try:
users = db.query(User).order_by(User.id).all()
@ -303,7 +306,7 @@ COMMANDS = {
"delete-user": (lambda args: delete_user(args[0]), 1),
"stats": (stats, 0),
"list-courses": (list_courses, 0),
"list-quizzes": (lambda args: list_quizzes("--all" in args), 0),
"list-quizzes": (list_quizzes, 0),
"list-docs": (list_docs, 0),
"fix-stuck-docs": (fix_stuck_docs, 0),
"reprocess-doc": (lambda args: reprocess_doc(args[0]), 1),
@ -331,6 +334,6 @@ if __name__ == "__main__":
print(f"Error: '{cmd}' requires {min_args} argument(s), got {len(rest)}")
sys.exit(1)
result = fn(rest) if min_args > 0 else fn()
result = fn(rest) if min_args > 0 else fn(rest)
if result is False:
sys.exit(1)