138 lines
4.2 KiB
Python
138 lines
4.2 KiB
Python
"""
|
|
A Fake Data API for testing purposes.
|
|
"""
|
|
import copy
|
|
import datetime
|
|
|
|
|
|
_DEFAULT_FAKE_MODE = {
|
|
"slug": "honor",
|
|
"name": "Honor Code Certificate",
|
|
"min_price": 0,
|
|
"suggested_prices": "",
|
|
"currency": "usd",
|
|
"expiration_datetime": None,
|
|
"description": None
|
|
}
|
|
|
|
_ENROLLMENTS = []
|
|
|
|
_COURSES = []
|
|
|
|
_ENROLLMENT_ATTRIBUTES = []
|
|
|
|
_VERIFIED_MODE_EXPIRED = []
|
|
|
|
|
|
# pylint: disable=unused-argument
|
|
def get_course_enrollments(student_id):
|
|
"""Stubbed out Enrollment data request."""
|
|
return _ENROLLMENTS
|
|
|
|
|
|
def get_course_enrollment(student_id, course_id):
|
|
"""Stubbed out Enrollment data request."""
|
|
return _get_fake_enrollment(student_id, course_id)
|
|
|
|
|
|
def create_course_enrollment(student_id, course_id, mode='honor', is_active=True):
|
|
"""Stubbed out Enrollment creation request. """
|
|
return add_enrollment(student_id, course_id, mode=mode, is_active=is_active)
|
|
|
|
|
|
def update_course_enrollment(student_id, course_id, mode=None, is_active=None):
|
|
"""Stubbed out Enrollment data request."""
|
|
enrollment = _get_fake_enrollment(student_id, course_id)
|
|
if enrollment and mode is not None:
|
|
enrollment['mode'] = mode
|
|
if enrollment and is_active is not None:
|
|
enrollment['is_active'] = is_active
|
|
return enrollment
|
|
|
|
|
|
def get_course_enrollment_info(course_id, include_expired=False):
|
|
"""Stubbed out Enrollment data request."""
|
|
return _get_fake_course_info(course_id, include_expired)
|
|
|
|
|
|
def _get_fake_enrollment(student_id, course_id):
|
|
"""Get an enrollment from the enrollments array."""
|
|
for enrollment in _ENROLLMENTS:
|
|
if student_id == enrollment['student'] and course_id == enrollment['course']['course_id']:
|
|
return enrollment
|
|
|
|
|
|
def _get_fake_course_info(course_id, include_expired=False):
|
|
"""Get a course from the courses array."""
|
|
# if verified mode is expired and include expired is false
|
|
# then remove the verified mode from the course.
|
|
for course in _COURSES:
|
|
if course_id == course['course_id']:
|
|
if course_id in _VERIFIED_MODE_EXPIRED and not include_expired:
|
|
course['course_modes'] = [mode for mode in course['course_modes'] if mode['slug'] != 'verified']
|
|
return course
|
|
|
|
|
|
def add_enrollment(student_id, course_id, is_active=True, mode='honor'):
|
|
"""Append an enrollment to the enrollments array."""
|
|
enrollment = {
|
|
"created": datetime.datetime.now(),
|
|
"mode": mode,
|
|
"is_active": is_active,
|
|
"course": _get_fake_course_info(course_id),
|
|
"student": student_id
|
|
}
|
|
_ENROLLMENTS.append(enrollment)
|
|
return enrollment
|
|
|
|
|
|
# pylint: disable=unused-argument
|
|
def add_or_update_enrollment_attr(user_id, course_id, attributes):
|
|
"""Add or update enrollment attribute array"""
|
|
for attribute in attributes:
|
|
_ENROLLMENT_ATTRIBUTES.append({
|
|
'namespace': attribute['namespace'],
|
|
'name': attribute['name'],
|
|
'value': attribute['value']
|
|
})
|
|
|
|
|
|
# pylint: disable=unused-argument
|
|
def get_enrollment_attributes(user_id, course_id):
|
|
"""Retrieve enrollment attribute array"""
|
|
return _ENROLLMENT_ATTRIBUTES
|
|
|
|
|
|
def set_expired_mode(course_id):
|
|
"""Set course verified mode as expired."""
|
|
_VERIFIED_MODE_EXPIRED.append(course_id)
|
|
|
|
|
|
def add_course(course_id, enrollment_start=None, enrollment_end=None, invite_only=False, course_modes=None):
|
|
"""Append course to the courses array."""
|
|
course_info = {
|
|
"course_id": course_id,
|
|
"enrollment_end": enrollment_end,
|
|
"course_modes": [],
|
|
"enrollment_start": enrollment_start,
|
|
"invite_only": invite_only,
|
|
}
|
|
if not course_modes:
|
|
course_info['course_modes'].append(_DEFAULT_FAKE_MODE)
|
|
else:
|
|
for mode in course_modes:
|
|
new_mode = copy.deepcopy(_DEFAULT_FAKE_MODE)
|
|
new_mode['slug'] = mode
|
|
course_info['course_modes'].append(new_mode)
|
|
_COURSES.append(course_info)
|
|
|
|
|
|
def reset():
|
|
"""Set the enrollments and courses arrays to be empty."""
|
|
global _COURSES # pylint: disable=global-statement
|
|
_COURSES = []
|
|
global _ENROLLMENTS # pylint: disable=global-statement
|
|
_ENROLLMENTS = []
|
|
global _VERIFIED_MODE_EXPIRED # pylint: disable=global-statement
|
|
_VERIFIED_MODE_EXPIRED = []
|