Assignment tool for physics TAs
Project description
Physics TA Assignment Tool (physethta)
This Python package automates the assignment of teaching assistants (TAs) to physics courses at ETH Zurich. It processes structured data from internal and external sources, applies configuration rules, and generates LaTeX reports summarizing TA allocations by group and course.
🧠 Overview
The assignment pipeline consists of:
-
Data Loading: Reading input files from Excel/CSV format.
-
Mapping Supervisors: Combining internal (via
vorg.csv) and external (viaExterne.xlsx) PhD supervisors. -
Course Title Normalization: Creating consistent course titles via
config.yaml. -
Assignment Logic:
- Organizing assistants under supervisors (PIs).
- Associating students with courses (with language information).
-
Report Generation:
- Producing
LaTeXdocuments sorted by PI and course. - Optionally compiling them into PDFs.
- Producing
📁 Project Structure
physethta/
│
├── assigner.py # Core logic for building PI and course dictionaries
├── config.py # YAML config loader
├── external.py # Handles mappings for external PhD students
├── loader.py # Loads and cleans data from Excel/CSV
├── report.py # Generates LaTeX reports (per group and per course)
├── utils.py # Name normalization and exclusion helpers
├── assets/
│ └── Logo.pdf # ETH footer logo (copied into output)
├── __init__.py
│
run_assignment.py # Main command-line entry point
setup.py # Install script (for pip)
⚙️ Input Files
All expected in the same input directory (default: current working directory):
Externe.xlsx: List of external PhDs and their advisors.vorg.csv: Internal assignments linking assistants to supervisors.alle.csv: All applicants with metadata and course assignments.sprachen.csv: Language flags (e.g.,unterricht_deutsch).config.yaml: Configuration file with exclusions, aliases, formatting overrides.
✏️ Configuration
The config.yaml file lets you:
- Exclude supervisors or MAS from reports (
exclude_pis,exclude_mas) - Reassign supervisors (
reassignments) - Rename courses (
course_overrides,conditional_courses) - Group and label special roles (
special_modules,praktikum_modules) - Override responsible lecturers (
lecturer_aliases) - Set metadata for LaTeX output (
meta.semester,meta.author)
See the included config.yaml for a working example.
🚀 Installation
From the project root, install with:
pip install physethta
This provides the command-line tool:
run_assignment
🛠️ Usage
From the directory containing your input files:
run_assignment --draft
Optional arguments:
--input DIR: Input folder (default:.)--config FILE: Path toconfig.yaml(default:./config.yaml)--output DIR: Output folder (default:./output)--draft: Adds a "Draft" watermark to the PDF output
📆 Output
Two .tex files will be created in output/:
AssHS25_perGroup.pdf: Sorted by PI/supervisorAssHS25_perCourse.pdf: Sorted by course title
In the folder output/tables you will find csv files per course, for VMP, etc.
Logo.pdfwill be copied into the output folder automatically.
🔄 Start of New Semester
To prepare the tool for a new semester:
-
Do all the assignments in hat-admin https://swc.itsapp.ethz.ch/hat-swc/app
-
To get to the OIS report, use https://zo-srv-citweb.ethz.ch/Citrix/ETH_CitrixWeb/
-
Once done, export via citrix viewer -> OIS reports
- Bedarfszuweisung -> Choose semester -> Export CSV (UTF8) to alle.csv
- Vorgesetzte und Mitarbeiter -> Choose semester -> Export CSV (UTF8) to vorg.csv
- Bewerbungen -> Choose semester --> Export CSV (UTF8) to sprachen.csv
-
Duplicate and edit
config.yaml:- Update
meta.semestertoFS26orHS26 - Update exclusions, reassignments, or course overrides as needed
- Update
-
Run:
run_assignment --draft -
Check
.pdfoutput inoutput/and the csv's inoutput/tables
Package things
python -m build --no-isolation
And then
export TWINE_USERNAME=__token__
export TWINE_PASSWORD=...my API TOKEN...
twine upload dist/*
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
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
File details
Details for the file physethta-1.0.2.dev1.tar.gz.
File metadata
- Download URL: physethta-1.0.2.dev1.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
910fe618c352069b9577c5fd218c1eb18d70333f974f9841daaa40302b76b632
|
|
| MD5 |
4d5b9b447dd41495fd760c77efc9c699
|
|
| BLAKE2b-256 |
03dcbe328135975aaa3548b00ced70985fc801b7cd60a09916ef5b7839fc0d76
|
File details
Details for the file physethta-1.0.2.dev1-py3-none-any.whl.
File metadata
- Download URL: physethta-1.0.2.dev1-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a2d6a56fe05c51123e8ef3f4d0673e75a92c842614213fab4c7d42d404b9a91
|
|
| MD5 |
121460f8f0d7c69ccc6a1ffda2574faa
|
|
| BLAKE2b-256 |
ec1be5fdac33a17312f6ee762697030f5ddd5f771219a8947388812ad943c671
|