autograder-py


Nameautograder-py JSON
Version 0.5.5 PyPI version JSON
download
home_pageNone
SummaryThe Python interface for the autograding server.
upload_time2024-12-16 20:37:06
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT License Copyright (c) 2023 Eriq Augustine Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords education grading
VCS
bugtrack_url
requirements argon2-cffi flake8 GitPython platformdirs requests
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Python Interface for Autograder

The canonical Python interface for the autograding server.

## Quick Links

 - [Autograder Server](https://github.com/eriq-augustine/autograder-server)
 - [Autograder Python Interface](https://github.com/eriq-augustine/autograder-py)
 - [Autograder Sample Course](https://github.com/eriq-augustine/cse-cracks-course)

## Quickstart

To provide easy access to a limited number of commands,
we provide the `autograder.run` suite of shortcuts.
These are just a small number of the most commonly used commands.
For a more in-depth look at the available commands,
see the [cli section](#the-cli) of this document.

### `autograder.run.submit`

This command sends an assignment submission to the server.
This is a shortcut for [`autograder.cli.courses.assignments.submissions.submit`](#submitting-an-assignment).

```sh
python3 -m autograder.run.submit my_file.py
```

### `autograder.run.history`

This command gets a summary of all your past submissions for an assignment.
This is a shortcut for [`autograder.cli.courses.assignments.submissions.user.history`](#getting-a-history-of-all-past-submissions).

```sh
python3 -m autograder.run.history
```

### `autograder.run.peek`

This command shows you your most recent (or a specific) submission for an assignment.
This is a shortcut for [`autograder.cli.courses.assignments.submissions.user.peek`](#checking-your-last-submission).

```sh
python3 -m autograder.run.peek
```

To get a specific submission, just pass the submission ID (as shown in `autograder.run.history`).

```sh
python3 -m autograder.run.peek 123456789
```

### `autograder.run.auth`

You can use this command to quickly check if your password/config is correct.
This is a shortcut for `autograder.cli.users.auth`.

```sh
python3 -m autograder.run.auth
```

### `autograder.run.change-pass`

This command lets your change your password to whatever you want.
This is a shortcut for [`autograder.cli.users.pass.change`](#managing-your-password).

```sh
python3 -m autograder.run.change-pass
```

You will then be prompted to enter (and re-enter) your new password.

### `autograder.run.reset-pass`

This command will reset your password by sending an email to your registered email address.
This is a shortcut for [`autograder.cli.users.pass.reset`](#managing-your-password).

```sh
python3 -m autograder.run.reset-pass
```

## The CLI

This project contains several tools for interacting with an autograding server and
working with autograder assignments via the `autograder.cli` package.
All tools will show their usage if given the `--help` options.

You can get a list of the package for each set of tools by invoking `autograder.cli` directly:
```sh
python3 -m autograder.cli
```

If you want to see every tool a package (and all its subpackages) have available in one output,
you can use the `-r`/`--recursive` flag:
```sh
python3 -m autograder.cli --recursive
```

There are many available tools and instead of discussing each one here,
this document will highlight the tools each type of user (student, TA, course developer) will generally use.

### Configuration

Before discussing specific tools, you should know some general information about
configuring and sending options to each tool.

To know who you are and what you are working on the autograder needs a few configuration options:
 - `server` -- The autograding server to connect to.
 - `course` -- The ID for the course you are enrolled in.
 - `assignment` -- The current assignment you are working on (does not always apply)..
 - `user` -- Your username (which is also your email).
 - `pass` -- Your password (probably sent to you by the autograding server in an email).

All these options can be set on the command line when invoking on of these tools, e.g.,:
```sh
python3 -m autograder.run.submit --user sammy@ucsc.edu --pass pass123 my_file.py
```
However, it will generally be more convenient to hold these common options in a more reusable location.

There are several other places that config options can be specified,
with each later location overriding any earlier options.
Here are the places options can be specified in the order that they are checked:
 1. `./config.json` -- If a `config.json` exists in the current directory, it is loaded.
 2. `<platform-specific user config location>/autograder.json` -- A directory which is considered the "proper" place to store user-related config for the platform you are using (according to [platformdirs](https://github.com/platformdirs/platformdirs)). Use `--help` to see the exact place in your specific case. This is a great place to store login credentials.
 3. Files specified by `--config` -- These files are loaded in the order they appear on the command-line.
 4. Bare Options -- Options specified directly like `--user` or `--pass`. These will override all previous options.

A base config file (`config.json`) is often distributed with assignments that contains most the settings you need.
You can modify this config to include your settings and use that for setting all your configuration options.

Using the default config file (`config.json`):
```sh
# `./config.json` will be looked for and loaded if it exists.
python3 -m autograder.run.submit my_file.py
```

Using a custom config file (`my_config.json`):
```sh
# `./my_config.json` will be used.
python3 -m autograder.run.submit --config my_config.json my_file.py
```

You can also use multiple config files (latter files will override settings from previous ones).
This is useful if you want to use the config files provided with assignments, but keep your user credentials in a more secure location:
```sh
# Use the default config file (config.json), but then override any settings in there with another config file:
python3 -m autograder.run.submit --config config.json --config ~/.secrets/autograder.json my_file.py
```

For brevity, all future commands in this document will assume that all standard config options are in the default
config files (and thus will not need to be specified).

### Commands for Students

Students will mainly be concerned with submitting assignments and checking on the status of their submission.
Therefore, the `autograder.run` package will be their primary resource.
This package contains tools for making, managing, and querying submissions.

#### Submitting an Assignment

Submitting an assignment to an autograder is done using the `autograder.run.submit` command.
This command takes the standard config options as well as an optional message to attach to the submission (like a commit message)
as well as all files to be included in the submission.

```sh
python3 -m autograder.run.submit --message "This is my submit message!" my_file.py
```

As many files as you need can be submitted (directories cannot be submitted):
```sh
python3 -m autograder.run.submit my_first_file.py my_second_file.java some_dir/*
```

The autograder will attempt to grade your assignment and will return some message about the result of grading.
For example, a successful grading may look like:
```
The autograder successfully graded your assignment.
Autograder transcript for assignment: HO0.
Grading started at 2023-09-26 08:35 and ended at 2023-09-26 08:35.
Task 1.A (my_function): 40 / 40
Task 2.A (test_my_function_value): 30 / 30
Task 2.B (TestMyFunction): 30 / 30
Style: 0 / 0
   Style is clean!

Total: 100 / 100
```

On any successful grading (even if you got a zero), your result has been saved by the autograder and is in the system.
On a submission failure, the autograder will tell you and you will not receive any grade for your submission.
A failure may look like:
```
The autograder failed to grade your assignment.
Message from the autograder: Request could not be authenticated. Ensure that your username, password, and course are properly set.
```

#### Checking Your Last Submission

You can ask the autograder to show you the grade report for your last submission using the
`autograder.run.peek` command.

```sh
python3 -m autograder.run.peek
```

The output may look like:
```
Found a past submission for this assignment.
Autograder transcript for assignment: HO0.
Grading started at 2023-09-26 08:35 and ended at 2023-09-26 08:35.
Task 1.A (my_function): 40 / 40
Task 2.A (test_my_function_value): 30 / 30
Task 2.B (TestMyFunction): 30 / 30
Style: 0 / 0
   Style is clean!

Total: 100 / 100
```

If you have made no past (successful) submissions, then your output may look like:
```
No matching submission found.
```

#### Getting a History of All Past Submissions

You can use the `autograder.run.history` command to get a summary of all your past submissions for an assignment.

```sh
python3 -m autograder.run.history
```

The output may look like:
```
Found 2 submissions.
    Submission ID: 1695682455, Score: 24 / 100, Time: 2023-09-25 17:54.
    Submission ID: 1695735313, Score: 100 / 100, Time: 2023-09-26 08:35, Message: 'I did it!'
```

If you have made no past (successful) submissions, then your output may look like:
```
No matching submission found.
```

#### Managing your Password

Your password is the same throughout a single instance of the autograding server.
This means that multiple courses that run on the same server will all use your same account
(and therefore password).

Your initial password should have been emailed to the email associated with your account
(typically your school email address).

To reset your password,
use the `autograder.run.reset-pass` (aka `autograder.cli.users.pass.reset`) command:

```sh
python3 -m autograder.run.reset-pass
```

This will email you a new random password to your account's email.
Once your password is reset, it is recommended to change it to whatever you want.

To change your password, you can use the
`autograder.run.change-pass` (aka `autograder.cli.users.pass.change`) command:

```sh
python3 -m autograder.run.change-pass
```

You will then be prompted to enter (and re-enter) your new password.
See the command's help prompt (`--help`) for additional ways you can supply your password.

### Commands for TAs and Instructors

For those that are managing a course and students,
most commands will be useful to you.
So you should have a look through all commands via:
```sh
python3 -m autograder.cli -r
```

This will list all available packages and commands.
You can omit the `-r` if you want to look at one package at a time.
For example, to inspect the `autograder.run` package, you can do:
```sh
python -m autograder.run
```

Below is a list of commands you may want to look into.
The help prompt of each command (accessible using the `--help` option)
will give a more in-depth description of the command and available options.

 - `autograder.lms.upload-scores` -- Upload scores for any LMS assignment straight to your LMS. Very useful for avoiding a clunky LMS interface.
 - `autograder.cli.courses.assignments.submissions.fetch.course.scores` -- Get all the most recent scores for an assignment.
 - `autograder.cli.courses.assignments.submissions.fetch.user.attempt` -- Get a student's submission (code) and grading output.
 - `autograder.cli.courses.assignments.submissions.fetch.course.attempts` -- Get all the most recent submissions (code and grading output) for an assignment.
 - `autograder.cli.courses.users.list` -- List all the users in a course.

### Commands for Course Builders

Users who are building courses should generally be aware of all the available tools,
but most of your time will probably be spent in the
`autograder.cli.testing` and `autograder.cli.grading` packages.
`autograder.cli.testing` is for running tests and checks (usually locally) on assignments.
`autograder.cli.grading` lets you grade assignments locally (without using an autograding server).
Because the autograding server runs this package inside a Docker container to do grading,
it can be much faster and more convenient to build assignments fully locally before using an autograding server.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "autograder-py",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "education, grading",
    "author": null,
    "author_email": "Eriq Augustine <eriq@edulinq.org>",
    "download_url": "https://files.pythonhosted.org/packages/24/b7/6193166cb3ba283cd7fa859f4c6a4d79d4bb7c318cc3d6f59c3a3c6cc768/autograder_py-0.5.5.tar.gz",
    "platform": null,
    "description": "# Python Interface for Autograder\n\nThe canonical Python interface for the autograding server.\n\n## Quick Links\n\n - [Autograder Server](https://github.com/eriq-augustine/autograder-server)\n - [Autograder Python Interface](https://github.com/eriq-augustine/autograder-py)\n - [Autograder Sample Course](https://github.com/eriq-augustine/cse-cracks-course)\n\n## Quickstart\n\nTo provide easy access to a limited number of commands,\nwe provide the `autograder.run` suite of shortcuts.\nThese are just a small number of the most commonly used commands.\nFor a more in-depth look at the available commands,\nsee the [cli section](#the-cli) of this document.\n\n### `autograder.run.submit`\n\nThis command sends an assignment submission to the server.\nThis is a shortcut for [`autograder.cli.courses.assignments.submissions.submit`](#submitting-an-assignment).\n\n```sh\npython3 -m autograder.run.submit my_file.py\n```\n\n### `autograder.run.history`\n\nThis command gets a summary of all your past submissions for an assignment.\nThis is a shortcut for [`autograder.cli.courses.assignments.submissions.user.history`](#getting-a-history-of-all-past-submissions).\n\n```sh\npython3 -m autograder.run.history\n```\n\n### `autograder.run.peek`\n\nThis command shows you your most recent (or a specific) submission for an assignment.\nThis is a shortcut for [`autograder.cli.courses.assignments.submissions.user.peek`](#checking-your-last-submission).\n\n```sh\npython3 -m autograder.run.peek\n```\n\nTo get a specific submission, just pass the submission ID (as shown in `autograder.run.history`).\n\n```sh\npython3 -m autograder.run.peek 123456789\n```\n\n### `autograder.run.auth`\n\nYou can use this command to quickly check if your password/config is correct.\nThis is a shortcut for `autograder.cli.users.auth`.\n\n```sh\npython3 -m autograder.run.auth\n```\n\n### `autograder.run.change-pass`\n\nThis command lets your change your password to whatever you want.\nThis is a shortcut for [`autograder.cli.users.pass.change`](#managing-your-password).\n\n```sh\npython3 -m autograder.run.change-pass\n```\n\nYou will then be prompted to enter (and re-enter) your new password.\n\n### `autograder.run.reset-pass`\n\nThis command will reset your password by sending an email to your registered email address.\nThis is a shortcut for [`autograder.cli.users.pass.reset`](#managing-your-password).\n\n```sh\npython3 -m autograder.run.reset-pass\n```\n\n## The CLI\n\nThis project contains several tools for interacting with an autograding server and\nworking with autograder assignments via the `autograder.cli` package.\nAll tools will show their usage if given the `--help` options.\n\nYou can get a list of the package for each set of tools by invoking `autograder.cli` directly:\n```sh\npython3 -m autograder.cli\n```\n\nIf you want to see every tool a package (and all its subpackages) have available in one output,\nyou can use the `-r`/`--recursive` flag:\n```sh\npython3 -m autograder.cli --recursive\n```\n\nThere are many available tools and instead of discussing each one here,\nthis document will highlight the tools each type of user (student, TA, course developer) will generally use.\n\n### Configuration\n\nBefore discussing specific tools, you should know some general information about\nconfiguring and sending options to each tool.\n\nTo know who you are and what you are working on the autograder needs a few configuration options:\n - `server` -- The autograding server to connect to.\n - `course` -- The ID for the course you are enrolled in.\n - `assignment` -- The current assignment you are working on (does not always apply)..\n - `user` -- Your username (which is also your email).\n - `pass` -- Your password (probably sent to you by the autograding server in an email).\n\nAll these options can be set on the command line when invoking on of these tools, e.g.,:\n```sh\npython3 -m autograder.run.submit --user sammy@ucsc.edu --pass pass123 my_file.py\n```\nHowever, it will generally be more convenient to hold these common options in a more reusable location.\n\nThere are several other places that config options can be specified,\nwith each later location overriding any earlier options.\nHere are the places options can be specified in the order that they are checked:\n 1. `./config.json` -- If a `config.json` exists in the current directory, it is loaded.\n 2. `<platform-specific user config location>/autograder.json` -- A directory which is considered the \"proper\" place to store user-related config for the platform you are using (according to [platformdirs](https://github.com/platformdirs/platformdirs)). Use `--help` to see the exact place in your specific case. This is a great place to store login credentials.\n 3. Files specified by `--config` -- These files are loaded in the order they appear on the command-line.\n 4. Bare Options -- Options specified directly like `--user` or `--pass`. These will override all previous options.\n\nA base config file (`config.json`) is often distributed with assignments that contains most the settings you need.\nYou can modify this config to include your settings and use that for setting all your configuration options.\n\nUsing the default config file (`config.json`):\n```sh\n# `./config.json` will be looked for and loaded if it exists.\npython3 -m autograder.run.submit my_file.py\n```\n\nUsing a custom config file (`my_config.json`):\n```sh\n# `./my_config.json` will be used.\npython3 -m autograder.run.submit --config my_config.json my_file.py\n```\n\nYou can also use multiple config files (latter files will override settings from previous ones).\nThis is useful if you want to use the config files provided with assignments, but keep your user credentials in a more secure location:\n```sh\n# Use the default config file (config.json), but then override any settings in there with another config file:\npython3 -m autograder.run.submit --config config.json --config ~/.secrets/autograder.json my_file.py\n```\n\nFor brevity, all future commands in this document will assume that all standard config options are in the default\nconfig files (and thus will not need to be specified).\n\n### Commands for Students\n\nStudents will mainly be concerned with submitting assignments and checking on the status of their submission.\nTherefore, the `autograder.run` package will be their primary resource.\nThis package contains tools for making, managing, and querying submissions.\n\n#### Submitting an Assignment\n\nSubmitting an assignment to an autograder is done using the `autograder.run.submit` command.\nThis command takes the standard config options as well as an optional message to attach to the submission (like a commit message)\nas well as all files to be included in the submission.\n\n```sh\npython3 -m autograder.run.submit --message \"This is my submit message!\" my_file.py\n```\n\nAs many files as you need can be submitted (directories cannot be submitted):\n```sh\npython3 -m autograder.run.submit my_first_file.py my_second_file.java some_dir/*\n```\n\nThe autograder will attempt to grade your assignment and will return some message about the result of grading.\nFor example, a successful grading may look like:\n```\nThe autograder successfully graded your assignment.\nAutograder transcript for assignment: HO0.\nGrading started at 2023-09-26 08:35 and ended at 2023-09-26 08:35.\nTask 1.A (my_function): 40 / 40\nTask 2.A (test_my_function_value): 30 / 30\nTask 2.B (TestMyFunction): 30 / 30\nStyle: 0 / 0\n   Style is clean!\n\nTotal: 100 / 100\n```\n\nOn any successful grading (even if you got a zero), your result has been saved by the autograder and is in the system.\nOn a submission failure, the autograder will tell you and you will not receive any grade for your submission.\nA failure may look like:\n```\nThe autograder failed to grade your assignment.\nMessage from the autograder: Request could not be authenticated. Ensure that your username, password, and course are properly set.\n```\n\n#### Checking Your Last Submission\n\nYou can ask the autograder to show you the grade report for your last submission using the\n`autograder.run.peek` command.\n\n```sh\npython3 -m autograder.run.peek\n```\n\nThe output may look like:\n```\nFound a past submission for this assignment.\nAutograder transcript for assignment: HO0.\nGrading started at 2023-09-26 08:35 and ended at 2023-09-26 08:35.\nTask 1.A (my_function): 40 / 40\nTask 2.A (test_my_function_value): 30 / 30\nTask 2.B (TestMyFunction): 30 / 30\nStyle: 0 / 0\n   Style is clean!\n\nTotal: 100 / 100\n```\n\nIf you have made no past (successful) submissions, then your output may look like:\n```\nNo matching submission found.\n```\n\n#### Getting a History of All Past Submissions\n\nYou can use the `autograder.run.history` command to get a summary of all your past submissions for an assignment.\n\n```sh\npython3 -m autograder.run.history\n```\n\nThe output may look like:\n```\nFound 2 submissions.\n    Submission ID: 1695682455, Score: 24 / 100, Time: 2023-09-25 17:54.\n    Submission ID: 1695735313, Score: 100 / 100, Time: 2023-09-26 08:35, Message: 'I did it!'\n```\n\nIf you have made no past (successful) submissions, then your output may look like:\n```\nNo matching submission found.\n```\n\n#### Managing your Password\n\nYour password is the same throughout a single instance of the autograding server.\nThis means that multiple courses that run on the same server will all use your same account\n(and therefore password).\n\nYour initial password should have been emailed to the email associated with your account\n(typically your school email address).\n\nTo reset your password,\nuse the `autograder.run.reset-pass` (aka `autograder.cli.users.pass.reset`) command:\n\n```sh\npython3 -m autograder.run.reset-pass\n```\n\nThis will email you a new random password to your account's email.\nOnce your password is reset, it is recommended to change it to whatever you want.\n\nTo change your password, you can use the\n`autograder.run.change-pass` (aka `autograder.cli.users.pass.change`) command:\n\n```sh\npython3 -m autograder.run.change-pass\n```\n\nYou will then be prompted to enter (and re-enter) your new password.\nSee the command's help prompt (`--help`) for additional ways you can supply your password.\n\n### Commands for TAs and Instructors\n\nFor those that are managing a course and students,\nmost commands will be useful to you.\nSo you should have a look through all commands via:\n```sh\npython3 -m autograder.cli -r\n```\n\nThis will list all available packages and commands.\nYou can omit the `-r` if you want to look at one package at a time.\nFor example, to inspect the `autograder.run` package, you can do:\n```sh\npython -m autograder.run\n```\n\nBelow is a list of commands you may want to look into.\nThe help prompt of each command (accessible using the `--help` option)\nwill give a more in-depth description of the command and available options.\n\n - `autograder.lms.upload-scores` -- Upload scores for any LMS assignment straight to your LMS. Very useful for avoiding a clunky LMS interface.\n - `autograder.cli.courses.assignments.submissions.fetch.course.scores` -- Get all the most recent scores for an assignment.\n - `autograder.cli.courses.assignments.submissions.fetch.user.attempt` -- Get a student's submission (code) and grading output.\n - `autograder.cli.courses.assignments.submissions.fetch.course.attempts` -- Get all the most recent submissions (code and grading output) for an assignment.\n - `autograder.cli.courses.users.list` -- List all the users in a course.\n\n### Commands for Course Builders\n\nUsers who are building courses should generally be aware of all the available tools,\nbut most of your time will probably be spent in the\n`autograder.cli.testing` and `autograder.cli.grading` packages.\n`autograder.cli.testing` is for running tests and checks (usually locally) on assignments.\n`autograder.cli.grading` lets you grade assignments locally (without using an autograding server).\nBecause the autograding server runs this package inside a Docker container to do grading,\nit can be much faster and more convenient to build assignments fully locally before using an autograding server.\n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2023 Eriq Augustine  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
    "summary": "The Python interface for the autograding server.",
    "version": "0.5.5",
    "project_urls": {
        "Homepage": "https://github.com/edulinq/autograder-py",
        "Repository": "https://github.com/edulinq/autograder-py"
    },
    "split_keywords": [
        "education",
        " grading"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c30e29d34408f0ecb1e0750d5174fce530ca7bbb9b404a216d537a98c63dc7ce",
                "md5": "73c655cd4038c5968e4062087de1fe8a",
                "sha256": "83f9ca1688fa634416564bcbbc33f9446f3e43005ad515112b70d0013fa2c769"
            },
            "downloads": -1,
            "filename": "autograder_py-0.5.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "73c655cd4038c5968e4062087de1fe8a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 98450,
            "upload_time": "2024-12-16T20:37:04",
            "upload_time_iso_8601": "2024-12-16T20:37:04.519576Z",
            "url": "https://files.pythonhosted.org/packages/c3/0e/29d34408f0ecb1e0750d5174fce530ca7bbb9b404a216d537a98c63dc7ce/autograder_py-0.5.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "24b76193166cb3ba283cd7fa859f4c6a4d79d4bb7c318cc3d6f59c3a3c6cc768",
                "md5": "7ec21cb58eeb732b4f1b0e7baa3b1765",
                "sha256": "6fa6b5220ecf7cca34f3859ddddfb13b0274523718a0c378d255558492df07fd"
            },
            "downloads": -1,
            "filename": "autograder_py-0.5.5.tar.gz",
            "has_sig": false,
            "md5_digest": "7ec21cb58eeb732b4f1b0e7baa3b1765",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 57556,
            "upload_time": "2024-12-16T20:37:06",
            "upload_time_iso_8601": "2024-12-16T20:37:06.743910Z",
            "url": "https://files.pythonhosted.org/packages/24/b7/6193166cb3ba283cd7fa859f4c6a4d79d4bb7c318cc3d6f59c3a3c6cc768/autograder_py-0.5.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-16 20:37:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "edulinq",
    "github_project": "autograder-py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "argon2-cffi",
            "specs": [
                [
                    ">=",
                    "23.1.0"
                ]
            ]
        },
        {
            "name": "flake8",
            "specs": [
                [
                    ">=",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "GitPython",
            "specs": [
                [
                    ">=",
                    "3.1.31"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    ">=",
                    "3.10.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.31.0"
                ]
            ]
        }
    ],
    "lcname": "autograder-py"
}
        
Elapsed time: 0.96660s