Python package for querying Morgan State University course data.
Project description
Morgan Course Data API
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 allCourseobjects 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:
GetCoursesPaginatedResponse: Response object
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 allCourseobjects 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: ACourseobject 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 allCourseSectionobjects 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 allCourseobjects 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:
instructors: A list of allInstructorobjects
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2060eea3cc27da99c2fc98beafc07a09d04d60e769fe23c5c6ff8768d84015a
|
|
| MD5 |
a969945c12c6f40d3312a1ac5aa2e2ae
|
|
| BLAKE2b-256 |
e09e1ab99d7a0cdaa58e57f2fbe83871218fed6270047d6cd82e1c7483a07ab6
|
File details
Details for the file morgan_course_data-0.1.2-py3-none-any.whl.
File metadata
- Download URL: morgan_course_data-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf5d78d9c42d9ff835be0e02e1b2c4c71cff4659c4ce13020340bf38b0a6ccfa
|
|
| MD5 |
488da95c166de0e3cbec75a732f72c7c
|
|
| BLAKE2b-256 |
42e06cee031eb54cc0319c550fa83af9e20ef4ec0d5831734daad219b1c3d654
|