cpGrader: A Python Package to Grade Programming Assignments Automatically
cpGrader is designed to be used with the course "NTNU CSIE Computer Programming I/II" by instructor neokent (紀博文 Po-Wen Chi).
Thanks for your Contribution 🌟
Installation
pip install cpGrader
How does it works?
Stage (You can enable/disable the stage)
Extract: Get all the students's source file from moodle submission folder.Build: Copy the support files to the student's folder and Compile the student's program.Execute: Run the student's program by the testcase and Generate output file by each testcase.Verify: Compare the student's output with the correct plaintext output or the correct program's output.
Step
- Download all the student submissions from Moodle.
- Think about the testcases and strategies that how to grade the student's assignment.
- Write a config file.
- Design the verify function.
- Run your grader.
Getting Started
TOML Config File
global: the global settings (Field below is just for global).support [list]: the files copied to the student's folder.
case: the testcase settings (Each case can be independent).name [string]: name of testcase.file [string]: filepath of testcase file.pts [float | int]: grading points.correct [string]: the correct file which is program file (.c,.py) or plain text file (.txt,.out).command [string]: the command to run student's program.
Basic Example
Config File
[global]
support = ["input.bmp", "assignment.h"]
correct = "./correct.c"
command = "./assignment"
[[case]]
name = "case1"
file = "./testcase/1.in"
pts = 5
[[case]]
name = "case2"
file = "./testcase/2.in"
pts = 10
Python Code
from cpGrader import Grader
grader = Grader()
@grader.setcase()
def verify(case_name: str, student_output: str, correct_output: str):
assert student_output == correct_output
grader.run(
moodle_submission_dir="/path/to/submissions_dir"
)
GO AND SEE MORE REAL EXAMPLES HERE.
Pytest Testing
Run All Examples Test
pytest
Choose the Test to Run (Wildcard)
pytest -k 2023-cp1-hw01
Details and Muti-Threading
pytest -vs -n auto
Metadata
Release files for cpGrader 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| cpgrader-0.1.4.tar.gz | 20.2 kB | Without provenance | Details for cpgrader-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| cpgrader-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for cpgrader-0.1.4-py3-none-any.whl |
Total release size: 40.5 kB
Release files / cpgrader-0.1.4.tar.gz
| Download URL | cpgrader-0.1.4.tar.gz |
|---|---|
| Size | 20.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4fcbf15a1e42e01ac6917c629c044934362686bae197fa5582505363a64f10bd
|
|
BLAKE2b-256 checksum How to use checksums |
5fbb6e86c3d74c6dcb72745e3116e68b83b4a0ab3c2e983e3f97fff87fa9a457
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.2 CPython/3.12.1 Linux/6.8.0-1021-azure
|
Release files / cpgrader-0.1.4-py3-none-any.whl
| Download URL | cpgrader-0.1.4-py3-none-any.whl |
|---|---|
| Size | 20.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c339d6f30450f52b30e283f550b6d274fd307f891e6dcea709e08e6e915b4966
|
|
BLAKE2b-256 checksum How to use checksums |
cdc7d5a52b99445e42936afcd46b84865b8eebf746fd83d809dccfa67c327f4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.2 CPython/3.12.1 Linux/6.8.0-1021-azure
|
Security for cpGrader 0.1.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.