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.
- 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.
To install this package, simply install the package from PyPi:
pip install morgan_course_data
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")
Retrieve all courses for the specified term.
Warning: This method can return over 1,000 elements. Use
get_courses_paginated()
for production use.
courses
: A list of allCourse
objects available in the specified term.
fall_courses = morgan_data.get_all_courses() # List[Course]
for course in fall_courses:
print(course)
Fetch courses in a paginated manner using cursor
and page_size
. Pagination ensures efficient fetching of large datasets.
cursor
: Reference to last retrieved course, used for pagination (optional).page_size
: The number of items per page (default: 20, max: 50).
GetCoursesPaginatedResponse
: Response object
# 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)
Retrieve all courses under a specific subject (e.g., COSC
for Computer Science):
courses
: A list of allCourse
objects with the specified subject abbreviation
cosc_courses = morgan_data.get_courses_by_subject_abbreviation("COSC") # List[Course]
for course in cosc_courses:
print(course)
Retrieve a specific course using its unique signature:
course
: ACourse
object with the specified course signature
course = morgan_data.get_course_by_signature("COSC 111") # Course
if course:
print(course)
else:
print("Course not found.")
Retrieve all sections taught by a specific instructor. Format the instructor name as 'LastName, FirstName'
:
course_sections
: A list of allCourseSection
objects with the specified instructor
mack_sections = morgan_data.get_course_sections_by_instructor("Mack, Naja")
for section in mack_sections: # List[CourseSection]
print(section)
Retrieve all courses and sections taught by a specific instructor. Format the instructor name as 'LastName, FirstName'
:
courses
: A list of allCourse
objects with the specified instructor
mack_courses = morgan_data.get_courses_by_instructor("Mack, Naja")
for course in mack_courses: # List[Course]
print(course)
Fetch a list of all instructors and the courses they teach:
instructors
: A list of allInstructor
objects
instructors = morgan_data.get_all_instructors() # List[Instructor]
for instructor in instructors:
print(f'{instructor.name} teaches {instructor.course_signatures}')
Retrieve a dictionary of subjects and their abbreviations:
dict
: A dictionary/map of subjects and their abbreviation.Dict[key=subject: str, value=abbreviation: str]
subject_mappings = morgan_data.get_subject_abbreviation_map() # Dict[subject: str, abbreviation: str]
for subject, abbreviation in subject_mappings.items():
print(f"{subject}: {abbreviation}")
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"]
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"]
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
Represents an instructor and the courses they teach.
class Instructor:
name: str
course_signatures: list[str]
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
For any questions, suggestions, or issues, please contact: [email protected]