A general-purpose autograder written primarily in Python 3.
Project description
lograder
A Python library for building programming assignment autograders. The central abstraction is a Pipeline of Step instances -- each step validates input, runs a process, and passes results forward.
Input -> Check -> Mixin -> Build -> Test
Installation
pip install lograder
# or for development:
pip install -e ".[dev]"
Minimal example
from pathlib import Path
from lograder.pipeline.config import config
from lograder.pipeline.input.local_directory import LocalDirectory
from lograder.pipeline.check.project.simple_project import CMakeManifestCheck
from lograder.pipeline.build.cmake import CMakeBuild
from lograder.pipeline.test.output_compare import OutputCompareTest, OutputCompareCase
from lograder.pipeline.score import TestCaseScorer, AllOrNothingScorer, GradescopeConfig
from lograder.pipeline.pipeline import Pipeline
# Define test cases
cases = [
OutputCompareCase(name="hello", args=[], expected_stdout="Hello, World!\n"),
OutputCompareCase(name="echo", args=["foo"], expected_stdout="foo\n"),
]
# Build the pipeline
pipeline = Pipeline()
pipeline.add(inp := LocalDirectory())
pipeline.add(check := CMakeManifestCheck())
pipeline.add(build := CMakeBuild())
pipeline.add(tests := OutputCompareTest("hello", cases))
# Attach scorers
build.scorer = AllOrNothingScorer(10.0, label="Build")
tests.scorer = TestCaseScorer({"hello": 40.0, "echo": 50.0}, label="Correctness")
# Run
with config(root_directory=Path("/autograder/submission")):
score = pipeline()
score.write_results_json(config=GradescopeConfig(visibility="visible"))
Documentation
| Doc | Contents |
|---|---|
| Getting started | First autograder in 5 minutes |
| Concepts | Pipeline, Step, Result, Manifest, Artifact |
| Input | LocalDirectory, EnvironmentConfig |
| Check | Manifest checks, SourceCheck, constraints |
| Build | CMakeBuild, MakefileBuild, BashScriptBuild, PrebuiltArtifacts |
| Test | All 9 test step types with full examples |
| Scoring | Scorers, Gradescope output, results.json |
| Process layer | TypedExecutable, CLIArgs, registry |
| Output / layouts | Logging, HTML report, custom layouts |
| Examples | Complete worked autograders |
Design principles
- Errors as values. Steps return
Result[Ok, Err]rather than raising. A fatalErrreturn stops the pipeline; a yieldedErris logged and execution continues. - Typed data flow. Each step declares its input and output types.
pipeline.validate_step_types()catches mismatches before the first submission runs. - No magic. Every process invocation goes through a
TypedExecutablewith validatedCLIArgs. You can see exactly what command was run and what it produced. - Library only. lograder has no CLI and no service. You write a Python script; lograder is a collection of reusable building blocks.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
lograder-0.2.2.tar.gz
(107.2 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
lograder-0.2.2-py3-none-any.whl
(162.5 kB
view details)
File details
Details for the file lograder-0.2.2.tar.gz.
File metadata
- Download URL: lograder-0.2.2.tar.gz
- Upload date:
- Size: 107.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e511493ebb3ae900667971f6d283c538a86ac15ef9d48aa573985156ab5be3f5
|
|
| MD5 |
59bb1587f434679a158a24153d855563
|
|
| BLAKE2b-256 |
6f9879a4caa7dc252e768775cc8ee15db2c722efe7e79f9b293ce9b3226f2e8f
|
File details
Details for the file lograder-0.2.2-py3-none-any.whl.
File metadata
- Download URL: lograder-0.2.2-py3-none-any.whl
- Upload date:
- Size: 162.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
948e7513cd31609d1726a9fd8c5873b9da7ce35df041551f52d7a7b80cf52703
|
|
| MD5 |
729af14ae946cb3d0206c194e349d9b3
|
|
| BLAKE2b-256 |
acc7166b8624a15a03c105326fcfee092e1cfe792ccfb3d3e4de94c6977c28f5
|