A system for assigning and grading notebooks

Overview

nbgrader

Linux: TravisCI
Windows: Azure Devops
Forum: Google Group
Coverage: codecov.io
Cite: DOI

A system for assigning and grading Jupyter notebooks.

Documentation can be found on Read the Docs.

Highlights of nbgrader

Instructor toolbar extension for Jupyter notebooks

The nbgrader toolbar extension for Jupyter notebooks guides the instructor through assignment and grading tasks using the familiar Jupyter notebook interface.

Creating assignment

Instructor "formgrader" extension for Jupyter notebooks

The formgrader extension for the Jupyter notebook allows instructors to use the core functionality of nbgrader---generating the student version of an assignment, releasing assignments to students, collecting assignments, autograding submissions, and manually grading submissions.

Formgrader extension

Student assignment list extension for Jupyter notebooks

Using the assignment list extension, students may conveniently view, fetch, submit, and validate their assignments.

nbgrader assignment list

The command line tools of nbgrader

Command line tools offer an efficient way for the instructor to generate, assign, release, collect, and grade notebooks.

SciPy 2017 overview talk (click to view on YouTube)

nbgrader: A Tool for Creating and Grading Assignments in the Jupyter Notebook | SciPy 2017

Installation

For detailed instructions on installing nbgrader and the nbgrader extensions for Jupyter notebook, please see Installation section in the User Guide.

Contributing

Please see the contributing guidelines and documentation.

If you want to develop features for nbgrader, please follow the development installation instructions.

Comments
  • Port the notebook extensions to JupyterLab

    Port the notebook extensions to JupyterLab

    This is so we can discuss whether this is the right path to follow for nbgrader, I'm not 100% sure yet but at least we can come to a decision here...

    We're still using nbgrader at Cal quite a bit, and as I consider moving the students more to JupyterLab as their "daily driver", the absence of the student-facing extension for submitting notebooks is becoming a more relevant issue.

    Curious what @jhamrick @ellisonbg think in this context - how realistic would it be to put some cycles into porting the extension? This is more of an nbgrader than a Lab issue, but it's turning out to be kind of a blocker to our use of Lab by default (which I really want to do :).

    CC @jasongrout @ian-r-rose as per recent discussions on blockers and extensions...

    enhancement important refactor 
    opened by fperez 73
  • Jupyterlab extensions

    Jupyterlab extensions

    This PR brings the jupyterlab extensions to nbgrader.

    It is an improvement of the work done by @Lawrence37 and @aalmanza1998 in https://github.com/LibreTexts/nbgrader-to-jupyterlab/tree/lab-common.

    It works with jupyterlab < 4 and is still compatible with classic notebook (nbextensions still work).

    Still missing some tests on labextensions (formgrader and course list), which could be added in a future PR.

    @fcollonval also helped with this PR.

    Fix #1006 Related to #1335

    enhancement 
    opened by brichet 49
  • Integrate feedback distribution within nbgrader

    Integrate feedback distribution within nbgrader

    This is the result of the work of @dsblank, @perllaghu, @billywardrop29 and @danielmaitre at the Edinburgh hackathon.

    It includes UI integration of the feedback step, release of the feedback to students in the exchange, and fetching of this feedback by the students.

    Some UI work needs to be finished but starting a PR will help check the coverage of the existing tests.

    Fixes #795 Replaces #1096

    enhancement UX/UI documentation 
    opened by danielmaitre 38
  • unable to fetch assignments

    unable to fetch assignments

    Good morning i would really appreciate help as i have a summer class and the students can not fetch assingments

    1)nbgrader --version nbgrader version 0.4.0 on the command line nbgrader fetch aewk1 !this one works 2)jupyter notebook in the assignment Tab, i see the assignment, but when i click Fetch i get NotebookApp] 403 POST /assignments/fetch (::1): '_xsrf' argument missing from POST 3)on the jupyter hub it also fails

    many thanks and kind regards kiriaki

    question 
    opened by kxiluri 38
  • Create a paper on nbgrader

    Create a paper on nbgrader

    I am very excited to announce that we planning to submit a paper on nbgrader to the Journal of Open Source Education!

    This PR contains the first draft of the paper which will be submitted. For this submission we are following the Project Jupyter guidelines for JOSS papers. I will be the coordinator and organize the writing and submission of the paper. I have included authors for the first draft people who were authors on the talk I gave last year at SciPy, but authorship will also be extended to everyone who has contributed to nbgrader.

    Can I be an author?

    The following are the criteria for authorship, taken from the Project Jupyter guidelines for JOSS papers:

    • Substantial contributions to the conception, design, or implementation of software; this includes coding, visual design, documentation, testing, discussions and other such contributions; AND
    • Final approval of the version to be published; AND
    • Agreement to be accountable for all aspects of the work in ensuring that questions related to the accuracy or integrity of any part of the work are appropriately investigated and resolved.

    If you feel you fit these criteria, then please see below for the tasks you will need to complete.

    Please note that authors will be listed in alphabetical order, with "Project Jupyter" as the first author.

    Coordinator tasks

    Before this PR is merged, the following needs to be completed:

    • [x] email all contributors to nbgrader to ask if they would like authorship, based on GitHub commits and also emailing the Jupyter and Jupyter in Education mailing lists.
    • [x] ensure all authors have been added as reviewers
    • [x] ensure ORCIDs/affiliations/emails/etc. for all authors have been added
    • [x] ensure all individual tasks have been completed by all authors

    Author tasks

    To be an author, you need to complete the following tasks:

    • Create an account on ORCID;
    • Add a comment to this PR with the following:
      • Your name, ORCID id, affiliation, and email as you would like it to be listed;
      • A brief description of your contributions to nbgrader;
    • Read the paper in its entirety;
    • Add comments providing any edits to the content of the paper; and
    • Approve the PR as a reviewer when happy with the contents of the paper.

    I would like to submit this to JOSE in two weeks time (June 16th, 2018) so it would be great if everyone can complete their tasks before then.

    documentation 
    opened by jhamrick 35
  • 0.8 Release Plan

    0.8 Release Plan

    This is an issue for 0.8 release plan, to port nbgrader extensions to notebook 7

    Classic notebook extensions system and notebook 7 extensions system (labextension) are not compatibles. Consequently, the first step would be to move the current master branch to a 0.7.x branch (a branch which keep compatibility with Classic Notebook), and use the master branch for 0.8 release (compatible with Notebook 7 and Jupyterlab).

    That 0.8 release would have the following steps :

    • [x] move current master branch to 0.7.x branch
    • [x] rename master branch to main
    • [x] adopt juputer releaser (#1570)
    • [x] migrate server extension to jupyter_server (#1465)
    • [x] port Notebook extensions to Jupyterlab extensions (#1006, #1550)
    enhancement maintenance 
    opened by brichet 30
  • We're creating a maintainer team! Join us :D

    We're creating a maintainer team! Join us :D

    Hi all,

    We're hoping some of our long-time users or enthusiasts for nbgrader would like to be part of a team of individuals maintaining nbgrader.

    We've structured JupyterHub and Binder in a similar way. See https://jupyterhub-team-compass.readthedocs.io/en/latest/team.html#jupyterhub-team

    Please leave a comment on this issue. If you have questions, please leave them here too.

    opened by willingc 29
  • Allow instructors to share files via shared group id

    Allow instructors to share files via shared group id

    Hi,

    I have been working on a setup where I wanted instructors to be able to share releasing files, collecting, and so on.nbgrader says that it doesn't support this, but I tried anyway. This PR contains the changes needed to make this work, which have been mostly minimal. Things are not perfect, and some of these changes may be not needed. I'm still testing locally and this is mainly to get some more expert opinions.

    This adds a new option groupshared which enables the behavior. By default, no behavior should change.

    These changes assume that the following are set by the environment (admins). They are satisfied in my setup because we run via kubespawner and I carefully control these:

    • instructors have a unique-per-course primary gid which students do not have. Alternatively, the setgid bit could be set (in practice I do both). If using setgid, you have to set that up yourself.
    • umasks are 0007
    • shared course and exchange directories, like normal.
    • Instructors won't do something wrong with permissions which breaks the security.

    We expect these behaviors to happen when groupshared = True:

    • All info in the course directory is g+rw. Instructors can all edit files.
    • Multiple instructors can release and collect files from the exchange. Basically, when releasing, group permissions mirror user, not other. Because the submitted folder is set g+rwx, other instructors can also collect.
    • Don't insist on non-group writability in some places.

    It actually seems to mostly work (though I am still doing internal tests) Remaining problems (I will keep updating this as I find more):

    • [x] The groupshared set in two places. Set it only once. (I didn't see a common base class...)
    • [x] when the release/ and release/{assignment_id} directories are created, it is g-w. Haven't been able to figure out why yet - it is not the umask, and I can't figure out where in the code the dirs are created. (help requested!)
    • [x] sqlite3 hardcodes a create mode of 644. I hacked around this by touching gradebook.db and setting a proper mode first.
    • [x] tests
    • [x] Study 664 vs 444 as default permissions for autograde. (rkdarst)
    • [x] Study what the problem with ensure_root was (rkdarst)

    For now I am trying to just make something that will work, then I can work on improving it more. What do you think? Is this something that I should work on to merge upstream?

    enhancement 
    opened by rkdarst 28
  • nbgrader authentication

    nbgrader authentication

    Hey @jhamrick ,

    Here's a simple extensible authentication scheme.

    FormgradeApp.authenticator_class can be used to change the authenticator. BaseAuth is the base authenticator class. A NoAuth class is provided as the default, and retains current behavior of formgrade. I moved the start_nbserver traitlet and nbserver launching logic into NoAuth.

    The HubAuth, empty now, will contain the logic for authenticating with JupyterHub.

    Let me know what you think of this design. I've tested it locally and everything seems to work as-is. The not yet implement HubAuth can be tested quickly (when it's done) using nbgrader formgrade --FormgradeApp.authenticator_class='nbgrader.auth.hubauth.HubAuth'.

    closes #145

    enhancement 
    opened by jdfreder 25
  • Pluggable exchange

    Pluggable exchange

    Based on discussions with @BertR and @perllaghu, I've created a pluggable version of the exchange, to allow custom exchanges for people who don't want to/can't use the default one. See #1130 for a bit more information.

    The exchange file-tree has changed as follows:

    exchange/
    ├── abc/
    │   ├── collect.py
    │   ├── ...
    │   └── submit.py
    ├── default/
    │   ├── collect.py
    │   ├── ...
    │   └── submit.py
    └── exchange_factory.py
    

    Here abc/ contains abstract classes for each different exchange service (they aren't literally abstract, as the ABC meta-class conflicts with the LoggingConfigurable meta-class). The default/ folder contains the default implementations for each exchange service, which is just the old implementation.

    The exchange_factory.py file contains the ExchangeFactory class, which is the interface for creating pluggable exchange services. It uses the Type traitlet for class variables for each exchange service, which is set to be a subclass of the corresponding class in abc/ and defaults to the corresponding class in default/.

    The ExchangeFactory class has instance methods that instantiate each of the exchange services. The new way of constructing the exchange classes would look something like:

    # lister = ExchangeLister(...) # old way
    exchange = ExchangeFactory(config=config) # or parent=self, or similar
    lister = exchange.List(...)
    

    For the apps, I've created an instance variable in the NbGrader app for the ExchangeFactory class, so that subclasses can use self.exchange. to create the services. The ExchangeFactory class gets initiated and configured in NbGrader.start, so before that method has been called, subclasses can't access the self.exchange variable. (Note, I removed line 39 in dbapp.py as it was creating a ExchangeList object and assigning it to an unused variable. Since this was done before the call to NbGrader.start it couldn't use the self.exchange, and as it was unused anyway, I figured I'd just delete the line.)

    I also updated server_extensions/assignment_list/handlers.py to use the new pluggable exchange.

    Finally, I should note that the method names in the ExchangeFactory class do not conform to PEP8. I did this to keep the names as close to the previous names as possible. If this is an issue, it should not be too much of a problem to change the names at this point.

    Hope this all made sense.

    enhancement 
    opened by lzach 24
  • Multiple instructors, multiple courses, and multiple solutions

    Multiple instructors, multiple courses, and multiple solutions

    This is a discussion-point, to try and bring together the various threads

    We have a number of similar threads on multiple courses, multiple instructors, and the possibility of an external exchange service.

    We all want to use NBGrader, as it's an excellent tool for creating tests & grading the responses.

    It would be good to get a common solution, or at least several non-exclusive solutions, for these issues.

    Please could people describe what they are trying to achieve, and the environment in wich they are running nbgrader?

    opened by perllaghu 24
  • Bump json5 from 1.0.1 to 1.0.2

    Bump json5 from 1.0.1 to 1.0.2

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    maintenance dependencies javascript 
    opened by dependabot[bot] 1
  • Update dependency to jupyter-server>=2

    Update dependency to jupyter-server>=2

    This PR updates the dependency to jupyter-server>=2.

    It also adds a new dependency to pytest-jupyter (when installing in test) as it is not included anymore in jupyter-server

    bug maintenance 
    opened by brichet 1
  • Invalid constraint found in nbclient dependencies

    Invalid constraint found in nbclient dependencies

    I tried to install nbgrader via poetry and received a warning about an invalid constraint (see below).

    Operating system

    Windows 10 Pro 22H2

    nbgrader --version

    0.8.1

    jupyter notebook --version

    6.4.12

    poetry --version

    Poetry (version 1.3.1)

    Expected behavior

    The installation was completed without any warnings.

    Actual behavior

    The installation was completed with the following warning: Invalid constraint (jupyter-core!=~5.0,>=4.12) found in nbclient-0.7.1 dependencies, skipping

    Steps to reproduce the behavior

    poetry init poetry add nbgrader

    opened by evgenytsydenov 0
  • Update traitlets requirement from <5.7.0 to <5.9.0

    Update traitlets requirement from <5.7.0 to <5.9.0

    Updates the requirements on traitlets to permit the latest version.

    Release notes

    Sourced from traitlets's releases.

    v5.8.0

    5.8.0

    (Full Changelog)

    Enhancements made

    -Shell command-line tab-completion via argcomplete #811 (@​azjps)

    • Define trait.__doc__ = trait.help for better API Docs #816 (@​minrk)

    Maintenance and upkeep improvements

    Documentation improvements

    Contributors to this release

    (GitHub contributors page for this release)

    @​azjps | @​blink1073 | @​minrk

    Changelog

    Sourced from traitlets's changelog.

    5.8.0

    (Full Changelog)

    Enhancements made

    -Shell command-line tab-completion via argcomplete #811 (@​azjps)

    • Define trait.__doc__ = trait.help for better API Docs #816 (@​minrk)

    Maintenance and upkeep improvements

    Documentation improvements

    Contributors to this release

    (GitHub contributors page for this release)

    @​azjps | @​blink1073 | @​minrk

    5.7.1

    (Full Changelog)

    Bugs fixed

    Contributors to this release

    (GitHub contributors page for this release)

    @​maartenbreddels

    5.7.0

    (Full Changelog)

    Enhancements made

    Maintenance and upkeep improvements

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    maintenance dependencies 
    opened by dependabot[bot] 1
  • different hashing in release_feedback and fetch_feedback

    different hashing in release_feedback and fetch_feedback

    Operating system

    Ubuntu 20.04.5 LTS

    nbgrader --version

    0.8.0

    jupyterhub --version (if used with JupyterHub)

    2.3.1

    jupyter notebook --version

    6.4.12

    jupyter lab --version

    3.4.6

    Expected behavior

    same result from notebook_hash in release_feedback.py and fetch_feedback.py

    Actual behavior

    different results, resulting in [FetchFeedbackApp | WARNING] Could not find feedback for ... during nbgrader fetch_feedback --debug

    Steps to reproduce the behavior

    As instructor do nbgrader release_feedback --debug <assignment>. Then as student do nbgradere fetch_feedback --debug <assignment>.

    Explanation

    We are using nbgrader with jupyterhub and jupyter lab for one of our courses much to our liking. For several months all was working well but very recently we stumbled on the following incident. Two students (of 20) are not able to fetch the feedback of one particular assignment.

    After some debugging I found that the hash in release_feedback.py was generated with different values than in fetch_feedback.py:

    nbgrader release_feedback --debug 'Assignment 3 Wavefront sensing

    [ReleaseFeedbackApp | DEBUG] nbfile is: /home/grader-ap3122/ap3122/submitted/<username>/Assignment 3 Wavefront sensing/Assignment Wavefront aberrations.ipynb
    [ReleaseFeedbackApp | DEBUG] Unique key is: ap3122+Assignment 3 Wavefront sensing+Assignment Wavefront aberrations+<username>+2022-11-11 15:17:36.574853 UTC
    [ReleaseFeedbackApp | DEBUG] checksum is: f9990f2f5f029af5091cbc417c5a591e
    [ReleaseFeedbackApp | DEBUG] dest is: /usr/local/share/nbgrader/exchange/ap3122/feedback/f9990f2f5f029af5091cbc417c5a591e.html
    

    nbgrader fetch_feedback --debug 'Assignment 3 Wavefront sensing

    [FetchFeedbackApp | DEBUG] notebook is: /data/jupyterhub/home/<username>/.local/share/jupyter/nbgrader_cache/ap3122/<username>+Assignment 3 Wavefront sensing+2022-11-11 15:17:36.574853 UTC/Assignment Wavefront aberrations.ipynb
    [FetchFeedbackApp | DEBUG] Unique key is: ap3122+Assignment 3 Wavefront sensing+Assignment Wavefront aberrations+<username>+2022-11-11 15:17:36.574853 UTC
    [FetchFeedbackApp | DEBUG] nb_hash is: 209d0cfb1a1a05ba8d64273f2fd04271
    [FetchFeedbackApp | DEBUG] feedbackpath is: /usr/local/share/nbgrader/exchange/ap3122/feedback/209d0cfb1a1a05ba8d64273f2fd04271.html
    

    the student name has been replaced with <username>

    I've added some debugging code to the two python-scripts logging the values of the appropriate variables

    Clearly the nbfile and notebook have very different value resulting in different hash values. This is reflected in the different values of dest and feedbackpath which should be the same.

    opened by ronligt 8
Releases(v0.8.1)
  • v0.8.0(Aug 22, 2022)

    0.8.0

    (Full Changelog)

    Enhancements made

    Bugs fixed

    Maintenance and upkeep improvements

    Documentation improvements

    Contributors to this release

    (GitHub contributors page for this release)

    @brichet | @dependabot | @jhamrick | @jtpio | @minrk | @perllaghu | @rkdarst

    Source code(tar.gz)
    Source code(zip)
    nbgrader-0.8.0-py3-none-any.whl(10.27 MB)
    nbgrader-0.8.0.tar.gz(10.21 MB)
    nbgrader-0.8.0.tgz(41.06 KB)
  • v0.8.0a1(Jul 4, 2022)

  • v0.8.0a0(Jun 28, 2022)

    0.8.0a0

    (Full Changelog)

    Enhancements made

    Bugs fixed

    Maintenance and upkeep improvements

    Documentation improvements

    Contributors to this release

    (GitHub contributors page for this release)

    @brichet | @jhamrick | @jtpio | @minrk | @perllaghu | @rkdarst

    Source code(tar.gz)
    Source code(zip)
    nbgrader-0.8.0-alpha.0.tgz(40.60 KB)
    nbgrader-0.8.0a0-py3-none-any.whl(10.38 MB)
    nbgrader-0.8.0a0.tar.gz(10.26 MB)
  • v0.7.1(Jun 23, 2022)

    The following PRs were merged for the 0.7.1 milestone:

    • PR #1607: More informative error messages in ClearSolutions
    • PR #1598: Fix mathjax in formgrade templates
    • PR #1593: Pin traitlets dependency for 0.7.x
    • PR #1590: Ensure html files aren't copied over from documentation
    • PR #1582: Trivial typo: "int the database"
    • PR #1579: Only add extra_template_basedirs if it has not been set
    • PR #1576: Revert "[converters/autograde] Fix autograded notebook permission"
    • PR #1518: [converters/autograde] Fix autograded notebook permission

    Thanks to the following users who submitted PRs or reported issues that were merged or fixed for the 0.7.1 release:

    • Anmol23oct
    • brichet
    • jhamrick
    • kno10
    • mhwasil
    • szazs89
    • tmetzl
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(May 7, 2022)

    The following PRs were merged for the 0.7.0 milestone:

    • PR #1572: Fix a false positive test
    • PR #1571: Add workflow to enforce GitHub labels
    • PR #1569: Add Python 3.10 to CI pipeline
    • PR #1568: Update markupsafe requirement from <2.1.0 to <2.2.0
    • PR #1567: Upgrade nbconvert
    • PR #1565: Bump pytest from 6.2.4 to 7.1.2
    • PR #1564: Pin to notebook<7 for now
    • PR #1561: Add missing 'self' argument to late_submission_penalty
    • PR #1559: Fix breaking tests due to changes in the newest Jinja2 release
    • PR #1558: Bump pytest-xdist from 2.4.0 to 2.5.0
    • PR #1557: Update jupyter-client requirement from <7 to <8
    • PR #1541: Update setup.py with dependency ranges
    • PR #1539: Improve CI by running sphinx linkcheck
    • PR #1519: Make generate solutions preprocessors configurable
    • PR #1504: Bump sqlalchemy from 1.4.23 to 1.4.25
    • PR #1503: Bump pytest-xdist from 2.2.1 to 2.4.0
    • PR #1502: Bump alembic from 1.7.1 to 1.7.3
    • PR #1498: Bump rapidfuzz from 1.5.1 to 1.6.2
    • PR #1497: Bump notebook from 6.4.3 to 6.4.4
    • PR #1496: docs/index: Move setup-related topics to configuration section
    • PR #1494: docs: update highlights to introduce the notebook format
    • PR #1493: docs: revise "Managing assignment files" pages
    • PR #1489: Bump rapidfuzz from 1.4.1 to 1.5.1
    • PR #1488: Bump traitlets from 5.0.5 to 5.1.0
    • PR #1487: Bump alembic from 1.6.5 to 1.7.1
    • PR #1480: Bump sqlalchemy from 1.4.22 to 1.4.23
    • PR #1478: Bump notebook from 6.4.2 to 6.4.3
    • PR #1477: Bump notebook from 6.4.1 to 6.4.2
    • PR #1476: Fix Issue with Courses tab on Multi courses
    • PR #1475: Bump notebook from 6.4.0 to 6.4.1
    • PR #1472: Bump sqlalchemy from 1.4.21 to 1.4.22
    • PR #1470: Update badges in README
    • PR #1469: Bump python-dateutil from 2.8.1 to 2.8.2
    • PR #1468: Bump sqlalchemy from 1.4.20 to 1.4.21
    • PR #1467: Bump sqlalchemy from 1.4.18 to 1.4.20
    • PR #1466: Bump requests from 2.25.1 to 2.26.0
    • PR #1458: Lock setup dependencies
    • PR #1457: Add missing rollbacks to try/except clauses that execute db commits
    • PR #1450: Update autograding_resources.rst
    • PR #1444: Remove continuous integration for python 3.6
    • PR #1442: Bump traitlets from 4.3.3 to 5.0.5
    • PR #1441: Update pytest requirement from <6.0.0,>=4.5 to 6.2.4
    • PR #1440: Bump pytest-xdist from 1.34.0 to 2.2.1
    • PR #1438: Validate pre and post convert hooks
    • PR #1437: Make converter exporter class configurable
    • PR #1431: Add dependabot configuration
    • PR #1425: Use NBGRADER_VALIDATING env var during autograding
    • PR #1422: Fix docs building
    • PR #1420: Fix various SQLAlchemy errors and warnings
    • PR #1419: Update releasing docs and tools
    • PR #1394: Added CLI for generating solution notebooks
    • PR #1381: find cell failure when stderr is used
    • PR #1376: Make preprocessors of generate assignment, autograde and generate feedback configurable
    • PR #1330: Update azure pipelines matrix to add Python 3.8
    • PR #1329: Update the test matrix on Travis to Python 3.6+
    • PR #1324: Ensure errors are written to cell outputs to prevent the autograder from awarding points for failed tests
    • PR #1320: Add nbgrader collect --before-duedate option
    • PR #1315: ExchangeFetchAssignment deleting the wrong config
    • PR #1287: Add mypy for type checking
    • PR #1282: Further type annotations across the codebase
    • PR #1276: remove db_assignments db_students
    • PR #1274: Further Python 3 type annotations on top-level files
    • PR #1268: Type annotations for the api
    • PR #1259: Remove Python 2 compatibility code
    • PR #1257: Deprecate Python 2 support
    • PR #1238: Pluggable exchange
    • PR #1222: CourseDir.format_path: supports absolute paths in nbgrader_step

    Thanks to the following users who submitted PRs or reported issues that were merged or fixed for the 0.7.0 release:

    • aliniknejad
    • AnotherCodeArtist
    • bbhopesh
    • BertR
    • brichet
    • elesiuta
    • gymreklab
    • HanTeo
    • jgwerner
    • jhamrick
    • jnishii
    • jtpio
    • LaurentHayez
    • liuq
    • lzach
    • nthiery
    • omelnikov
    • QuantumEntangledAndy
    • rkdarst
    • ryanlovett
    • samarthbhargav
    • sigurdurb
    • Tebinski
    • tmetzl
    • Wildcarde
    • willingc
    • ykazakov
    Source code(tar.gz)
    Source code(zip)
  • v0.6.2(May 8, 2021)

    nbgrader version 0.6.2 is a bugfix release. The following PRs were merged:

    • PR #1443: Fix broken windows tests
    • PR #1410: partial credit returns zero when score is zero
    • PR #1388: Move from travis ci to github actions
    • PR #1384: Fix migrations.
    • PR #1369: Pin nbconvert to 5.6.1, traitlets to 4.3.3 and pytest to <6.0.0
    • PR #1362: Fix migration, grade cells were looking for a non-existing column
    • PR #1356: add SAS codestub and autograde for metakernel based non-python kernels
    • PR #1352: Description of "what is nbgrader?"
    • PR #1343: Update deprecated jquery functions and update jquery
    • PR #1341: Make format_path behave the same for absolute paths
    • PR #1319: use rapidfuzz instead of fuzzywuzzy
    • PR #1308: docs: Fix formgrader group name in docs
    • PR #1288: Fixes #1283: Replace AppVeyor badge with Azure Devops badge
    • PR #1281: Demos using Python3
    • PR #1249: timestamp_format raises an exception

    Thanks to the following users who submitted PRs or reported issues that were merged or fixed for the 0.6.1 release:

    • BertR
    • chinery
    • echuber2
    • enisnazif
    • fredcallaway
    • HanTeo
    • jgwerner
    • jhamrick
    • jld23
    • kcranston
    • lzach
    • maxbachmann
    • nklever
    • Patil2099
    • rkdarst
    • tmetzl
    Source code(tar.gz)
    Source code(zip)
  • v0.6.1(Nov 7, 2019)

    nbgrader version 0.6.1 is a bugfix release. The following PRs were merged:

    • PR #1280: Fix inappropriate use of sum with newer sqlite
    • PR #1278: Fix course list hanging when exchange has not been created
    • PR #1272: Improve test coverage in auth folder
    • PR #1270: Add requirements for readthedocs
    • PR #1267: Improve the error message on the assignments page
    • PR #1260: Set up CI with Azure Pipelines
    • PR #1245: Move away from using the internal Traitles API to load default configuration.
    • PR #1243: Fix project name typo
    • PR #1228: Fix formgrader API
    • PR #1227: Bump pytest required version to 4.5 for custom marker support
    • PR #1208: Improve coverage of nbgraderformat
    • PR #1205: Check for newer feedback in nbgrader list
    • PR #1204: Force generate feedback by default in API
    • PR #1200: Associate feedback files with unique submission attempts
    • PR #1197: Do not duplicate assignments when fetching feedback
    • PR #1196: Fix config warning in ExchangeReleaseAssignment
    • PR #1194: Update releasing instructions

    Thanks to the following users who submitted PRs or reported issues that were merged or fixed for the 0.6.1 release:

    • BertR
    • enisnazif
    • jhamrick
    • kinow
    • nthiery
    • sir-dio
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Aug 25, 2019)

    nbgrader version 0.6.0 is a major release, involving over 100 PRs and 60 issues. This includes many bug fixes, small enhancements, and improved docs. The major new features include:

    • Better support for multiple classes with JupyterHub. In particular, a new "Course List" extension has been added which provides instructors access to separate formgrader instances for all the classes they can manage. Additionally, JupyterHub authentication is used to control which students have access to which assignments.
    • Better LMS integration (for example, adding a lms_user_id column in the Student table of the database).
    • Better support for feedback. In particular, there is now the ability to generate and return feedback to students through nbgrader with the generate_feedback and release_feedback commands, and the ability for students to fetch feedback with the fetch_feedback command. This functionality is also available through the formgrader and Assignment List extensions.
    • Instructions for how to do grading inside a Docker container, for increased protection against malicious code submitted by students.
    • A new type of nbgrader cell called a "task" cell which supports more open-ended solutions which may span multiple cells.

    Important: Users updating from 0.5.x to 0.6.0 should be aware that they will need to do the following (please make sure to back up your files before doing so, just in case anything goes wrong!):

    • Update their nbgrader database using nbgrader db upgrade.
    • Update the metadata in their assignments using nbgrader update.
    • Reinstall the nbgrader extensions (see :doc:/user_guide/installation).

    Please also note that some of the nbgrader commands have been renamed, for consistency with the new feedback commands:

    • nbgrader assign is now nbgrader generate_assignment
    • nbgrader release is now nbgrader release_assignment
    • nbgrader fetch is now nbgrader fetch_assignment

    The full list of PRs is:

    • PR #1191: Allow access to formgrader when not using JuptyerHub auth
    • PR #1190: Add JupyterHub demos
    • PR #1186: Remove student_id and change root to cache, permission check to only execute
    • PR #1184: Move the fetch feedback API from formgrader to assignment_list
    • PR #1183: Feedback: update fetch_feedback command line help
    • PR #1180: Fix versions of pytest and nbconvert
    • PR #1179: Add CourseDir.student_id_exclude option to exclude students
    • PR #1169: Fix minor typo in js extension helper text
    • PR #1164: assignment_dir: Add into several missing places
    • PR #1152: Rename 'nbgrader fetch' to 'nbgrader fetch_assignment'
    • PR #1151: Rename 'nbgrader release' to 'nbgrader release_assignment'
    • PR #1147: Add test to ensure that db upgrade succeeds before running assign
    • PR #1145: Rename nbgrader feedback to nbgrader generate_feedback
    • PR #1140: A few more updates to the docs for multiple classes
    • PR #1139: Additional docs sanitization
    • PR #1138: Ensure that cell type changes result in valid nbgrader metadata
    • PR #1137: Rename "nbgrader assign" to "nbgrader generate_assignment"
    • PR #1135: section on grading in docker container
    • PR #1131: Better support for multiple classes
    • PR #1127: Better documentation of nbgrader_config.py
    • PR #1126: Remove the third party resources page
    • PR #1125: Check that the course directory is a subdirectory of the notebook dir
    • PR #1124: Only run nbextensions tests on oldest and newest versions of python
    • PR #1123: Ensure course directory root path has no trailing slashes
    • PR #1122: Fix incorrect usage of Exchange.course_id
    • PR #1121: Fix logfile
    • PR #1120: Integrate feedback distribution within nbgrader
    • PR #1119: added a sanatizing step to the doc creation.
    • PR #1118: Integrate course_id into the api and apps
    • PR #1116: Autograde & Assign: create missing students/assignments by default
    • PR #1115: Fix typo in tmp filename prefix in conftest.py
    • PR #1114: Documentation for multiple classes
    • PR #1113: Add a course list extension that shows all courses an instructor can manage
    • PR #1112: Locate all configurable classes for generate_config subcommand
    • PR #1111: Optional consistency check between owner and student_id upon collect
    • PR #1110: Systematic use of utils.get_username instead of $USER
    • PR #1109: naming the temporary directories in tests
    • PR #1108: Extended support for filtering files copied in the exchange
    • PR #1106: Remove testing of python 3.4
    • PR #1105: Remove extra keys in nbgrader metadata and better schema mismatch errors
    • PR #1102: Only build docs with one version of python
    • PR #1101: Add jupyter education book to third party resources
    • PR #1100: Run test in the python group in parallel using pytest-xdist
    • PR #1099: Add course table, add course_id column to assignment
    • PR #1098: Customizable student ID in nbgrader submit
    • PR #1094: Update license
    • PR #1093: Add authentication plugin support
    • PR #1090: partial credit for autograde test cells
    • PR #1088: Remove version requirement from urllib3
    • PR #1084: Fix miscellaneous bugs
    • PR #1080: compatibility with SQLAlchemy 1.3+
    • PR #1075: Give ExecutePreprocessor the Traitlets config during validation
    • PR #1071: student and assignment selection in exportapp implemented
    • PR #1064: Validate all cells
    • PR #1061: Set env var NBGRADER_VALIDATING when validating
    • PR #1054: Raise error when executed task fails
    • PR #1053: Remove changes to sitecustomize.py and dependency on invoke
    • PR #1051: Remove spellcheck and enchant dependency
    • PR #1040: Restrict access for students to different courses
    • PR #1036: Add a general lms user id column to the student table
    • PR #1032: fix: return info of reper function is wrong in api.py
    • PR #1029: Documentation fix to add info re: timeout errors.
    • PR #1028: Some improvements to the contributor list script
    • PR #1026: Mark test_same_part_navigation as flaky
    • PR #1025: Fixing failing tests, take 2
    • PR #1024: Fix deprecation warning with timezones
    • PR #1023: Ensure nbgrader list still works with random strings
    • PR #1021: Fix tests, all of which are failing :(
    • PR #1019: Make nbgrader quickstart work with existing directories
    • PR #1018: Add missing close > for url to display correctly
    • PR #1017: Fix all redirection
    • PR #1014: a mistake in comment
    • PR #1005: Add random string to submission filenames for better hiding
    • PR #1002: Change to notebook directory when validating (repeat of #880)
    • PR #1001: Allow setting a different assignment dir for students than the root notebook directory
    • PR #1000: Allow instructors to share files via shared group id
    • PR #994: Add link to jupyter in education map
    • PR #991: Fix broken documentation
    • PR #990: Include section on mocking (autograding resources)
    • PR #989: Update developer installation instructions
    • PR #984: Adding global graded tasks
    • PR #975: Fix the link to the activity magic
    • PR #972: Use mathjax macro for formgrader
    • PR #967: Added note in FAQ about changing cell ids
    • PR #964: Added "if name == "main":"
    • PR #963: Add third party resources to the documentation
    • PR #962: Add grant_extension method to the gradebook
    • PR #959: Allow apps to use -f and --force
    • PR #958: Do some amount of fuzzy problem set name matching
    • PR #957: Remove underscores from task names
    • PR #955: Ignore .pytest_cache in .gitignore
    • PR #954: Fix bug in find_all_files that doesn't properly ignore directories
    • PR #953: update log.warn (deprecated) to log.warning
    • PR #948: Move config file generation to a separate app
    • PR #947: Exclude certain assignment files from being overwritten during autograding
    • PR #946: Fix failing tests
    • PR #937: Strip whitespace from assignment, student, and course ids
    • PR #936: Switch from PhamtomJS to Firefox
    • PR #934: Skip filtering notebooks when ExchangeSubmit.strict == True
    • PR #933: Fix failing tests
    • PR #932: Prevent assignments from being created with invalid names
    • PR #911: Update installation.rst
    • PR #909: Friendlier error messages when encountering a schema mismatch
    • PR #908: Better validation errors when cell type changes
    • PR #906: Resolves issues with UTF-8
    • PR #905: Update changelog and rebuild docs from 0.5.4
    • PR #900: Improve issue template to explain logic behind filling it out
    • PR #899: Help for csv import
    • PR #897: Give more details on how to use formgrader and jupyterhub
    • PR #892: Format code blocks in installation instructions
    • PR #886: Add nbval for non-Windows tests/CI
    • PR #877: Create issue_template.md
    • PR #871: Fix NbGraderAPI.timezone handling
    • PR #870: added java, matlab, and octave codestubs to clearsolutions.py
    • PR #853: Update changelog from 0.5.x releases
    • PR #838: Fetch multiple assignments in one command

    Huge thanks to the following users who submitted PRs or reported issues that were merged or fixed for the 0.6.0 release:

    • 00Kai0
    • Alexanderallenbrown
    • aliandra
    • amellinger
    • BertR
    • Carreau
    • cdvv7788
    • Ciemaar
    • consideRatio
    • damianavila
    • danielmaitre
    • DavidNemeskey
    • davidpwilliamson
    • davis68
    • ddbourgin
    • ddland
    • dechristo
    • destitutus
    • dsblank
    • edouardtheron
    • fenwickipedia
    • fm75
    • FranLucchini
    • gertingold
    • hcastilho
    • JanBobolz
    • jedbrown
    • jhamrick
    • jnak12
    • kcranston
    • kthyng
    • lgpage
    • liffiton
    • mikezawitkowski
    • mozebdi
    • mpacer
    • nabriis
    • nthiery
    • perllaghu
    • QuantumEntangledAndy
    • rgerkin
    • rkdarst
    • Ruin0x11
    • rwest
    • ryanlovett
    • samhinshaw
    • Sefriol
    • sigurdurb
    • slel
    • soldis
    • swarnava
    • takluyver
    • thotypous
    • vahtras
    • VETURISRIRAM
    • vidartf
    • willingc
    • yangkky
    • zonca
    Source code(tar.gz)
    Source code(zip)
  • v0.5.6(Aug 21, 2019)

  • v0.5.5(Jan 6, 2019)

    nbgrader version 0.5.5 is a release for the Journal of Open Source education, with the following PRs merged:

    • PR #1057: Ensure consistency in capitalizing Jupyter Notebook
    • PR #1049: Update test builds on Travis
    • PR #1047: JOSE paper bib updates
    • PR #1045: Dev requirements and spelling tests
    • PR #1016: Fix anaconda link
    • PR #973: Create a paper on nbgrader

    Thanks to the following users who submitted PRs or reported issues that were fixed for the 0.5.5 release:

    • jedbrown
    • jhamrick
    • swarnava
    • willingc
    Source code(tar.gz)
    Source code(zip)
  • v0.5.4(Oct 28, 2017)

    nbgrader version 0.5.3 is a bugfix release, with the following PRs merged:

    • PR #898: Make sure validation is run in the correct directory
    • PR #895: Add test and fix for parsing csv key names with spaces
    • PR #888: Fix overwritekernelspec preprocessor and update tests
    • PR #880: change directory when validating notebooks
    • PR #873: Fix issue with student dictionaries when assignments have zero points

    Thanks to the following users who submitted PRs or reported issues that were fixed for the 0.5.4 release:

    • jcsutherland
    • jhamrick
    • lgpage
    • misolietavec
    • mpacer
    • ncclementi
    • randy3k
    Source code(tar.gz)
    Source code(zip)
  • v0.5.3(Aug 24, 2017)

    nbgrader version 0.5.3 is a bugfix release, with the following PRs merged:

    • PR #868: Fix travis to work with trusty
    • PR #867: Change to the root of the course directory before running nbgrader converters
    • PR #866: Set nbgrader url prefix to be relative to notebook_dir
    • PR #865: Produce warnings if the exchange isn't set up correctly
    • PR #864: Fix link to jupyterhub docs
    • PR #861: fix the html to ipynb in docs

    Thanks to the following users who submitted PRs or reported issues that were fixed for the 0.5.3 release:

    • jhamrick
    • misolietavec
    • mpacer
    • rdpratti
    Source code(tar.gz)
    Source code(zip)
  • v0.5.2(Jul 20, 2017)

    nbgrader version 0.5.2 is a bugfix release, with most of the bugs being discovered and subsequently fixed by the sprinters at SciPy 2017! The following PRs were merged:

    • PR #852: Fix spelling wordlist, again
    • PR #850: Include extension with feedback template filename
    • PR #848: Add links to the scipy talk
    • PR #847: Fix html export config options to avoid warnings
    • PR #846: Disallow negative point values
    • PR #845: Don't install assignment list on windows
    • PR #844: Reveal ids if names aren't set
    • PR #843: Update spelling wordlist
    • PR #840: Avoid extension errors when exchange is missing
    • PR #839: Always raise on convert failure
    • PR #837: Report mismatch extension versions
    • PR #836: Add documentation for course_id and release
    • PR #835: DOC: correct Cell Toolbar location
    • PR #833: Include quickstart .ipynb header
    • PR #831: Fix typo on Managing assignment docs
    • PR #830: Print out app subcommands by default
    • PR #825: Add directory structure example
    • PR #824: Add FAQ sections
    • PR #823: Typo fix.
    • PR #819: Update install instructions
    • PR #816: Add jupyter logo
    • PR #802: Fix bug with autograding when there is no timestamp

    Thanks to the following users who submitted PRs or reported issues that were fixed for the 0.5.2 release:

    • arcticbarra
    • BjornFJohansson
    • hetland
    • ixjlyons
    • jhamrick
    • katyhuff
    • ksunden
    • lgpage
    • ncclementi
    • Ruin0x11
    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Jul 10, 2017)

    nbgrader version 0.5.1 is a bugfix release mainly fixing an issue with the formgrader. The following PRs were merged:

    • PR #792: Make sure relative paths to source and release dirs are correct
    • PR #791: Use the correct version number in the docs
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Jul 8, 2017)

    nbgrader version 0.5.0 is another very large release with some very exciting new features! The highlights include:

    • The formgrader is now an extension to the notebook, rather than a standalone service.
    • The formgrader also includes functionality for running nbgrader assign, nbgrader release, nbgrader collect, and nbgrader autograde directly from the browser.
    • A new command nbgrader zip_collect, which helps with collecting assignment files downloaded from a LMS.
    • Hidden test cases are now supported.
    • A lot of functionality has moved into standalone objects that can be called directly from Python, as well as a high-level Python API in nbgrader.apps.NbGraderAPI (see http://nbgrader.readthedocs.io/en/latest/api/high_level_api.html ).
    • A new Validate notebook extension, which allows students to validate an assignment notebook from the notebook itself (this is equivalent functionality to the "Validate" button in the Assignment List extension, but without requiring students to be using the Assignment List).
    • A new command nbgrader db upgrade, which allows you to migrate your nbgrader database to the latest version without having to manually execute SQL commands.
    • New cells when using the Create Assignment extension will automatically given randomly generated ids, so you don't have to set them yourself.
    • You can assign extra credit when using the formgrader.

    Important: Users updating from 0.4.x to 0.5.0 should be aware that they will need to update their nbgrader database using nbgrader db upgrade and will need to reinstall the nbgrader extensions (see http://nbgrader.readthedocs.io/en/latest/user_guide/installation.html ). Additionally, the configuration necessary to use the formgrader with JupyterHub has changed, though it is now much more straightforward (see http://nbgrader.readthedocs.io/en/latest/configuration/jupyterhub_config.html ).

    The full list of merged PRs includes:

    • PR #789: Fix more inaccurate nbextension test failures after reruns
    • PR #788: Fix inaccurate nbextension test failures after reruns
    • PR #787: Fix slow API calls
    • PR #786: Update documentation for nbgrader as a webapp
    • PR #784: Fix race condition in validate extension tests
    • PR #782: Implement nbgrader as a webapp
    • PR #781: Assign missing notebooks a score of zero and mark as not needing grading
    • PR #780: Create a new high-level python API for nbgrader
    • PR #779: Update the year!
    • PR #778: Create and set permissions for exchange directory when using nbgrader release
    • PR #774: Add missing config options
    • PR #772: Standalone versions of nbgrader assign, autograde, and feedback
    • PR #771: Fix mathjax rendering
    • PR #770: Better cleanup when nbconvert-based apps crash
    • PR #769: Fix nbgrader validate globbing for real this time
    • PR #768: Extra credit
    • PR #766: Make sure validation works with notebook globs
    • PR #764: Migrate database with alembic
    • PR #762: More robust saving of the notebook in create assignment tests
    • PR #761: Validate assignment extension
    • PR #759: Fix nbextension tests
    • PR #758: Set random cell ids
    • PR #756: Fix deprecations and small bugs
    • PR #755: Fast validate
    • PR #754: Set correct permissions when submitting assignments
    • PR #752: Add some more informative error messages in zip collect
    • PR #751: Don't create the gradebook database until formgrader is accessed
    • PR #750: Add documentation for how to pass numeric ids
    • PR #747: Skip over students with empty submissions
    • PR #746: Fix bug with --to in custom exporters
    • PR #738: Refactor the filtering of existing submission notebooks for formgrader
    • PR #735: Add DataTables functionality to existing formgrade tables
    • PR #732: Fix the collecting of submission files for multiple attempts of multiple notebook assignments
    • PR #731: Reset late submission penalty before checking if submission is late or not
    • PR #717: Update docs regarding solution delimeters
    • PR #714: Preserve kernelspec when autograding
    • PR #713: Use new exchange functionality in assignment list app
    • PR #712: Move exchange functionality into non-application classes
    • PR #711: Move some config options into a CourseDirectory object.
    • PR #709: Fix formgrader tests link for 0.4.x branch (docs)
    • PR #707: Force rerun nbgrader commands
    • PR #704: Fix nbextension tests
    • PR #701: Set proxy-type=none in phantomjs
    • PR #700: use check_call for extension installation in tests
    • PR #698: Force phantomjs service to terminate in Linux
    • PR #696: Turn the gradebook into a context manager
    • PR #695: Use sys.executable when executing nbgrader
    • PR #693: Update changelog from 0.4.0
    • PR #681: Hide tests in "Autograder tests" cells
    • PR #622: Integrate the formgrader into the notebook
    • PR #526: Processing of LMS downloaded submission files

    Thanks to the following contributors who submitted PRs or reported issues that were merged/closed for the 0.5.0 release:

    • AnotherCodeArtist
    • dementrock
    • dsblank
    • ellisonbg
    • embanner
    • huwf
    • jhamrick
    • jilljenn
    • lgpage
    • minrk
    • suchow
    • Szepi
    • whitead
    • ZelphirKaltstahl
    • zpincus
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Feb 6, 2017)

    nbgrader version 0.4.0 is a substantial release with lots of changes and several new features. The highlights include:

    • Addition of a command to modify students and assignments in the database (nbgrader db)
    • Validation of nbgrader metadata, and a command to automatically upgrade said metadata from the previous version (nbgrader update)
    • Support for native Jupyter nbextension and serverextension installation, and deprecation of the nbgrader nbextension command
    • Buttons to reveal students' names in the formgrader
    • Better reporting of errors and invalid submissions in the "Assignment List" extension
    • Addition of a menu to change between different courses in the "Assignment List" extension
    • Support to run the formgrader as an official JupyterHub service
    • More flexible code and text stubs when creating assignments
    • More thorough documentations

    Important: Users updating from 0.3.x to 0.4.0 should be aware that they will need to update the metadata in their assignments using nbgrader update and will need to reinstall the nbgrader extensions (see http://nbgrader.readthedocs.io/en/stable/user_guide/installation.html#nbgrader-extensions). Additionally, the configuration necessary to use the formgrader with JupyterHub has changed, though it is now much less brittle (see http://nbgrader.readthedocs.io/en/stable/configuration/jupyterhub_config.html).

    The full list of merged PRs includes:

    • PR #689: Add cwd to path for all nbgrader apps
    • PR #688: Make sure the correct permissions are set on released assignments
    • PR #687: Add display_data_priority option to GetGrades preprocessor
    • PR #679: Get Travis-CI to build
    • PR #678: JUPYTERHUB_SERVICE_PREFIX is already the full URL prefix
    • PR #672: Undeprecate --create in assign and autograde
    • PR #670: Fix deprecation warnings for config options
    • PR #665: Preventing URI Encoding of the base-url in the assignment_list extension
    • PR #656: Update developer installation docs
    • PR #655: Fix saving notebook in create assignment tests
    • PR #652: Make 0.4.0 release
    • PR #651: Update changelog with changes from 0.3.3 release
    • PR #650: Print warning when no config file is found
    • PR #649: Bump the number of test reruns even higher
    • PR #646: Fix link to marr paper
    • PR #645: Fix coverage integration by adding codecov.yml
    • PR #644: Add AppVeyor CI files
    • PR #643: Add command to update metadata
    • PR #642: Handle case where points is an empty string
    • PR #639: Add and use a Gradebook contextmanager for DbApp and DbApp tests
    • PR #637: Update conda channel to conda-forge
    • PR #635: Remove conda recipe and document nbgrader-feedstock
    • PR #633: Remove extra level of depth in schema per @ellisonbg
    • PR #630: Don't fail test_check_version test on 'import sitecustomize' failed error
    • PR #629: Update changelog for 0.3.1 and 0.3.2
    • PR #628: Make sure to include schema files
    • PR #625: Add "nbgrader db" app for modifying the database
    • PR #623: Move server extensions into their own directory
    • PR #621: Replace tabs with spaces in installation docs
    • PR #620: Document when needs manual grade is set
    • PR #619: Add CI tests for python 3.6
    • PR #618: Implement formgrader as a jupyterhub service
    • PR #617: Add ability to show student names in formgrader
    • PR #616: Rebuild docs
    • PR #615: Display assignment list errors
    • PR #614: Don't be as strict about solution delimeters
    • PR #613: Update FAQ with platform information
    • PR #612: Update to new traitlets syntax
    • PR #611: Add metadata schema and documentation
    • PR #610: Clarify formgrader port and suppress notebook output
    • PR #607: Set instance variables in base auth class before running super init
    • PR #598: Conda recipe - nbextension link / unlink scripts
    • PR #597: Re-submitting nbextension work from previous PR
    • PR #594: Revert "Use jupyter nbextension/serverextension for installation/activation"
    • PR #591: Test empty and invalid timestamp strings
    • PR #590: Processing of invalid notebook_ids
    • PR #585: Add catches for empty timestamp files and invalid timestamp strings
    • PR #581: Update docs with invoke test group commands
    • PR #571: Convert readthedocs links for their .org -> .io migration for hosted projects
    • PR #567: Handle autograding failures better
    • PR #566: Add support for true read-only cells
    • PR #565: Add option to nbgrader fetch for replacing missing files
    • PR #564: Update documentation pertaining to the assignment list extension
    • PR #563: Add ability to switch between courses in assignment list extension
    • PR #562: Add better support to transfer apps for multiple courses
    • PR #550: Add documentation regarding how validation works
    • PR #545: Document how to customize the student version of an assignment
    • PR #538: Use official HubAuth from JupyterHub
    • PR #536: Create a "nbgrader export" command
    • PR #523: Allow code stubs to be language specific

    Thanks to the following contributors who submitted PRs or reported issues that were merged/closed for the 0.4.0 release:

    • adamchainz
    • AstroMike
    • ddbourgin
    • dlsun
    • dsblank
    • ellisonbg
    • huwf
    • jhamrick
    • lgpage
    • minrk
    • olgabot
    • randy3k
    • whitead
    • whositwhatnow
    • willingc
    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Jan 13, 2017)

    Version 0.3.3 of nbgrader is a minor bugfix release that fixes an issue with running nbgrader fetch on JupyterHub. The following PR was merged for the 0.3.3 milestone:

    • PR #600: missing sys.executable, "-m", on fetch_assignment

    Thanks to the following contributors who submitted PRs or reported issues that were merged/closed for the 0.3.3 release:

    • alikasamanli
    • hetland
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jan 11, 2017)

    Version 0.3.2 of nbgrader includes a few bugfixes pertaining to building nbgrader on conda-forge.

    • PR #608: Fix Windows tests
    • PR #601: Add shell config for invoke on windows
    • PR #593: Send xsrf token in the X-XSRF-Token header for ajax
    • PR #588: basename to wordslist
    • PR #584: Changes for Notebook v4.3 tests

    Thanks to @lgpage, who made all the changes necessary for the 0.3.2 release!

    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Sep 22, 2016)

    Version 0.3.1 of nbgrader includes a few bugfixes pertaining to PostgreSQL and updates to the documentation. The full list of merged PRs is:

    • PR #561: Close db engine
    • PR #548: Document how to install the assignment list extension for all users
    • PR #546: Make it clearer how to set due dates
    • PR #535: Document using JupyterHub with SSL
    • PR #534: Add advanced topics section in the docs
    • PR #533: Update docs on installing extensions

    Thanks to the following contributors who submitted PRs or reported issues that were merged/closed for the 0.3.1 release:

    • ddbourgin
    • jhamrick
    • whositwhatnow
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Jun 25, 2016)

    Version 0.3.0 of nbgrader introduces several significant changes. Most notably, this includes:

    • Windows support
    • Support for Python 3.5
    • Support for Jupyter Notebook 4.2
    • Allow assignments and students to be specified in nbgrader_config.py
    • Addition of the “nbgrader quickstart” command
    • Addition of the “nbgrader extension uninstall” command
    • Create a nbgrader conda recipe
    • Add an entrypoint for late penalty plugins

    The full list of merged PRs is:

    • PR #521: Update to most recent version of invoke
    • PR #512: Late penalty plugin
    • PR #510: Fix failing windows tests
    • PR #508: Run notebook/formgrader/jupyterhub on random ports during tests
    • PR #507: Add a FAQ
    • PR #506: Produce a warning if no coverage files are produced
    • PR #505: Use .utcnow() rather than .now()
    • PR #498: Add a section on autograding wisdom
    • PR #495: Raise an error on iopub timeout
    • PR #494: Write documentation on creating releases
    • PR #493: Update nbgrader to be compatible with notebook version 4.2
    • PR #492: Remove generate_hubapi_token from docs
    • PR #490: Temporarily pin to notebook 4.1
    • PR #489: Make sure next/prev buttons use correct base_url
    • PR #486: Add new words to wordlist
    • PR #485: Update README gif links after docs move into nbgrader
    • PR #477: Create a conda recipe
    • PR #473: More helpful default comment box message
    • PR #470: Fix broken links
    • PR #467: unpin jupyter-client
    • PR #466: Create nbgrader quickstart command
    • PR #465: Confirm no SSL when running jupyterhub
    • PR #464: Speed up tests
    • PR #461: Add more prominent links to demo
    • PR #460: Test that other kernels work with nbgrader
    • PR #458: Add summary and links to resources in docs
    • PR #457: Update formgrader options to not conflict with the notebook
    • PR #455: More docs
    • PR #454: Simplify directory and notebook names
    • PR #453: Merge user guide into a few files
    • PR #452: Improve docs reliability
    • PR #451: Execute documentation notebooks manually
    • PR #449: Allow –assignment flag to be used with transfer apps
    • PR #448: Add –no-execute flag to autogradeapp.py
    • PR #447: Remove option to generate the hubapi token
    • PR #446: Make sure perms are set correctly by nbgrader submit
    • PR #445: Skip failures and log to file
    • PR #444: Fix setup.py
    • PR #443: Specify assignments and students in the config file
    • PR #442: Fix build errors
    • PR #430: Reintroduce flit-less setup.py
    • PR #425: Enable 3.5 on travis.
    • PR #421: Fix Contributor Guide link
    • PR #414: Restructure user guide TOC and doc flow to support new users
    • PR #413: Windows support
    • PR #411: Add tests for https
    • PR #409: Make a friendlier development install
    • PR #408: Fix formgrader to use course directory
    • PR #407: Add –no-metadata option to nbgrader assign
    • PR #405: nbgrader release typo
    • PR #402: Create a Contributor Guide in docs
    • PR #397: Port formgrader to tornado
    • PR #395: Specify root course directory
    • PR #387: Use sys.executable to run suprocesses
    • PR #386: Use relative imports
    • PR #384: Rename the html directory to formgrader
    • PR #381: Access notebook server of formgrader user

    Thanks to the following contributors who submitted PRs or reported issues that were merged/closed for the 0.3.0 release:

    • alchemyst
    • Carreau
    • ellisonbg
    • ischurov
    • jdfreder
    • jhamrick
    • jklymak
    • joschu
    • lgpage
    • mandli
    • mikebolt
    • minrk
    • olgabot
    • sansary
    • svurens
    • vinaykola
    • willingc
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Sep 3, 2015)

    Adds some improvements to the documentation and fixes a few small bugs:

    • Add requests as a dependency
    • Fix a bug where the "Create Assignment" extension was not rendering correctly in Safari
    • Fix a bug in the "Assignment List" extension when assignment names had periods in them
    • Fix integration with JupyterHub when SSL is enabled
    • Fix a bug with computing checksums of cells that contain UTF-8 characters under Python 2
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Aug 23, 2015)

    Fixes a few small bugs in v0.2.0:

    • Make sure checksums can be computed from cells containing unicode characters
    • Fixes a bug where nbgrader autograde would crash if there were any cells with blank grade ids that weren't actually marked as nbgrader cells (e.g. weren't tests or read-only or answers)
    • Fix a few bugs that prevented postgres from being used as the database for nbgrader
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Aug 19, 2015)

    Version 0.2.0 of nbgrader primarily adds support for version 4.0 of the Jupyter notebook and associated project after The Big Split. The full list of major changes are:

    • Jupyter notebook 4.0 support
    • Make it possible to run the formgrader inside a Docker container
    • Make course_id a requirement in the transfer apps (list, release, fetch, submit, collect)
    • Add a new assignment list extension which allows students to list, fetch, validate, and submit assignments from the notebook dashboard interface
    • Auto-resize text boxes when giving feedback in the formgrader
    • Deprecate the BasicConfig and NbGraderConfig classes in favor of a NbGrader class

    Thanks to the following contributors who submitted PRs or reported issues that were merged/closed for the 0.2.0 release:

    • alope107
    • Carreau
    • ellisonbg
    • jhamrick
    • svurens
    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Aug 19, 2015)

    I’m happy to announce that the first version of nbgrader has (finally) been released! nbgrader is a tool that I’ve been working on for a little over a year now which provides a suite of tools for creating, releasing, and grading assignments in the Jupyter notebook. So far, nbgrader has been used to grade assignments for the class I ran in the spring, as well as two classes that Brian Granger has taught.

    If you have any questions, comments, suggestions, etc., please do open an issue on the bugtracker. This is still a very new tool, so I am sure there is a lot that can be improved upon!

    Thanks so much to all of the people who have contributed to this release by reporting issues and/or submitting PRs:

    • alope107
    • Carreau
    • ellachao
    • ellisonbg
    • ivanslapnicar
    • jdfreder
    • jhamrick
    • jonathanmorgan
    • lphk92
    • redSlug
    • smeylan
    • suchow
    • svurens
    • tasilb
    • willingc
    Source code(tar.gz)
    Source code(zip)
Owner
Project Jupyter
Interactive Computing
Project Jupyter
Telegram bot for Urban Dictionary.

Urban Dictionary Bot @TheUrbanDictBot A star ⭐ from you means a lot to us! Telegram bot for Urban Dictionary. Usage Deploy to Heroku Tap on above butt

Stark Bots 17 Nov 24, 2022
A simple program to recolour simple png icon-like pictures with just one colour + transparent or white background. Resulting images all have transparent background and a new colour.

A simple program to recolour simple png icon-like pictures with just one colour + transparent or white background. Resulting images all have transparent background and a new colour.

Anna Tůmová 0 Jan 30, 2022
A web app that is written entirely in Python

University Project About I made this web app to finish a project assigned by my teacher. It is written entirely in Python, thanks to streamlit to make

15 Nov 27, 2022
Improved version calculator, now using while True and etc

CalcuPython_2.0 Olá! Calculadora versão melhorada, agora usando while True e etc... melhorei o design e os carai tudo (rode no terminal, pra melhor ex

Scott 2 Jan 27, 2022
UUID_ApiGenerator - This an API that will return a key-value pair of randomly generated UUID

This an API that will return a key-value pair of randomly generated UUID. Key will be a timestamp and value will be UUID. While the

1 Jan 28, 2022
Demo of a WAM Prolog implementation in Python

Prol: WAM demo This is a simplified Warren Abstract Machine (WAM) implementation for Prolog, that showcases the main instructions, compiling, register

Bruno Kim Medeiros Cesar 62 Dec 26, 2022
Automator anble you to create automations on your system

WELCOME TO AUTOMATOR BETA This programm is able to create automations on your system. This programm is only an experimantal release; infact it works v

Davide 1 Jan 12, 2022
CaskDB is a disk-based, embedded, persistent, key-value store based on the Riak's bitcask paper, written in Python.

CaskDB - Disk based Log Structured Hash Table Store CaskDB is a disk-based, embedded, persistent, key-value store based on the Riak's bitcask paper, w

886 Dec 27, 2022
DeDRM tools for ebooks

DeDRM_tools DeDRM tools for ebooks This is a fork of Apprentice Harper's version of the DeDRM tools. I've added some of the PRs that still haven't bee

2 Jan 10, 2022
Python / C++ based particle reaction-diffusion simulator

ReaDDy (Reaction Diffusion Dynamics) is an open source particle based reaction-diffusion simulator that can be configured and run via Python. Currentl

ReaDDy 46 Dec 09, 2022
A rough GSL work DynSAGE of my graduation project

DynSAGE Codes w.r.t DynSAGE-Diffuse can be found in function apply_dyn_model_v2 of src/utils.py. The training entrance is Line 144 - 155 of src/main.p

Yuhan Wang 3 Mar 22, 2022
The functions we created are included in a script. The necessary parts for pre-processing were taken. Analysis complete.

Feature-Engineering The functions we created are included in a script. The necessary parts for pre-processing were taken. Analysis complete. Business

Ayşe Nur Türkaslan 4 Oct 17, 2021
My HA controller for veg and flower rooms

HAGrowRoom My HA controller for veg and flower rooms I will do my best to keep this updated as I change, add and improve. System heavily uses custom t

4 May 25, 2022
Moji sends text and fun facts from different APIs wit da use of a notification deamon

Moji sends text and fun facts from different APIs wit da use of a notification deamon. Can be runned via dmenu or rofi.

kshly 2 Jan 12, 2022
Resources for the 2021 offering of COMP 598

comp598-2021 Resources for the 2021 offering of COMP 598 General submission instructions Important Please read these instructions located in the corre

Derek Ruths 23 May 18, 2022
This app is to use algorithms to find the root of the equation

In this repository, I made an amazing app with tkinter python language and other libraries the idea of this app is to use algorithms to find the root of the equation I used three methods from numeric

Mohammad Al Jadallah 3 Sep 16, 2022
Zues Auto Claimer Leaked By bazooka#0001

Zues Auto Claimer Leaked By bazooka#0001 put proxies in prox.txt put ssid in sid.txt put all users you want to target in user.txt for the login just t

1 Jan 15, 2022
A python library with various gambling and gaming classes

gamble is a simple library that implements a collection of some common gambling-related classes Features die, dice, d-notation cards, decks, hands pok

Jacobi Petrucciani 16 May 24, 2022
A Python Web Application for Checking vaccine slots by pincodes and auto slot booking.

The Dashboard is developed using Bokeh and python 3.5+. This dashboard is useful for you if you are looking for something which will help you to book the vaccine slot once slots become available. Oth

Suraj Deshmukh 10 Jan 23, 2022
Sequence clustering and database creation using mmseqs, from local fasta files

Sequence clustering and database creation using mmseqs, from local fasta files

Ana Julia Velez Rueda 3 Oct 27, 2022