Migrate from nbdev to MkDocs, remove GroupEng dependency#18
Merged
scott-yj-yang merged 24 commits intomainfrom Feb 28, 2026
Merged
Migrate from nbdev to MkDocs, remove GroupEng dependency#18scott-yj-yang merged 24 commits intomainfrom
scott-yj-yang merged 24 commits intomainfrom
Conversation
Replace nbdev notebook-first workflow with a standard Python package structure to enable agentic coding workflows. Source .py files are now the canonical code, Quarto docs are kept as-is for the documentation site. - Add pyproject.toml with hatchling build backend (replaces setup.py + settings.ini) - Clean nbdev markers from source .py files and add missing import os in assign.py - Remove nbdev artifacts: _modidx.py, _proc/, .gitattributes, .gitconfig - Remove nbdev config: settings.ini, setup.py, MANIFEST.in, environment.yml - Clean nbdev directives from API and tutorial notebooks - Inline nbs/nbdev.yml metadata into nbs/_quarto.yml - Replace CI workflows: nbdev-ci -> uv+pytest, quarto-ghp -> direct Quarto render - Update .gitignore and README.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
pandas 3.0 and NumPy 2.4 both require Python 3.11+. Bumping to 3.12 aligns with current ecosystem and keeps the project on supported versions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…reate_github_group - Remove unused `import os` from assign.py - Add TestCreateCanvasGroup: verifies assign_canvas_group calls, suffix handling, explicit group category, and empty-groups ValueError guard - Add TestCreateGitHubGroup: verifies create_group_repo calls, missing username handling, and empty-groups ValueError guard - Rename TestAssignGroupFromDataFrame to TestLoadGroups for clarity Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add **repo_kwargs to create_github_group() so callers can forward repo_template, description, team_slug, team_permission, etc. - Remove unused `call` import from test_assign.py - Add test for constructor `groups` parameter auto-loading - Add test for create_canvas_group with group_category=None but explicit in_group_category provided - Add test verifying **repo_kwargs are forwarded to create_group_repo Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Notebooks with pre-computed outputs can now be used as documentation pages alongside markdown, giving the same output-style rendering that nbdev/Quarto provided. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nd credentials Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…conversations Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…flow Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Collaborator
Author
Code reviewFound 3 issues:
CanvasGroupy/CanvasGroupy/assign.py Lines 121 to 128 in f7b132b
CanvasGroupy/CanvasGroupy/github.py Lines 440 to 445 in f7b132b
Lines 25 to 30 in f7b132b 🤖 Generated with Claude Code - If this code review was useful, please react with 👍. Otherwise, react with 👎. |
1. assign.py: add UserWarning when load_groups() detects numeric student_id values (likely Canvas IDs instead of email prefixes), and clarify docstring that student_id must be the SIS Login ID. 2. github.py: add missing `continue` in release_feedback() exception handler so a failed repo lookup skips to the next repo instead of using an undefined/stale variable. 3. pyproject.toml: add missing `requests` to dependencies (used by canvas.py fetch_username_from_quiz). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR modernizes CanvasGroupy from an nbdev notebook-first project into a standard Python package with proper documentation and comprehensive test coverage.
Breaking changes
AssignGroupnow accepts CSV files or DataFrames viaload_groups()instead of relying on GroupEngmaintagged asv0.0.1)Package & build
pyproject.tomlwith hatchling build backend**repo_kwargspass-through toAssignGroup.create_github_group()Documentation (MkDocs Material)
Test suite (76 tests, all mock-based)
tests/conftest.py-- shared fixtures for Canvas, GitHub, and credentialstests/test_assign.py-- 14 tests: load groups, create Canvas/GitHub groupstests/test_canvas.py-- 25 tests: auth, course setup, email lookup, group operations, grade posting, conversationstests/test_github.py-- 22 tests: auth, repo operations, collaborators, teams, file ops, issues, invitationstests/test_grading.py-- 15 tests: issue fetching, score parsing, graded checks, grade posting, end-to-end workflowAll tests use
unittest.mock-- zero real API calls, zero credentials needed on CI.Cleanup
nbs/,dev_nbs/,test_nbs/directories_modidx.py,_proc/, settings.ini, setup.py, etc.)tests/canvas_test.pyplaceholderTest plan
uv run pytest tests/ -vpasses (76 tests in 0.25s)uv run mkdocs build --strictsucceedsuv run mkdocs serverenders correctly locallypip install -e .🤖 Generated with Claude Code