v4.3.1:
- Change
sklearn
toscikit-learn
in requirements files generated by Otter Generate
4.3.0:
- Support dictionary and tuple assignments in solution substitution in Otter Assign per #587
- Add the
pdf
argument toottr::export
in R assignments created with Otter Assign per #440
v4.2.1:
- Update Otter Grade image tag when the base image changes per #583
- Make gspread an optional dependency per #577
v4.2.0:
- Added configuration files for Otter Assign per #565
- Fixed log execution bug from Slack as described in #571
v4.1.2:
- Added
ipython
toinstall_requires
v4.1.1:
- Added
MANIFEST.in
v4.1.0:
- Display emojis with test results to more clearly show which tests pass and which fail, as per #533.
- Allow users to specify a Python version in Otter Generate and Otter Assign
- Round
results.json
point values to 5 decimal places per #538 - Optionally display PDF generation/submission failures to students via
results.json
per #494 - Added the
force_public_test_summary
key to the autograder config per #539 - Made the "Public Tests" section on Gradescope appear as failing when not all public tests passed per #539
v4.0.2:
- Close temporary file handle before removal when checking tests in
otter.Notebook.export
- Fixed bug caused by unspecified encoding in Windows JSON loads per #524
- Updated autograder zip
setup.sh
file andr-base
version per #514 - Fix point value filtering for student tests in Otter Assign per #503
v4.0.1:
- Fix Otter Grade Dockerfile per #517
- Fix display of Public Tests output on Gradescope due to new output format
- Updated Otter Export to only import the HTML exporter and its dependencies when an HTML export is indicated per #520
v4.0.0:
- Added a new test file format based on raising exceptions per #95
- Refactored execution internals to remove mocks and AST parsing
- Added use of
tempfile
to store the executed source for compilation per #229 - Added use of
wrapt
forotter.Notebook
method decorators - Set
export_cell: run_tests: true
andcheck_all_cell: false
as new defaults for Otter Assign per #378 - Made the v1 format of Otter Assign the default and added the
--v0
flag to the CLI - Converted logging in some of Otter's tooling from
print
statements to thelogging
library, and added verbosity flags to each command - Updated containerized grading to better handle grading single files
- Made Otter compatible with Jupyterlite per #458
- Added Otter Assign R Markdown format v1 per #491
- Refactored Otter Assign internals per #491
- Converted user-supplied configuration management and documentation to
fica
per #485 - Added assignment names to Otter Assign and Otter Generate that can be verified by Otter Run to prevent students from submitting to the wrong autograder per #497
- Set the default version of
ottr
to v1.2.0
v3.3.0:
- Made
otter.check.utils.save_notebook
compatible with JupyterLab and RetroLab per #448 - Add
libmagick++-dev
to Gradescope R autograding image
v3.2.1:
- Display instructor-specified messages ahead of doctest messages per #441
- Round point values for display to 5 decimal places in Otter Assign per #457
v3.2.0:
- Changed Otter Generate to accept the path to the zip file to write as the output argument rather than a directory in which to write a file called
autograder.zip
- Changed the file name of the zip file generated by Otter Assign to include the master notebook basename and a timestamp per #401
- Made
xeCJK
in Otter Export's LaTeX templates optional per #411 - Removed concise error messages and debug mode from Otter Export, instead opting to always display the full error message, per #407
- Upgraded to Ottr v1.1.3
- Set the default for the
--ext
option for Otter Grade toipynb
per #418 - Fixed the display of success messages when all tests cases pass per #425
- Added an error when the expected notebook file does not exist in
otter.Notebook
per #433 - Allow unset conda
channel_priority
in R setup.sh files per #430 - Reset all cell execution counts in Assign student notebook per #422
v3.1.4:
- Added the question name to the
otter.assign.utils.AssignNotebookFormatException
per #398 - Switched from manual install of the fandol font in grading images to installing the
texlive-lang-chinese
package - Allowed submission zip to be exported even when PDF generation fails per #403
- Fixed bug in Otter Assign that fails when a notebook has no tests
v3.1.3:
- Fixed #389 by closing file handles in Otter Grade before removing them
- Fixed R image builds by setting Conda
channel_priority
tostrict
in Rsetup.sh
files per #386 - Fix loading docker images after building
- Added the
--ext
option to Otter Grade per #386
v3.1.2:
- Specify UTF-8 encoding in all
open
calls used for reading JSON for Windows compatibility per #380 - Fixed incorrect prompt substitution in R notebooks and Rmd assignments
v3.1.1:
- Added
libgomp
to Renvironment.yml
v3.1.0:
- Added a tool to convert Assign v0-formatted notebooks to v1 format
- Added
xeCJK
to the LaTeX exporter template and Docker images - Added PDF generation and submission in R per #302
- Updated intercell seeding in R per #302
- Fixed bug in test case point values for Assign R assignments per #360
- Enabled
solutions_pdf
andtemplate_pdf
in Assign R assignments per #364 - Added options to limit execution time of grading and permit network access
- Refactored R submission reformatting per #369
- Added export cells for R notebooks in Otter Assign per #369
- Updated the default version of Ottr to v1.1.1
- Changed prompts in R notebooks to match Rmd documents
- Added filtering of notebook cells with syntax errors during R notebook execution
- Enured that "empty" tokens are ignored in Otter Generate per #361
- Prevented save text when
export_cell: force_save: true
is specified in Otter Assign assignment metadata per #332
v3.0.6: re-release of v3.0.5
v3.0.5:
- Refactored Otter's execution internals
- Added intercell seeding via seed variables per #346
- Made Otter Run compatible with ZIP submissions
- Fixed argument bug in Otter Run per #349
v3.0.4:
- Fixed bug in Otter Assign format v1 for closing exports when the last question is manually-graded
- Removed cell IDs in Otter Assign output notebooks per #340
- Changed submission zip download link to use the HTML
download
attribute per #339
v3.0.3:
- Fix some minor bugs using docker for grading
- Added support for test config blocks in R assignments
- Fixed use of
autograder_files
in Otter Assign - Removed the
generate: pdfs
key from Otter Assign assignment configurations - Converted from Docker-py to Python on Whales for containerized grading
v3.0.2:
- Made
otter.Notebook.check_all
compatible with metadata tests - Refactored logging in
otter.Notebook
- Fixed parsing of Windows newlines in Otter Assign
v3.0.1:
- Updated the default version of Ottr to v1.0.0
- Ensured that metadata tests for R notebooks are disabled
v3.0.0:
- Added Colab support to
otter.Notebook
by disabling methods that require a notebook path and ensuring that a tests directory is present - Added Otter Assign format v1
- Added
FutureWarning
for Otter Assign format v0 - Default-disabled separate test files in Otter Assign v1 format
- Fixed bug in Otter Assign for R causing point values in test files not to render
- Added the
check_cell
key to question metadata in Otter Assign - Fixed installation of
stringi
in Gradescope R build per #259 - Added support for Ottr v1.0.0.b0
- Converted CLI to
click
fromargparse
- Converted documentation source from Markdown to RST, removing use of
recommonmark
- Added token argument to Otter Generate and Otter Assign
- Implemented submission zip validation against local test cases in
otter.Notebook
- Removed metadata files for Otter Grade
- Added flags for disabling file auto-inclusion in Otter Generate
v2.2.7:
- Added student-visible error reporting in Gradescope results
v2.2.6:
- Updated Otter Grade Dockerfile to simplify build process
- Updated Otter Grade container management workflow
- Updated
setup.sh
templates to reflect the new Dockerfile changes - Changed the display of failed test results in Otter Assign validation
- Made
rpy2
an optional depenency
v2.2.5:
- Upgraded to Miniconda 4.10.3 in grading images
- Fixed #272
v2.2.4:
- Fixed total score printout for the use of the
points_possible
configuration
v2.2.3:
-
Added
NotebookMetadataTestFile
for reading tests from Jupyter Notebook metadata -
Added optional storage of tests in notebook metadata for Otter Assign (default-off until v3)
-
Removed deprecated tool Otter Service
-
Added printout of total score to autograder output
v2.2.2:
- Added
show_all_public
configuration for grading
v2.2.1:
- Added metadata for each test case to Otter Assign format
- Added success and failure messages for test cases
- Added Gmail notifications plugin
- Added timestamps to
otter.Notebook.export
filenames
v2.2.0:
- Changed grouping of results to be per-question rather than per-test case
v2.1.8:
- Fixed bug in total score calculation when the grade override plugin is used
v2.1.7:
- Swapped
IPython.core.inputsplitter.IPythonInputSplitter
forIPython.core.inputtransformer2.TransformerManager
inotter.execute.execute_notebook
v2.1.6:
- Fixed
try
/except
statements in tests per #228 - Added error handling in
GoogleSheetsGradeOverride
plugin for when the Google API hits a rate-limit error
v2.1.5:
- Added custom
environment.yml
files in autograder per #103 - Set
display.max_rows
toNone
for pandas to print all rows in summary per #224
v2.1.4:
- Added
otter.utils.nullcontext
to be compatible with Python<3.7
v2.1.3:
- Added the
notebook_export
plugin event - Fixed plugin bug resulting from running tests in Otter Assign
- Added creation of plugin collection resulting from Otter Generate for running tests in Otter Assign
v2.1.2:
- Added
otter.Notebook.export
format support for Otter Grade - Fixed tutorial in documentation
- Added
force_save
argument tootter.Notebook.export
to make notebook force-save optional
v2.1.1:
- Fixed
UnboundLocalError
with log inotter.run.run_autograder.run_autograder
v2.1.0:
- Added
nb_conda_kernels
to template environment.yml - Fixed duplicate token calls when using Otter Assign to call Otter Generate
- Updated grading image to Miniconda 4.9.2 with Python 3.8
- Changed Otter conda environment name to
otter-env
- Added
warnings
import tootter.check.notebook
v2.0.8:
- Passed plugin collection while running tests in Otter Assign
- Fixed adding directories in
files
with Otter Generate
v2.0.7:
- Changed
scripts
toentry_points
in setup.py for Windows compatibility and removedbin/otter
- Added
otter.check.utils.save_notebook
for autosaving notebooks on export calls - Updated OK format to allow
points
key to be a list of length equal to the number of test cases
v2.0.6:
- Fixed requirements not found error for R notebooks in Otter Assign
- Removed use of
re
in overridingNotebook
test directory override inotter.execute.execute_notebook
by addingotter.Notebook._test_dir_override
v2.0.5:
- Fixed
NoneType
issue inPluginCollection.generate_report
v2.0.4:
- Added ignoreable lines in Otter Assign
- Added error handling for log deserialization per #190
- Added plugin data storage per #191
v2.0.3:
- Fixed positional arg count in
otter.plugins.builtin.GoogleSheetsGradeOverride
- Fixed working directory in
otter.plugins.builtin.GoogleSheetsGradeOverride
during Otter Assign
v2.0.2:
- Fixed #185
v2.0.1:
- Added the
each
key topoints
in question metadata for Otter Assign
v2.0.0:
- Changed granularity of results to be test case-by-test case rather than by file
- Added ability to list requirements directly in assignment metadata w/out requirements.txt file
- Unified assignment grading workflow and converted local grading to container-per-submission
- Exposed grading internals for non-containerized grading via
otter run
andotter.api
- Added plugins for altering grades and execution, incl. built-in plugins
- Added ignorable cells to Otter Assign
- Added
autograder_files
configuration for Otter Assign - Added passdown of assignment configurations to Otter Generate from Otter Assign
- Fixed whitespace bug in Assign solution parsing
- Resolved conflicts with
nbconvert>=6.0.0
, removed version pin - Added
otter.assign.utils.patch_copytree
as a patch forshutil.copytee
on WSL - Refactored Otter Generate to use
zipfile
to generate zips - Refactored CLI to allow creation of programmatic API
- Changed
otter generate autograder
tootter generate
- Removed
otter generate token
as all interaction withotter.generate.token.APIClient
can be handled elsewhere - Added intercell seeding for R Jupyter Notebooks
- Added
ValueError
on unexpected config inotter.assign.assignment.Assignment
- Added
--username
,--password
flags to Otter Assign and Otter Generate - Added support for Python files
- Removed
FutureWarning
for deprecated globalhidden
key of OK tests - Add missing file specifier in environment template
v1.1.6:
- Fixed
ZeroDivisionError
when an assignment has 0 points total
v1.1.5:
- Fixed error in parsing requirements when using Otter Grade
v1.1.4:
- Fixed
KeyError
when kernelspec unparsable from notebook in Otter Assign
v1.1.3:
- Changed Rmd code prompt to
NULL # YOUR CODE HERE
for assignment statements and# YOUR CODE HERE
for whole-line and block removal
v1.1.2:
- Made requirements specification always throw an error if a user-specified path is not found
- Pinned
nbconvert<6.0.0
as a temporary measure due to new templating issues in that release
v1.1.1:
- Fixed handling variable name collisions with already-tested test files
- Added
--no-pdfs
flag to Otter Assign
v1.1.0:
- Moved Gradescope grading to inside conda env within container due to change in Gradescope's grading image
- Added ability to specify additional tests to be run in cell metadata without need of explicit
Notebook.check
cells
v1.0.1:
- Fixed bug with specification of overwriting requirements in Otter Generate
v1.0.0:
- Changed structure of CLI into six main commands:
otter assign
,otter check
,otter export
,otter generate
,otter grade
, andotter service
- Added R autograding integrations with autograding package ottr
- Added Otter Assign, a forked version of jassign that works with Otter
- Added Otter Export, a forked version of nb2pdf and gsExport for generating PDFs of notebooks
- Added Otter Service, a deployable grading service that students can POST their submissions to
- Added logging to
otter.Notebook
and Otter Check, incl. environment serialization for grading - Changed filenames inside the package so that names match commands (e.g.
otter/cli.py
is nowotter/grade.py
) - Added intercell seeding
- Moved all argparse calls into
otter.argparser
and the logic for routing Otter commands tootter.run
- Made several fixes to
otter check
, incl. ability to grade notebooks with it otter generate
andotter grade
now remove tmp directories on failure- Fixed
otter.ok_parser.CheckCallWrapper
finding and patching instances ofotter.Notebook
- Changed behavior of hidden test cases to use individual case
"hidden"
key instead of global"hidden"
key - Made use of metadata files in
otter grade
optional - Added
otter_ignore
cell tag to flag a cell to be ignored during notebook execution
v0.4.8:
- added import of
IPython.display.display
tootter/grade.py
- patched Gradescope metadata parser for group submissions
v0.4.7:
- fix relative import issue on Gradescope (again, sigh)
v0.4.6: re-release of v0.4.5
v0.4.5:
- added missing patch of
otter.Notebook.export
inotter/grade.py
- added
__version__
global inotter/__init__.py
- fixed relative import issue when running on Gradescope
- fixed not finding/rerunning tests on Gradescope with
otter.Notebook.check
v0.4.4:
- fixed template escape bug in
otter/gs_generator.py
v0.4.3:
- fixed dead link in
docs/gradescope.md
- updated to Python 3.7 in setup.sh for Gradescope
- made
otter
andotter gen
CLIs find./requirements.txt
automatically if it exists - fix bug where GS generator fails if no
-r
flag specified