From 7ddba1e0be0d4074e5491c814e4d329cf8ddb470 Mon Sep 17 00:00:00 2001 From: Andrew Scholer Date: Thu, 30 Jul 2026 13:11:57 -0700 Subject: [PATCH 1/2] Fix: course creation - prevent comparison error for books with None shelf_section --- bases/rsptx/admin_server_api/routers/instructor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bases/rsptx/admin_server_api/routers/instructor.py b/bases/rsptx/admin_server_api/routers/instructor.py index 2f615b0b8..808fcd17c 100644 --- a/bases/rsptx/admin_server_api/routers/instructor.py +++ b/bases/rsptx/admin_server_api/routers/instructor.py @@ -1320,7 +1320,7 @@ async def get_create_course_page(request: Request, user=Depends(auth_manager)): course_list = await fetch_library_books() # Convert LibraryValidator objects to dicts for template compatibility course_list = [c.dict() for c in course_list if c.for_classes] - sections = sorted({c["shelf_section"] for c in course_list}) + sections = sorted({c["shelf_section"] or "Misc" for c in course_list}) context = { "request": request, "course_list": course_list, @@ -1447,7 +1447,7 @@ async def post_create_course_page( course_list = await fetch_library_books() # Convert LibraryValidator objects to dicts for template compatibility course_list = [c.dict() for c in course_list if c.for_classes] - sections = sorted({c["shelf_section"] for c in course_list}) + sections = sorted({c["shelf_section"] or "Misc" for c in course_list}) context = { "request": request, From f179fc938f6afbf778fef0d18c65f88a2a92b76b Mon Sep 17 00:00:00 2001 From: Andrew Scholer Date: Sun, 2 Aug 2026 10:33:36 -0700 Subject: [PATCH 2/2] New books get default shelf_section if not provided --- components/rsptx/db/crud/library.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/rsptx/db/crud/library.py b/components/rsptx/db/crud/library.py index a7b0f1e75..de6f3b0a5 100644 --- a/components/rsptx/db/crud/library.py +++ b/components/rsptx/db/crud/library.py @@ -65,7 +65,9 @@ async def create_library_book(bookid: str, vals: Dict[str, Any]) -> None: :param vals: Dict[str, Any], the dictionary containing the properties of the book :return: None """ - new_book = Library(**vals, basecourse=bookid) + book_vals = {"shelf_section": "Misc", **vals} + new_book = Library(**book_vals, basecourse=bookid) + async with async_session.begin() as session: session.add(new_book)