QuizGenerator 0.1.4__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- quizgenerator-0.3.1/.github/workflows/release.yaml +149 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/PKG-INFO +3 -1
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/contentast.py +415 -284
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/misc.py +96 -8
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/mixins.py +10 -1
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/memory_questions.py +1 -1
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/persistence_questions.py +78 -23
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/process.py +1 -2
- quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/__init__.py +0 -0
- quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/attention.py +192 -0
- quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/cnns.py +186 -0
- quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/matrices.py +24 -0
- quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/rnns.py +202 -0
- quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/text.py +201 -0
- quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/weight_counting.py +227 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/neural-network-basics/neural_network_questions.py +138 -94
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/question.py +3 -2
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/quiz.py +0 -1
- quizgenerator-0.3.1/example_files/scratch.yaml +72 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/pyproject.toml +3 -1
- quizgenerator-0.3.1/pyproject_prev.toml +75 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/uv.lock +526 -1
- quizgenerator-0.1.4/documentation/claude_todo.md +0 -253
- quizgenerator-0.1.4/documentation/custom_questions.md +0 -408
- quizgenerator-0.1.4/documentation/pypi_release_plan.md +0 -306
- quizgenerator-0.1.4/documentation/typst_integration_strategy.md +0 -237
- quizgenerator-0.1.4/example_files/scratch.yaml +0 -15
- quizgenerator-0.1.4/scripts/README.md +0 -61
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/.envrc +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/.github/pull_request_template.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/.gitignore +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/CLAUDE.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/CODEOWNERS +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/LICENSE +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/README.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/__main__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/canvas/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/canvas/canvas_interface.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/canvas/classes.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/constants.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/generate.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/logging.yaml +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/performance.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/basic.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/languages.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/math_questions.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/ostep13_vsfs.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_calculation.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_descent_questions.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/loss_calculations.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/misc.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/math_and_data/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/math_and_data/matrix_questions.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/math_and_data/vector_questions.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/neural-network-basics/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/tensorflow-intro/__init__.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/tensorflow-intro/tensorflow_questions.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/qrcode_generator.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/typst_utils.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/README.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/GRADING_GUIDE.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/LESSONS_LEARNED-adding_questions.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/PARAMETER_STANDARDS.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/README.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/WEB_UI_INTEGRATION.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/all_classes.yaml +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/cst334.yaml +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/cst463.yaml +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/exam_generation.yaml +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/specific_generators/cst334.caching.yaml +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/specific_generators/cst334.lab-address_translation.yaml +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/examples/README.md +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/examples/web_ui_integration_example.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/grade_from_qr.py +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/scripts/generate_practice_yaml.sh +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/scripts/print.sh +0 -0
- {quizgenerator-0.1.4 → quizgenerator-0.3.1}/scripts/vendor_lms_interface.py +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
name: Release on version bump
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main # change if your default branch is different
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
environment:
|
|
12
|
+
name: pypi
|
|
13
|
+
permissions:
|
|
14
|
+
contents: write # create tags & releases
|
|
15
|
+
id-token: write # PyPI trusted publishing
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout
|
|
19
|
+
uses: actions/checkout@v5
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0 # need history to read previous version
|
|
22
|
+
|
|
23
|
+
- name: Set up Python for tooling
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.12"
|
|
27
|
+
|
|
28
|
+
- name: Get previous version (from parent commit)
|
|
29
|
+
id: prev_version
|
|
30
|
+
run: |
|
|
31
|
+
BEFORE="${{ github.event.before }}"
|
|
32
|
+
|
|
33
|
+
# First commit / no parent? treat as "no previous version"
|
|
34
|
+
if [ "$BEFORE" = "0000000000000000000000000000000000000000" ] || [ -z "$BEFORE" ]; then
|
|
35
|
+
echo "No previous commit; setting previous version empty."
|
|
36
|
+
echo "version=" >> "$GITHUB_OUTPUT"
|
|
37
|
+
else
|
|
38
|
+
if git show "$BEFORE":pyproject.toml > pyproject_prev.toml 2>/dev/null; then
|
|
39
|
+
VERSION=$(python -c "import tomllib, pathlib; d = tomllib.loads(pathlib.Path('pyproject_prev.toml').read_text()); print(d['project']['version'])")
|
|
40
|
+
echo "previous version: $VERSION"
|
|
41
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
42
|
+
else
|
|
43
|
+
echo "No previous pyproject.toml found; setting previous version empty."
|
|
44
|
+
echo "version=" >> "$GITHUB_OUTPUT"
|
|
45
|
+
fi
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
- name: Get current version
|
|
49
|
+
id: curr_version
|
|
50
|
+
run: |
|
|
51
|
+
VERSION=$(python -c "import tomllib, pathlib; d = tomllib.loads(pathlib.Path('pyproject.toml').read_text()); print(d['project']['version'])")
|
|
52
|
+
echo "current version: $VERSION"
|
|
53
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
54
|
+
|
|
55
|
+
- name: Decide whether this is a release commit
|
|
56
|
+
id: decision
|
|
57
|
+
run: |
|
|
58
|
+
PREV="${{ steps.prev_version.outputs.version }}"
|
|
59
|
+
CURR="${{ steps.curr_version.outputs.version }}"
|
|
60
|
+
MSG="${{ github.event.head_commit.message }}"
|
|
61
|
+
|
|
62
|
+
echo "Previous version: '$PREV'"
|
|
63
|
+
echo "Current version: '$CURR'"
|
|
64
|
+
echo "Commit message: '$MSG'"
|
|
65
|
+
|
|
66
|
+
SHOULD_RELEASE=false
|
|
67
|
+
|
|
68
|
+
# Require version change AND 'release' in the commit message
|
|
69
|
+
if [ -n "$CURR" ] && [ "$CURR" != "$PREV" ]; then
|
|
70
|
+
if echo "$MSG" | grep -qi "release"; then
|
|
71
|
+
echo "Version changed and commit message indicates release."
|
|
72
|
+
SHOULD_RELEASE=true
|
|
73
|
+
else
|
|
74
|
+
echo "Version changed but commit message does not contain 'release'; not releasing."
|
|
75
|
+
fi
|
|
76
|
+
else
|
|
77
|
+
echo "Version did not change; not releasing."
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
echo "release=$SHOULD_RELEASE" >> "$GITHUB_OUTPUT"
|
|
81
|
+
|
|
82
|
+
- name: Stop if not a release
|
|
83
|
+
if: steps.decision.outputs.release != 'true'
|
|
84
|
+
run: |
|
|
85
|
+
echo "Not a release commit; skipping remaining steps."
|
|
86
|
+
exit 0
|
|
87
|
+
|
|
88
|
+
- name: Ensure tag does not already exist
|
|
89
|
+
if: steps.decision.outputs.release == 'true'
|
|
90
|
+
run: |
|
|
91
|
+
VERSION="${{ steps.curr_version.outputs.version }}"
|
|
92
|
+
TAG="v${VERSION}"
|
|
93
|
+
|
|
94
|
+
echo "Checking for existing tag $TAG"
|
|
95
|
+
if git rev-parse "$TAG" >/dev/null 2>&1; then
|
|
96
|
+
echo "Tag $TAG already exists. Aborting."
|
|
97
|
+
exit 1
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
- name: Create and push tag
|
|
101
|
+
if: steps.decision.outputs.release == 'true'
|
|
102
|
+
run: |
|
|
103
|
+
VERSION="${{ steps.curr_version.outputs.version }}"
|
|
104
|
+
TAG="v${VERSION}"
|
|
105
|
+
|
|
106
|
+
echo "Creating tag $TAG at $GITHUB_SHA"
|
|
107
|
+
|
|
108
|
+
git config user.name "github-actions[bot]"
|
|
109
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
110
|
+
|
|
111
|
+
git tag "$TAG" "$GITHUB_SHA"
|
|
112
|
+
git push origin "$TAG"
|
|
113
|
+
|
|
114
|
+
- name: Install uv
|
|
115
|
+
if: steps.decision.outputs.release == 'true'
|
|
116
|
+
uses: astral-sh/setup-uv@v6
|
|
117
|
+
|
|
118
|
+
- name: Install Python 3.13 for build
|
|
119
|
+
if: steps.decision.outputs.release == 'true'
|
|
120
|
+
run: uv python install 3.13
|
|
121
|
+
|
|
122
|
+
- name: Build
|
|
123
|
+
if: steps.decision.outputs.release == 'true'
|
|
124
|
+
run: uv build
|
|
125
|
+
|
|
126
|
+
- name: Upload dist artifacts
|
|
127
|
+
if: steps.decision.outputs.release == 'true'
|
|
128
|
+
uses: actions/upload-artifact@v4
|
|
129
|
+
with:
|
|
130
|
+
name: dist
|
|
131
|
+
path: dist/
|
|
132
|
+
|
|
133
|
+
- name: Publish to PyPI
|
|
134
|
+
if: steps.decision.outputs.release == 'true'
|
|
135
|
+
run: uv publish
|
|
136
|
+
|
|
137
|
+
- name: Create GitHub Release
|
|
138
|
+
if: steps.decision.outputs.release == 'true'
|
|
139
|
+
uses: softprops/action-gh-release@v2
|
|
140
|
+
with:
|
|
141
|
+
tag_name: v${{ steps.curr_version.outputs.version }}
|
|
142
|
+
name: v${{ steps.curr_version.outputs.version }}
|
|
143
|
+
body: |
|
|
144
|
+
Release v${{ steps.curr_version.outputs.version }}
|
|
145
|
+
|
|
146
|
+
- Version bumped in pyproject.toml
|
|
147
|
+
- Built with uv and published to PyPI.
|
|
148
|
+
- Artifacts attached below.
|
|
149
|
+
files: dist/*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: QuizGenerator
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Generate randomized quiz questions for Canvas LMS and PDF exams
|
|
5
5
|
Project-URL: Homepage, https://github.com/OtterDen-Lab/QuizGenerator
|
|
6
6
|
Project-URL: Documentation, https://github.com/OtterDen-Lab/QuizGenerator/tree/main/documentation
|
|
@@ -21,6 +21,7 @@ Requires-Dist: canvasapi==3.2.0
|
|
|
21
21
|
Requires-Dist: cryptography>=41.0.0
|
|
22
22
|
Requires-Dist: graphviz>=0.21
|
|
23
23
|
Requires-Dist: jinja2==3.1.3
|
|
24
|
+
Requires-Dist: keras>=3.12.0
|
|
24
25
|
Requires-Dist: markdown>=3.9
|
|
25
26
|
Requires-Dist: matplotlib
|
|
26
27
|
Requires-Dist: pylatex>=1.4.2
|
|
@@ -31,6 +32,7 @@ Requires-Dist: pyyaml==6.0.1
|
|
|
31
32
|
Requires-Dist: requests==2.32.2
|
|
32
33
|
Requires-Dist: segno>=1.6.0
|
|
33
34
|
Requires-Dist: sympy>=1.14.0
|
|
35
|
+
Requires-Dist: tensorflow>=2.20.0
|
|
34
36
|
Provides-Extra: grading
|
|
35
37
|
Requires-Dist: pillow>=10.0.0; extra == 'grading'
|
|
36
38
|
Requires-Dist: pyzbar>=0.1.9; extra == 'grading'
|