-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #166 from uw-it-aca/feature/data-abstraction
Feature/data abstraction
- Loading branch information
Showing
78 changed files
with
2,296 additions
and
1,397 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# Copyright 2024 UW-IT, University of Washington | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
# | ||
# Course reflects the attributes necessary to correlate a | ||
# specific course offering's meeting schedule with | ||
# Panopto recording sessions, the facilities scheduling system, | ||
# and Canvas LMS. | ||
# | ||
|
||
from abc import ABC, abstractmethod | ||
from scheduler.utils.loader import load_class_from_module_setting | ||
|
||
|
||
COURSES_MODULE_SETTING = 'COURSES_MODULE' | ||
|
||
|
||
class Course(object): | ||
"""Indirection class used to load campus-specific Course class""" | ||
def __new__(self, courseId): | ||
return load_class_from_module_setting( | ||
COURSES_MODULE_SETTING, 'Course', courseId) | ||
|
||
|
||
class BaseCourse(ABC): | ||
"""Base class definining methods necessary to associate a course | ||
offering with the course meeting location and panopto folder and | ||
scheduled recording sessions | ||
""" | ||
|
||
@abstractmethod | ||
def reservation_uid(self): | ||
"""ID used to reference the course offering in the reservation | ||
system. For R25 this is would be the Alien UID unique for | ||
the couse offering. | ||
""" | ||
pass | ||
|
||
@abstractmethod | ||
def panopto_course_external_id(self, start_datetime): | ||
"""Opaque string unique to each course offering.""" | ||
pass | ||
|
||
@abstractmethod | ||
def panopto_course_folder(self, title): | ||
"""Folder name and folder external_id that must match the values | ||
set by Panopto's Recordings LTI | ||
""" | ||
pass | ||
|
||
@abstractmethod | ||
def panopto_course_session(self, start_datetime): | ||
"""Recording session name and external_id unique to a course | ||
offering meeting time. | ||
""" | ||
pass | ||
|
||
@abstractmethod | ||
def get_crosslisted_course(self): | ||
"""If the Course is crosslisted (joined), return the Course | ||
class corresponding to the course crosslisted are linked into | ||
""" | ||
return self |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# Copyright 2024 UW-IT, University of Washington | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
from uw_canvas.courses import Courses as CanvasCourses | ||
|
||
|
||
canvas_api = CanvasCourses() | ||
|
||
|
||
def get_course_by_sis_id(sis_id): | ||
return canvas_api.get_course_by_sis_id(sis_id) | ||
|
||
|
||
def get_course_by_canvas_id(course_id): | ||
if canvas_api.valid_course_id(course_id): | ||
return canvas_api.get_course(course_id) | ||
|
||
raise Exception("Invalid course id: {}".format(course_id)) |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# Copyright 2024 UW-IT, University of Washington | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
from panopto_client.access import AccessManagement | ||
|
||
|
||
access_api = AccessManagement() | ||
|
||
|
||
def get_session_access_details(session_id): | ||
return access_api.getSessionAccessDetails(session_id) | ||
|
||
|
||
def get_folder_access_details(folder_id): | ||
return access_api.getFolderAccessDetails(folder_id) | ||
|
||
|
||
def update_session_is_public(session_id, is_public): | ||
return access_api.updateSessionIsPublic(session_id, is_public) | ||
|
||
|
||
def grant_users_access_to_folder(folder_id, creator_ids, access_type): | ||
return access_api.grantUsersAccessToFolder( | ||
folder_id, creator_ids, access_type) | ||
|
||
|
||
def revoke_users_access_from_folder(folder_id, creator_ids, access_type): | ||
return access_api.revokeUsersAccessFromFolder( | ||
folder_id, creator_ids, access_type) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# Copyright 2024 UW-IT, University of Washington | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
from scheduler.utils.validation import Validation | ||
from panopto_client.remote_recorder import RemoteRecorderManagement | ||
import re | ||
|
||
|
||
recorder_api = RemoteRecorderManagement() | ||
|
||
|
||
def list_recorders(): | ||
return recorder_api.listRecorders() | ||
|
||
|
||
def get_recorder_details(recorder_id): | ||
if re.match(r'^\d+$', recorder_id): | ||
recorders = get_recorder_by_external_id(recorder_id) | ||
else: | ||
Validation().panopto_id(recorder_id) | ||
recorders = get_recorder_by_id(recorder_id) | ||
|
||
if not (recorders and hasattr(recorders, 'RemoteRecorder')): | ||
return None | ||
|
||
return recorders.RemoteRecorder | ||
|
||
|
||
def get_recorder_by_id(recorder_id): | ||
return recorder_api.getRemoteRecordersById(recorder_id) | ||
|
||
|
||
def get_recorder_by_external_id(external_id): | ||
return recorder_api.getRemoteRecordersByExternalId(external_id) | ||
|
||
|
||
def update_recorder_external_id(recorder_id, external_id): | ||
return recorder_api.updateRemoteRecorderExternalId( | ||
recorder_id, external_id) | ||
|
||
|
||
def schedule_recording( | ||
name, folder_id, is_broadcast, start_time, end_time, recorder_id): | ||
return recorder_api.scheduleRecording( | ||
name, folder_id, is_broadcast, start_time, end_time, recorder_id) | ||
|
||
|
||
def update_recording_time(session_id, start_time, end_time): | ||
return recorder_api.updateRecordingTime(session_id, start_time, end_time) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
# Copyright 2024 UW-IT, University of Washington | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
from panopto_client.session import SessionManagement | ||
from panopto_client import PanoptoAPIException | ||
from scheduler.utils import panopto_app_id | ||
from scheduler.exceptions import PanoptoFolderDoesNotExist | ||
|
||
|
||
session_api = SessionManagement() | ||
|
||
|
||
def get_sessions_by_external_ids(external_ids): | ||
sessions = session_api.getSessionsByExternalId(external_ids) | ||
return sessions.Session if (sessions and 'Session' in sessions and | ||
len(sessions.Session)) else None | ||
|
||
|
||
def get_sessions_by_session_ids(session_ids): | ||
sessions = session_api.getSessionsById(session_ids) | ||
return sessions.Session if (sessions and 'Session' in sessions and | ||
len(sessions.Session)) else None | ||
|
||
|
||
def update_session_external_id(session_id, external_id): | ||
return session_api.updateSessionExternalId(session_id, external_id) | ||
|
||
|
||
def update_session_is_broadcast(session_id, is_broadcast): | ||
return session_api.updateSessionIsBroadcast(session_id, is_broadcast) | ||
|
||
|
||
def move_sessions(session_ids, folder_id): | ||
return session_api.moveSessions(session_ids, folder_id) | ||
|
||
|
||
def delete_sessions(session_ids): | ||
return session_api.deleteSessions(session_ids) | ||
|
||
|
||
def get_folders_by_id(folder_ids): | ||
try: | ||
return session_api.getFoldersById(folder_ids) | ||
except PanoptoAPIException as ex: | ||
if str(ex).find("was not found") > 0: | ||
raise PanoptoFolderDoesNotExist(ex) | ||
else: | ||
raise ex | ||
|
||
|
||
def get_folders_with_external_context_list(*args, **kwargs): | ||
return session_api.getFoldersWithExternalContextList(*args, **kwargs) | ||
|
||
|
||
def get_folders_list(*args, **kwargs): | ||
return session_api.getFoldersList(*args, **kwargs) | ||
|
||
|
||
def get_all_folders_with_external_context_by_external_id( | ||
external_ids, providers=None): | ||
if not providers: | ||
providers = [panopto_app_id()] | ||
|
||
return session_api.getAllFoldersWithExternalContextByExternalId( | ||
external_ids, providers) | ||
|
||
|
||
def get_all_folders_by_external_id(external_ids): | ||
return session_api.getAllFoldersByExternalId(external_ids) | ||
|
||
|
||
def add_folder(name, parent_id=None, is_public=False): | ||
return session_api.addFolder(name, parent_id, is_public) | ||
|
||
|
||
def provision_external_course(course_name, external_id): | ||
return session_api.provisionExternalCourse(course_name, external_id) | ||
|
||
|
||
def update_folder_external_id_with_provider(folder_id, external_id, provider): | ||
return session_api.updateFolderExternalIdWithProvider( | ||
folder_id, external_id, provider) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# Copyright 2024 UW-IT, University of Washington | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
from panopto_client.user import UserManagement | ||
|
||
|
||
user_api = UserManagement() | ||
|
||
|
||
def get_users_from_guids(guids): | ||
return user_api.getUsers(guids) | ||
|
||
|
||
def get_user_by_key(key): | ||
return user_api.getUserByKey(key) |
Oops, something went wrong.