Description
Three client methods accept payloads the server will always reject, discovered during the PR #70 sweep against campus weekly:
- Circles:
PATCH /circles/<id>/ requires name (description optional). Circles.Circle.update(**updates) accepts anything → surprise 422. Give it an explicit signature or guard, and consider exposing members PATCH (upsert access_value) — only add/remove exist today.
- Assignments:
PATCH /assignments/<id>/ rejects empty bodies (InvalidRequestError("Empty request body")). Assignments.Assignment.update(**updates) can send {}. Mirror Submissions.Submission.update()'s "at least one field" ValueError.
- Timetable:
POST /timetable/ 400s unless data contains the key lessongroups (using lesson_groups gets a rename suggestion in the error). Timetables.new() passes data through blindly — at minimum a docstring warning; a keyword-only guard would be better.
All three are client-side validation only; no server changes.
Description
Three client methods accept payloads the server will always reject, discovered during the PR #70 sweep against campus
weekly:PATCH /circles/<id>/requiresname(description optional).Circles.Circle.update(**updates)accepts anything → surprise 422. Give it an explicit signature or guard, and consider exposingmembersPATCH (upsertaccess_value) — onlyadd/removeexist today.PATCH /assignments/<id>/rejects empty bodies (InvalidRequestError("Empty request body")).Assignments.Assignment.update(**updates)can send{}. MirrorSubmissions.Submission.update()'s "at least one field" ValueError.POST /timetable/400s unlessdatacontains the keylessongroups(usinglesson_groupsgets a rename suggestion in the error).Timetables.new()passesdatathrough blindly — at minimum a docstring warning; a keyword-only guard would be better.All three are client-side validation only; no server changes.