PROJECT

metuclass

Sync ODTUClass course files to your local machine. PDFs, slides, homeworks: everything, organized, incremental.
STATUSSTABLE
PLATFORMCLI · macOS · Linux · Windows
Python 3.11+SQLitePyPI
01

WHAT IT IS

metuclass is a small command-line tool for METU students. Log in once, run metuclass sync, and every file from every course you're enrolled in lands on your disk, organized by course and section, in folders that match the way ODTUClass already groups them.

Subsequent runs are incremental. metuclass keeps a local manifest (a tiny SQLite file) and only downloads what's new or updated. Files you've modified locally are protected as conflicts unless you pass --force.

02

WHY I BUILT IT

The native ODTUClass interface is fine for one course. By week six of a semester it stops being fine: you're clicking through six course pages, ten weeks of slides, and three handouts each just to keep up with what was uploaded. I wanted one command that gets me from git pull-style mental model to actually having all the files.

The design priority was not surprising you. Idempotent runs, dry-run support, conflict detection on locally modified files, and predictable destination paths so you can build downstream tooling on top: Obsidian indexing, full-text search, whatever.

03

HOW IT WORKS

Login once

metuclass login stores a session token locally. You only re-auth when your password changes. Username and password can also come from environment variables for automation.

Incremental sync

On each run, metuclass fetches the file list from ODTUClass, diffs it against the local SQLite manifest, and downloads only what's new or updated. Concurrent downloads, atomic temp-file writes.

Predictable layout

Files land at ~/metuclass/<Course>/<Section>/<file> by default. Override per run with --sync-dir, per shell with METUCLASS_SYNC_DIR, or persistently via metuclass config.

Conflict-aware

If you've edited a file locally, metuclass skips it on the next sync and reports the conflict. Pass --force to overwrite, or --dry-run to preview without touching disk.
04

QUICK START

# Install
pip install metuclass

# Log in with your METU credentials
metuclass login

# See what's enrolled
metuclass courses

# Pull everything
metuclass sync

# Or just one course, to a custom directory
metuclass sync "CENG 334 Section 1" --sync-dir ~/Documents/courses