lms.backend.blackboard.model
1import re 2import typing 3 4import lms.model.courses 5import lms.model.users 6 7COURSE_ROLE_MAPPING: typing.Dict[str, lms.model.users.CourseRole] = { 8 'Guest': lms.model.users.CourseRole.OTHER, 9 'Student': lms.model.users.CourseRole.STUDENT, 10 'Grader': lms.model.users.CourseRole.GRADER, 11 'TeachingAssistant': lms.model.users.CourseRole.ADMIN, 12 'Instructor': lms.model.users.CourseRole.OWNER, 13} 14 15def parse_id(text: str) -> str: 16 """ Blackboard tends to put other text around their ids. """ 17 18 text = text.strip() 19 20 match = re.match(r'^_(\d+)_\d*', text) 21 if (match is not None): 22 return match.group(1) 23 24 return text 25 26def format_id(id: int) -> str: 27 """ Format a Blackboard primary ID. """ 28 29 return f"_{id}_1" 30 31def course(data: typing.Dict[str, typing.Any]) -> lms.model.courses.Course: 32 """ 33 Create a Blackboard course from raw data. 34 """ 35 36 return lms.model.courses.Course( 37 id = parse_id(data['id']), 38 name = data['name'], 39 ) 40 41def course_user(data: typing.Dict[str, typing.Any]) -> lms.model.users.CourseUser: 42 """ 43 Create a Blackboard course from raw data. 44 """ 45 46 user = data['user'] 47 48 return lms.model.users.CourseUser( 49 id = parse_id(user['id']), 50 name = user['name']['given'], 51 email = user['contact']['email'], 52 raw_role = data['courseRoleId'], 53 role = COURSE_ROLE_MAPPING.get(data['courseRoleId'], None), 54 )
COURSE_ROLE_MAPPING: Dict[str, lms.model.users.CourseRole] =
{'Guest': <CourseRole.OTHER: 'other'>, 'Student': <CourseRole.STUDENT: 'student'>, 'Grader': <CourseRole.GRADER: 'grader'>, 'TeachingAssistant': <CourseRole.ADMIN: 'admin'>, 'Instructor': <CourseRole.OWNER: 'owner'>}
def
parse_id(text: str) -> str:
16def parse_id(text: str) -> str: 17 """ Blackboard tends to put other text around their ids. """ 18 19 text = text.strip() 20 21 match = re.match(r'^_(\d+)_\d*', text) 22 if (match is not None): 23 return match.group(1) 24 25 return text
Blackboard tends to put other text around their ids.
def
format_id(id: int) -> str:
Format a Blackboard primary ID.
32def course(data: typing.Dict[str, typing.Any]) -> lms.model.courses.Course: 33 """ 34 Create a Blackboard course from raw data. 35 """ 36 37 return lms.model.courses.Course( 38 id = parse_id(data['id']), 39 name = data['name'], 40 )
Create a Blackboard course from raw data.
42def course_user(data: typing.Dict[str, typing.Any]) -> lms.model.users.CourseUser: 43 """ 44 Create a Blackboard course from raw data. 45 """ 46 47 user = data['user'] 48 49 return lms.model.users.CourseUser( 50 id = parse_id(user['id']), 51 name = user['name']['given'], 52 email = user['contact']['email'], 53 raw_role = data['courseRoleId'], 54 role = COURSE_ROLE_MAPPING.get(data['courseRoleId'], None), 55 )
Create a Blackboard course from raw data.