[](https://sedrila.readthedocs.io/en/latest/?badge=latest)
# `sedrila`: Tool infrastructure for building and running "self-driven lab" courses
A "self-driven lab" (SeDriLa) course is one where students select freely
a subset from a large set of tasks.
The tasks are described with sufficient detail that no guidance from an instructor
is needed most of the time.
sedrila is a command-line tool supporting course authors for authoring a course
and then course instructors and students for executing it.
Find the [documentation at readthedocs](https://sedrila.readthedocs.io).
## 1. Ideas for future versions
### 1.1 A currently needed refactoring: Target directory structure
The current layout of the source tree is wrong.
Currently, the `templates` and `baseresources` directories will end up
as top-level directories when the package is installed,
which means they will clash with any top-level modules of that name
anywhere in our dependencies.
We need to perform the following refactorings to arrive at a proper structure:
- `py` --> `sedrila`: This will be the top level directory that gets installed.
- `sedrila/sdrl/*` --> `sedrila/*`: We remove the now-intermediate namespace.
This implies joining the current `sdrl/tests` into `sedrila/tests`.
- `templates` --> `sedrila/templates`: The HTML templates simply become part of the
tree to be installed.
- `baseresources` --> `sedrila/baseresources`: Ditto.
These changes require a lot of changes of import statements.
For instance, the current module `base` will become `sedrila.base`
and `sdrl.course` will become `sedrila.course`.
The logic for computing `sedrila_libdir` in `courses.py` must be adapted.
`SedrilaArgParser.get_version()` must be adapted.
The files lists in `pyproject.toml` must be corrected.
Also: Perhaps use deply for checking the layer structure described in internal_notes.md:
https://github.com/vashkatsi/deply
### 1.2 `instructor`: Handling instructors' trees of student repos
- Add `participants_file` (a CSV file) to `sedrila.yaml`,
export its `student_id` and `student_gituser` columns to the website's `/instructor/participants.json`, and
use it to warn upon submissions from students not admitted to the course.
- Reject submissions where `course_url` is different from what it was in that repo's first accepted submission.
### 1.3 `student`
- ...
## 2. Development process: TODO-handling during development
We use this convention for the development of `sedrila`.
It may also be helpful for course authors if the team is small enough.
If something is incomplete, add a TODO marker with a priorization digit and
add a short description of what needs to be done. Examples:
- `TODO 1: find proper formulation`
- `TODO 2: restructure to use ACME lib`
- `TODO 3: add automatic grammar correction`
Priorities:
- 1: to be completed soon (within a few days)
- 2: to be completed once the prio 1 things are done (within days or a few weeks)
- 3: to be completed at some later time (usually several weeks or more into the future,
because it is big) or never (because it is not-so-important: "nice-to-have features")
Then use the IDE global search to work through these layer-by-layer.
Demote items to a lower priority when they become stale or remove them.
Kick out prio 3 items when they become unlikely.
Raw data
{
"_id": null,
"home_page": "https://github.com/fubinf/sedrila",
"name": "sedrila",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.11",
"maintainer_email": null,
"keywords": "static site generator, learning management system",
"author": "Lutz Prechelt",
"author_email": "prechelt@inf.fu-berlin.de",
"download_url": "https://files.pythonhosted.org/packages/b3/08/a978859a9be8dbc105ee7ff31f6e28c844e5336b25ff864b4fcd2bec804b/sedrila-2.10.0.tar.gz",
"platform": null,
"description": "[](https://sedrila.readthedocs.io/en/latest/?badge=latest)\n\n# `sedrila`: Tool infrastructure for building and running \"self-driven lab\" courses\n\nA \"self-driven lab\" (SeDriLa) course is one where students select freely \na subset from a large set of tasks.\nThe tasks are described with sufficient detail that no guidance from an instructor\nis needed most of the time.\n\nsedrila is a command-line tool supporting course authors for authoring a course\nand then course instructors and students for executing it.\n\nFind the [documentation at readthedocs](https://sedrila.readthedocs.io).\n\n\n## 1. Ideas for future versions\n\n\n### 1.1 A currently needed refactoring: Target directory structure\n\nThe current layout of the source tree is wrong.\nCurrently, the `templates` and `baseresources` directories will end up \nas top-level directories when the package is installed,\nwhich means they will clash with any top-level modules of that name\nanywhere in our dependencies.\n\nWe need to perform the following refactorings to arrive at a proper structure:\n\n- `py` --> `sedrila`: This will be the top level directory that gets installed.\n- `sedrila/sdrl/*` --> `sedrila/*`: We remove the now-intermediate namespace.\n This implies joining the current `sdrl/tests` into `sedrila/tests`.\n- `templates` --> `sedrila/templates`: The HTML templates simply become part of the\n tree to be installed.\n- `baseresources` --> `sedrila/baseresources`: Ditto.\n\nThese changes require a lot of changes of import statements.\nFor instance, the current module `base` will become `sedrila.base`\nand `sdrl.course` will become `sedrila.course`.\nThe logic for computing `sedrila_libdir` in `courses.py` must be adapted.\n`SedrilaArgParser.get_version()` must be adapted.\nThe files lists in `pyproject.toml` must be corrected.\n\nAlso: Perhaps use deply for checking the layer structure described in internal_notes.md:\nhttps://github.com/vashkatsi/deply\n\n\n### 1.2 `instructor`: Handling instructors' trees of student repos\n\n- Add `participants_file` (a CSV file) to `sedrila.yaml`, \n export its `student_id` and `student_gituser` columns to the website's `/instructor/participants.json`, and \n use it to warn upon submissions from students not admitted to the course.\n- Reject submissions where `course_url` is different from what it was in that repo's first accepted submission.\n\n\n\n### 1.3 `student`\n\n- ...\n\n\n## 2. Development process: TODO-handling during development\n\nWe use this convention for the development of `sedrila`.\nIt may also be helpful for course authors if the team is small enough.\n\nIf something is incomplete, add a TODO marker with a priorization digit and\nadd a short description of what needs to be done. Examples:\n- `TODO 1: find proper formulation`\n- `TODO 2: restructure to use ACME lib`\n- `TODO 3: add automatic grammar correction`\n\nPriorities:\n- 1: to be completed soon (within a few days)\n- 2: to be completed once the prio 1 things are done (within days or a few weeks)\n- 3: to be completed at some later time (usually several weeks or more into the future,\n because it is big) or never (because it is not-so-important: \"nice-to-have features\")\n\nThen use the IDE global search to work through these layer-by-layer.\nDemote items to a lower priority when they become stale or remove them.\nKick out prio 3 items when they become unlikely.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Tool infrastructure for building and running \"self-driven lab\" courses",
"version": "2.10.0",
"project_urls": {
"Homepage": "https://github.com/fubinf/sedrila",
"Repository": "https://github.com/fubinf/sedrila"
},
"split_keywords": [
"static site generator",
" learning management system"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "10bb09efa6cf38361de2cd764e9ff54ec49ff305bc16cb4fa4d92bd171937764",
"md5": "176b51663182db530a618c358b7ec261",
"sha256": "0b38c8049ceb66a4bbe97228a6c5212751b934dd1420e939f1f1c5080e33dcb4"
},
"downloads": -1,
"filename": "sedrila-2.10.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "176b51663182db530a618c358b7ec261",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.11",
"size": 112931,
"upload_time": "2025-10-13T21:21:14",
"upload_time_iso_8601": "2025-10-13T21:21:14.380927Z",
"url": "https://files.pythonhosted.org/packages/10/bb/09efa6cf38361de2cd764e9ff54ec49ff305bc16cb4fa4d92bd171937764/sedrila-2.10.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b308a978859a9be8dbc105ee7ff31f6e28c844e5336b25ff864b4fcd2bec804b",
"md5": "847510395eb0ddfd614091c0a041202b",
"sha256": "27b9c13f209c556774f7fa36271a099d05b3d33a8dd14fc353a2d207df96eaad"
},
"downloads": -1,
"filename": "sedrila-2.10.0.tar.gz",
"has_sig": false,
"md5_digest": "847510395eb0ddfd614091c0a041202b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.11",
"size": 99240,
"upload_time": "2025-10-13T21:21:15",
"upload_time_iso_8601": "2025-10-13T21:21:15.933354Z",
"url": "https://files.pythonhosted.org/packages/b3/08/a978859a9be8dbc105ee7ff31f6e28c844e5336b25ff864b4fcd2bec804b/sedrila-2.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-13 21:21:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fubinf",
"github_project": "sedrila",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "sedrila"
}