Metadata-Version: 2.3
Name: markten
Version: 0.4.0
Summary: Assess your students' work with all of the delight and none of the tedium
License: MIT
Keywords: marking,auto-marker,automation,xmark,imark,mark,ten
Author: Maddy Guthridge
Author-email: hello@maddyguthridge.com
Requires-Python: >= 3.11
Classifier: Programming Language :: Python :: 3
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 5 - Production/Stable
Classifier: Topic :: Education
Classifier: Topic :: Education :: Testing
Classifier: Typing :: Typed
Requires-Dist: aiosqlite (>=0.21.0,<0.22.0)
Requires-Dist: click (>=8.1.8,<9)
Requires-Dist: humanize (>=4.12.2,<5.0.0)
Requires-Dist: platformdirs (>=4.3.6,<5.0.0)
Requires-Dist: rich (>=13.9.4,<14)
Project-URL: Bug Tracker, https://github.com/COMP1010UNSW/MarkTen/issues
Project-URL: Repository, https://github.com/COMP1010UNSW/MarkTen
Description-Content-Type: text/markdown

# MarkTen

Assess your students' work with all of the delight and none of the tedium.

## Installing

```bash
$ pip install markten
...
Successfully installed markten-0.1.0
```

Or to install in an independent environment, you can use `pipx`:

```bash
$ pipx install markten
  installed package markten 0.1.0, installed using Python 3.12.6
  These apps are now globally available
    - markten
done! ✨ 🌟 ✨
```

## Running recipes

You can execute the recipe directly, like you would any Python script:

```sh
$ python my_recipe.py
...
```

You can also use the `markten` executable if you want to keep `markten`'s 
dependencies in an isolated environment. The Python script you provide as
an argument is executed within that environment.

```sh
$ markten my_recipe.py
...
```

## How it works

Define your recipe parameters. For example, this recipe takes in git repo names
from stdin.

```py
from markten import Recipe, parameters, actions

marker = Recipe("Clone COMP1010 repos")

marker.parameter("repo", parameters.stdin("Repo name"))
```

Write simple marking recipes by defining simple functions for each step.

```py
# Functions can take arbitrary parameters
def setup(repo: str):
    """Set up marking environment"""
    # Clone the given git repo to a temporary directory
    directory = actions.git.clone(f"git@github.com:COMP1010UNSW/{repo}.git")
    return {
        "directory": directory,
    }

marker.step("Clone repo", setup)
```

The parameters returned by your previous steps can be used in later steps, just
by giving the function parameters the same name.

```py
def open_code(directory: Path):
    """Open the cloned git repo in VS Code"""
    return actions.editor.vs_code(directory)

marker.step("View in VS Code", open_code)
```

Then run the recipe. It'll run for every permutation of your parameters, making
it easy to mark in bulk.

```py
marker.run()
```

For more examples, see the examples directory.

