Skip to main content

Python package for querying Morgan State University course data.

Project description

Morgan Course Data API

PyPI Downloads Morgan State University

FALL_2024_Refresh_Date WINTER_2025_Refresh_Date SPRING_2025_Refresh_Date

A Python package for interacting with Morgan State University's course data. This package enables developers to query courses, retrieve instructor information, and perform various operations on course data efficiently.

Note: Data is updated at the beginning of each semester.


Features

  • Get All Courses: Fetch all courses and their sections.
  • Get Paginated Courses: Retrieve courses with pagination using cursors for better performance.
  • Get Course by Signature: Retrieve a specific course using its unique signature.
  • Get Courses by Subject Abbreviation: Retrieve all courses for a specific subject.
  • Get Course Sections by Instructor: Fetch all sections taught by a specific instructor.
  • Get All Instructors: List all instructors and their associated courses.
  • Get Subject to Abbreviation Mappings: Retrieve a dictionary mapping subjects to abbreviations.

Installation

To install this package, simply install the package from PyPi:

pip install morgan_course_data

Usage

Initialize the Data Handler

Start by creating an instance of the MorganCourseData class, specifying one of the allowed terms (FALL_2024, WINTER_MINIMESTER_2025, SPRING_2025):

from morgan_course_data.api import MorganCourseData

morgan_data = MorganCourseData(term="FALL_2024")

Get All Courses

Retrieve all courses for the specified term.

Warning: This method can return over 1,000 elements. Use get_courses_paginated() for production use.

Returns:

  • courses: A list of all Course objects available in the specified term.

Example Usage:

fall_courses = morgan_data.get_all_courses() # List[Course]

for course in fall_courses:
    print(course)

Get Paginated Courses

Fetch courses in a paginated manner using cursor and page_size. Pagination ensures efficient fetching of large datasets.

Parameters:

  • cursor: Reference to last retrieved course, used for pagination (optional).
  • page_size: The number of items per page (default: 20, max: 50).

Returns:

Example Usage:

# Fetch the first page
paginated_courses = morgan_data.get_courses_paginated(page_size=10)

for course in paginated_courses["courses"]:
    print(course)

# Retrieve pagination metadata
pagination_info = paginated_courses["pagination"]
print(f"Next Cursor: {pagination_info['next_cursor']}")
print(f"Page Size: {pagination_info['page_size']}")
print(f"Has More: {pagination_info['has_more']}")

# Fetch the next page using the cursor
if pagination_info['has_more']:
    next_cursor = pagination_info["next_cursor"]
    next_page = morgan_data.get_courses_paginated(cursor=next_cursor, page_size=10)

    for course in next_page["courses"]:
        print(course)

Get Courses by Subject Abbreviation

Retrieve all courses under a specific subject (e.g., COSC for Computer Science):

Returns:

  • courses: A list of all Course objects with the specified subject abbreviation

Example Usage

cosc_courses = morgan_data.get_courses_by_subject_abbreviation("COSC") # List[Course]

for course in cosc_courses:
    print(course)

Get Course by Signature

Retrieve a specific course using its unique signature:

Returns:

  • course: A Course object with the specified course signature

Example Usage

course = morgan_data.get_course_by_signature("COSC 111") # Course

if course:
    print(course)
else:
    print("Course not found.")

Get Course Sections by Instructor

Retrieve all sections taught by a specific instructor. Format the instructor name as 'LastName, FirstName':

Returns:

  • course_sections: A list of all CourseSection objects with the specified instructor

Example Usage

mack_sections = morgan_data.get_course_sections_by_instructor("Mack, Naja")

for section in mack_sections: # List[CourseSection]
    print(section)

Get Courses by Instructor

Retrieve all courses and sections taught by a specific instructor. Format the instructor name as 'LastName, FirstName':

Returns:

  • courses: A list of all Course objects with the specified instructor

Example Usage

mack_courses = morgan_data.get_courses_by_instructor("Mack, Naja")

for course in mack_courses: # List[Course]
    print(course)

Get All Instructors

Fetch a list of all instructors and the courses they teach:

Returns:

Example Usage

instructors = morgan_data.get_all_instructors() # List[Instructor]

for instructor in instructors:
    print(f'{instructor.name} teaches {instructor.course_signatures}')

Get Subject to Abbreviation Mappings

Retrieve a dictionary of subjects and their abbreviations:

Returns:

  • dict: A dictionary/map of subjects and their abbreviation. Dict[key=subject: str, value=abbreviation: str]

Example Usage

subject_mappings = morgan_data.get_subject_abbreviation_map() # Dict[subject: str, abbreviation: str]

for subject, abbreviation in subject_mappings.items():
    print(f"{subject}: {abbreviation}")

Data Models

Course

Represents a course with its metadata and sections.

class Course:
    signature: str
    subject_abbreviation: str
    subject: str
    description: str
    credit_hours: int
    name: str
    number: str
    full_name: str
    prerequisites: dict
    sections: List["CourseSection"]

CourseSection

Represents an individual section of a course.

class CourseSection:
    title: str
    section: str
    type: str
    crn: int
    instructional_method: str
    instructor: str
    enrollment_actual: str
    enrollment_max: str
    enrollment_available: str
    meetings: List["Meeting"]

Meeting

Represents a scheduled meeting for a course section.

class Meeting:
    start_time: str
    end_time: str
    days: List[str]
    building: str
    campus: str
    room: str
    start_date: str
    end_date: str

Instructor

Represents an instructor and the courses they teach.

class Instructor:
    name: str
    course_signatures: list[str]

Response Objects

GetCoursesPaginatedResponse

Represents a response object to the get_courses_pagination method.

class PaginationMetadata(TypedDict):
    next_cursor: Optional[str]  # The cursor for fetching the next page of results
    page_size: int              # The number of courses per page
    has_more: bool              # Indicates if more pages are available

class GetCoursesPaginatedResponse(TypedDict):
    courses: List['Course']      # List of Course objects
    pagination: PaginationMetadata  # Metadata for pagination

Contact

For any questions, suggestions, or issues, please contact: cltandjong@gmail.com

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

morgan_course_data-0.1.2.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

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

morgan_course_data-0.1.2-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file morgan_course_data-0.1.2.tar.gz.

File metadata

  • Download URL: morgan_course_data-0.1.2.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.12

File hashes

Hashes for morgan_course_data-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e2060eea3cc27da99c2fc98beafc07a09d04d60e769fe23c5c6ff8768d84015a
MD5 a969945c12c6f40d3312a1ac5aa2e2ae
BLAKE2b-256 e09e1ab99d7a0cdaa58e57f2fbe83871218fed6270047d6cd82e1c7483a07ab6

See more details on using hashes here.

File details

Details for the file morgan_course_data-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for morgan_course_data-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bf5d78d9c42d9ff835be0e02e1b2c4c71cff4659c4ce13020340bf38b0a6ccfa
MD5 488da95c166de0e3cbec75a732f72c7c
BLAKE2b-256 42e06cee031eb54cc0319c550fa83af9e20ef4ec0d5831734daad219b1c3d654

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