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.4.tar.gz (10.3 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.4-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: morgan_course_data-0.1.4.tar.gz
  • Upload date:
  • Size: 10.3 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.4.tar.gz
Algorithm Hash digest
SHA256 415b028becf482da9abf4de3df4f0894b7bfe821b3b27d233234100df3525dce
MD5 10840aca885d621ac19c0890e468c8f1
BLAKE2b-256 8ee69001921feb9daa7385f35ab57aa55d46842765e24acf94bc0781bb9ce0c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for morgan_course_data-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 81d5b342fc574146323979f176a21d2007e32c9a686608aa8b6b6ea54b10eaf6
MD5 6bdbd417a6b0523015a2c06ab86d9902
BLAKE2b-256 39d121291a592201bfd6aaf7032047625a7f118a794b0e5d150c3b5dcb9b042c

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