Skip to main content

CLI tool to generate ABET-compliant course syllabi from university course specifications

Project description

ABET Syllabus Generator

PyPI version Python 3.11+ License: MIT

CLI tool that converts university course specification files (PDF/DOCX) into standardized ABET-compliant course syllabi. Designed for KFUPM but adaptable to any institution.

Features

  • Extract text and tables from PDF and DOCX course specifications
  • Parse two input formats automatically (PDF sections A-H and DOCX CRF2)
  • Store all extracted data in a central SQLite database
  • Map Course Learning Outcomes (CLOs) to Program Learning Outcomes (PLOs) using AI
  • Generate ABET syllabus documents (DOCX) from a customizable template
  • Export data to CSV/JSON for ABET self-study reports
  • Validate data quality before generation
  • Interactive mode with folder browsing and smart defaults
  • PLO aliases for mapping between different PLO naming conventions (K1/S1 to SO1/SO2)

Installation

pip install abet-syllabus

With AI mapping support:

pip install "abet-syllabus[ai]"

For development:

git clone https://github.com/mmogib/abet-syllabus.git
cd abet-syllabus
pip install -e ".[ai,dev]"

Quick Start

One command (interactive)

abet-syllabus run

Browses your folders, asks for program code and term, then processes everything.

One command (scripted)

abet-syllabus run input/math/ -p MATH -t T252 -o ./output/math/

With AI mapping

export OPENROUTER_API_KEY="your-key"
abet-syllabus run input/math/ -p MATH -t T252 --map -o ./output/math/

The default AI model is free (no cost). Use --model for premium models.

Step by step

# 1. Ingest course specification files
abet-syllabus ingest input/math/ -p MATH -r

# 2. Load PLO/SO definitions
abet-syllabus ingest-plos plos.csv

# 3. (Optional) Set up PLO aliases if your files use different codes
abet-syllabus plo-alias K1 SO1 -p MATH
abet-syllabus plo-alias S1 SO2 -p MATH

# 4. (Optional) AI-powered CLO-PLO mapping
export OPENROUTER_API_KEY="your-key"   # free models available
abet-syllabus map --all -p MATH

# 5. Review and approve mappings
abet-syllabus map "MATH 101" -p MATH --review
abet-syllabus map "MATH 101" -p MATH --approve

# 6. Generate ABET syllabi
abet-syllabus generate --all -p MATH -t T252 -o ./output/math/

Commands

Command Description
run Full pipeline: ingest, (optionally) map, generate
ingest Extract, parse, and store course files in database
ingest-plos Load PLO/SO definitions from CSV
plo-alias Manage PLO code aliases (e.g., K1 = SO1)
map AI-powered CLO-PLO mapping
generate Produce ABET syllabus DOCX from database
query Inspect database (courses, CLOs, stats, coverage, SQL)
export Export data to CSV/JSON
status Database overview
validate Data quality check
extract Raw text/table extraction (debugging)
parse Structured field extraction (debugging)

AI Mapping

Supports two AI providers for CLO-PLO mapping:

Provider Env Variable Cost Notes
OpenRouter OPENROUTER_API_KEY Free tier available Default. Multi-model gateway. Get key at openrouter.ai
Anthropic ANTHROPIC_API_KEY Pay per use ($5 min) Direct Claude API. Get key at console.anthropic.com

The provider is auto-detected from available API keys. Use flags for control:

# Use a specific provider
abet-syllabus map "MATH 101" -p MATH --provider anthropic

# Use a specific model (any model available on OpenRouter)
abet-syllabus map --all -p MATH --model google/gemini-2.5-flash

# Force re-mapping
abet-syllabus map --all -p MATH -f

PLO Aliases

Course specification files often use codes like K1, S1, V1 (Knowledge/Skills/Values) while ABET uses SO1-SO6 (Student Outcomes). PLO aliases bridge this gap:

# Define aliases (one-time setup per program)
abet-syllabus plo-alias K1 SO1 -p MATH
abet-syllabus plo-alias S1 SO2 -p MATH
abet-syllabus plo-alias V1 SO3 -p MATH

# List defined aliases
abet-syllabus plo-alias --list -p MATH

# Delete an alias
abet-syllabus plo-alias --delete K1 -p MATH

During ingestion, if unmatched PLO codes are found, you'll be prompted to map them interactively.

Query and Reporting

# List all courses
abet-syllabus query courses -p MATH

# Course details
abet-syllabus query course "MATH 101"

# CLOs for a course
abet-syllabus query clos "MATH 101"

# PLO coverage matrix (which courses cover which PLOs)
abet-syllabus query coverage -p MATH

# Database statistics
abet-syllabus query stats

# Custom SQL query (read-only)
abet-syllabus query sql "SELECT course_code, course_title FROM courses WHERE department='Mathematics'"

Export

# Export courses to CSV
abet-syllabus export courses -o courses.csv
abet-syllabus export courses -p MATH --format json -o math_courses.json

# Export CLOs
abet-syllabus export clos "MATH 101" -o math101_clos.csv

# Export PLO mapping matrix
abet-syllabus export plo-matrix -p MATH -o math_matrix.csv

Input Formats

The tool automatically detects and handles two formats:

  • Format A (PDF) - Standard KFUPM "COURSE SPECIFICATIONS" with sections A-H. Used by external departments (BUS, CGS, COE, ENGL, IAS, ICS, PE, SWE, etc.)
  • Format B (DOCX) - CRF2 "COURSE SPECIFICATIONS" with structured tables. Used by MATH, AS, DATA departments.

Configuration

Optional YAML config file (abet_syllabus.yaml in the working directory):

db_path: abet_syllabus.db
template_path: resources/templates/ABETSyllabusTemplate.docx
output_dir: ./output
log_file: abet_syllabus.log

CLI flags always override config file values.

Course Code Normalization

All user input is automatically normalized:

math101   -> MATH 101
Math 101  -> MATH 101
MATH   101 -> MATH 101
math-101  -> MATH 101

Requirements

  • Python 3.11+
  • Core dependencies: pdfplumber, python-docx, PyYAML, defusedxml
  • Optional: anthropic (for direct Anthropic API), docx2pdf (for PDF output)

License

MIT

Author

Mohammed Alshahrani - KFUPM

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

abet_syllabus-1.2.0.tar.gz (134.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

abet_syllabus-1.2.0-py3-none-any.whl (111.6 kB view details)

Uploaded Python 3

File details

Details for the file abet_syllabus-1.2.0.tar.gz.

File metadata

  • Download URL: abet_syllabus-1.2.0.tar.gz
  • Upload date:
  • Size: 134.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for abet_syllabus-1.2.0.tar.gz
Algorithm Hash digest
SHA256 dd0e77e5dc5a49c091f200538ab0c5921a5aab5fcf6770e7db886dab7af76908
MD5 a2b94852f785a27a868adac0434e97fb
BLAKE2b-256 016cf1b5514d0229cde926c0903308b38c762ee7a3c44b9a8b3afadf013a797d

See more details on using hashes here.

File details

Details for the file abet_syllabus-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: abet_syllabus-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 111.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for abet_syllabus-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b2a68131fc7bc5af56542c1759147b7f94b98e4fbf375c50cd35839e2ff09a7e
MD5 e51713342ca6f80e4aedda3116922dec
BLAKE2b-256 61d863a487bcab520d99980752f39ddf830735871873c4f133bbf88dd5d02197

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page