Skip to content

Teacher Helper CI/CD


This is a library of stuff that I have used to automate my work as a teacher. With version 2.0, I've worked to increase the quality of the codebase by adding unit tests, comitting to API stability (see contributing), creating this documentation site, and creating a CI/CD pipeline. My hope is that these efforts make this codebase useful to others, and that others might even consider contributing!


You can install this package via pip:

pip install teacherhelper

Then, perform the setup described in setup instructions.


Once installed, the th command provides the following CLI utility:

usage: th [-h] [--student STUDENT] [--parent PARENT] [--new]

optional arguments:
  -h, --help            show this help message and exit
  --student STUDENT, -s STUDENT
                        Lookup a student and print the result
  --parent PARENT, -p PARENT
                        Lookup a parent and print the result
  --new                 Regenerate the database by parsing student.csv and parent.csv in the $HELPER_DATA directory.

Example Usage

name = 'tommey'  # Timmy needs a typing lesson, but this library is great for
                 # data bunging!

# **************************************************
# ==== Student Information System inside Python ====
# **************************************************

from teacherhelper.sis import Sis

# some assembly required! See
sis = Sis.read_cache()

# fuzzy string matching is used to lookup the student object from the name
result: Student | None = sis.find_student(name, threshold=80)
if result:
    print(f'{name} not found')

parent = 'Lisa Tommyparent'
parent = sis.find_parent(name)
if parent:
    print(f'{} :: {parent.phone_number=}')

# ***********************************
# ==== Traverse Google Classroom ====
# ***********************************

from import GoogleClassroomApiWrapper

# See
wrapper = google_classroom.GoogleClassroomApiWrapper(
    match_classrooms=['Ms. Smith', 'Ms. Fischer'],
    match_assignments=['4/25 Homework']

for classroom, assignment, submission in wrapper.traverse_submissions():
    assert classroom['name'] in ('Ms. Smith', 'Ms. Fischer')
    assert re.match('4/25 Homework', assignment['title']) is not None

# ****************************
# ==== Send Emails Easily ====
# ****************************

# see
from teacherhelper import Email, Sis

student = Sis.read_cache().find_student('Tommy Smith')

with Email(username="[email protected]", password="supersecret") as eml:
        subject="Tommy Needs Spelling Help",

        # the emailer supports markdown input, and will inject the resulting
        # html into a default template, or a template that you can create!
        message=f"""Hello Ms. {},

I noticed that {student.first_name} spelled his name like "tommey" on an
assignment recently. Here are some spelling tools I would recommend:

## List of Spelling Tools

| Name                      | Website                          |
| ------------------------- | -------------------------------- |
| Khan Academy              |     |
| Grammarly                 |       |
| Webster Dictionary Online | |

Documentation Site

Visit the documentation site at

About the Docs Site

The docs site will always remain in sync with the latest release. Every release is tagged on GitHub, so use version control to access documentation for previous versions.