FeedbackFruits: detailed FeedbackFruits data through Canvas
FeedbackFruits (FBF) sends Canvas only an aggregate: one grade per student and assignment. This package fetches the details behind it, using nothing but your Canvas API token:
- peer reviews: who reviewed whom, the level and score on each rubric criterion, the comments, the reviewees' ratings of their reviews and the students' reflections;
- grade breakdowns: what each student's FBF grade is made of, facet by facet, checked against the score Canvas holds;
- discussions: the threads of comments, questions and answers in video and document activities, with their positions.
It is not made by, or affiliated with, FeedbackFruits. It plays the browser's part in the LTI launch from Canvas and then reads FBF's own API, which is not public and changes without notice; see When FeedbackFruits changes below.
Installation
pip install FeedbackFruits
This installs the fbf command. It uses the configuration of
canvaslms, so log in once with
canvaslms login
Your token must be a manually generated user token (the usual kind), since Canvas grants the launch only to unscoped tokens.
Usage
The commands select courses and assignments with the same options as
canvaslms: -c for courses, -a for assignments, -A for assignment
groups and -M for modules, each a regular expression. They print
tab-separated rows (-d sets the delimiter), or JSON with --json.
fbf reviews -c DD1310 -a "Peer review" # one row per criterion
fbf reviews -c DD1310 -a "Peer review" --long # one row per comment
fbf reviews -c DD1310 --feedback # reviewees' ratings
fbf reviews -c DD1310 --reflections
fbf progress -c DD1310 -a "Video 1" # grade per student
fbf progress -c DD1310 --long # one row per facet
fbf progress -c DD1310 --mismatch # Canvas differs from FBF
fbf progress -c DD1310 --unpublished # points not yet sent
fbf discussions -c DD1310 -a "Lecture video" # one row per thread
fbf discussions -c DD1310 -a "Lecture video" -l # one row per post
The output contains the students' names and texts: treat it as the personal data it is.
Only assignments that someone has opened in FBF in this course round have data; the commands say which have none yet. One launch per Canvas course gives access to all of its FBF activities.
When FeedbackFruits changes
When FBF changes its API, the commands stop with an error that names what changed: the step of the launch, or the name in the data that is missing. The documentation describes how to recover. In short:
- In the browser, open the FBF assignment from Canvas with the developer tools' network tab recording, and save it as a HAR file, outside any repository: it contains your session cookies and students' data.
- Run
fbf har-diff capture.har. It compares the capture with the shape this version of the package was written for (names only, no values) and marks with!!the removed names that the package reads. - Report it, or fix it, with the diff (the diff holds no values).
- Delete the HAR file and log out of Canvas and FBF.
Development
The package is written as literate programs (noweb):
edit the .nw files in src/fbf/, never the generated .py files.
make compile # tangle and weave
make test # offline tests, replaying recorded responses
make -C doc fbf.pdf # the documentation, with the recovery procedure
The tests replay pseudonymized recordings of a real course, which are not
in the repository. CLAUDE.md and the Testing chapter of the documentation
describe how to record them and how to check for changes in FBF
(make test PYTESTFLAGS=--live).
Metadata
Release files for FeedbackFruits 0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| feedbackfruits-0.1.tar.gz | 119.3 kB | Without provenance | Details for feedbackfruits-0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| feedbackfruits-0.1-py3-none-any.whl | Python 3 | none | any | Details for feedbackfruits-0.1-py3-none-any.whl |
Total release size: 151.8 kB
Release files / feedbackfruits-0.1.tar.gz
| Download URL | feedbackfruits-0.1.tar.gz |
|---|---|
| Size | 119.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cbde22673bf5c3ecae8502706430b8b88f7501ab433e179bc9546e026e39dca2
|
|
BLAKE2b-256 checksum How to use checksums |
a183d581516b3370c1d16d10a6898d91654e4315f4d2af3badfd05ccbfee41a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.4.3 CPython/3.14.4 Linux/7.0.0-31-generic
|
Release files / feedbackfruits-0.1-py3-none-any.whl
| Download URL | feedbackfruits-0.1-py3-none-any.whl |
|---|---|
| Size | 32.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e7778495e07542b292861c2c6a4ff9b99d072d4bfb7ba2ebbecb4aeefb70e0ba
|
|
BLAKE2b-256 checksum How to use checksums |
fd2ce87bf84ae3df2d1d790f1e0d3ea69e02cb672fb73506a6fc27e9024c73fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.4.3 CPython/3.14.4 Linux/7.0.0-31-generic
|
Security for FeedbackFruits 0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.