Skip to content

Commit

Permalink
consolidate sws calls
Browse files Browse the repository at this point in the history
  • Loading branch information
mikeseibel committed Jun 19, 2024
1 parent 643d9f0 commit 1cee9ec
Show file tree
Hide file tree
Showing 10 changed files with 87 additions and 24 deletions.
3 changes: 3 additions & 0 deletions scheduler/dao/canvas.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@
# SPDX-License-Identifier: Apache-2.0

from uw_canvas.courses import Courses as CanvasCourses
from scheduler.utils import timer


canvas_api = CanvasCourses()


@timer
def get_course_by_sis_id(sis_id):
return canvas_api.get_course_by_sis_id(sis_id)


@timer
def get_course_by_canvas_id(course_id):
if canvas_api.valid_course_id(course_id):
return canvas_api.get_course(course_id)
Expand Down
6 changes: 6 additions & 0 deletions scheduler/dao/panopto/access.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,34 @@
# SPDX-License-Identifier: Apache-2.0

from panopto_client.access import AccessManagement
from scheduler.utils import timer


access_api = AccessManagement()


@timer
def get_session_access_details(session_id):
return access_api.getSessionAccessDetails(session_id)


@timer
def get_folder_access_details(folder_id):
return access_api.getFolderAccessDetails(folder_id)


@timer
def update_session_is_public(session_id, is_public):
return access_api.updateSessionIsPublic(session_id, is_public)


@timer
def grant_users_access_to_folder(folder_id, creator_ids, access_type):
return access_api.grantUsersAccessToFolder(
folder_id, creator_ids, access_type)


@timer
def revoke_users_access_from_folder(folder_id, creator_ids, access_type):
return access_api.revokeUsersAccessFromFolder(
folder_id, creator_ids, access_type)
8 changes: 8 additions & 0 deletions scheduler/dao/panopto/recorder.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@

from scheduler.utils.validation import Validation
from panopto_client.remote_recorder import RemoteRecorderManagement
from scheduler.utils import timer
import re


recorder_api = RemoteRecorderManagement()


@timer
def list_recorders():
return recorder_api.listRecorders()


@timer
def get_recorder_details(recorder_id):
if re.match(r'^\d+$', recorder_id):
recorders = get_recorder_by_external_id(recorder_id)
Expand All @@ -26,24 +29,29 @@ def get_recorder_details(recorder_id):
return recorders.RemoteRecorder


@timer
def get_recorder_by_id(recorder_id):
return recorder_api.getRemoteRecordersById(recorder_id)


@timer
def get_recorder_by_external_id(external_id):
return recorder_api.getRemoteRecordersByExternalId(external_id)


@timer
def update_recorder_external_id(recorder_id, external_id):
return recorder_api.updateRemoteRecorderExternalId(
recorder_id, external_id)


@timer
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)


@timer
def update_recording_time(session_id, start_time, end_time):
return recorder_api.updateRecordingTime(session_id, start_time, end_time)
13 changes: 13 additions & 0 deletions scheduler/dao/panopto/sessions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,52 @@

from panopto_client.session import SessionManagement
from scheduler.utils import panopto_app_id
from scheduler.utils import timer


session_api = SessionManagement()


@timer
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


@timer
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


@timer
def update_session_external_id(session_id, external_id):
return session_api.updateSessionExternalId(session_id, external_id)


@timer
def update_session_is_broadcast(session_id, is_broadcast):
return session_api.updateSessionIsBroadcast(session_id, is_broadcast)


@timer
def move_sessions(session_ids, folder_id):
return session_api.moveSessions(session_ids, folder_id)


@timer
def delete_sessions(session_ids):
return session_api.deleteSessions(session_ids)


@timer
def get_folders_list(*args, **kwargs):
return session_api.getFoldersList(*args, **kwargs)


@timer
def get_all_folders_with_external_context_list(external_ids, providers=None):
if not providers:
providers = [panopto_app_id()]
Expand All @@ -48,18 +57,22 @@ def get_all_folders_with_external_context_list(external_ids, providers=None):
external_ids, providers)


@timer
def get_all_folders_by_external_id(external_ids):
return session_api.getAllFoldersByExternalId(external_ids)


@timer
def add_folder(name):
return session_api.addFolder(name)


@timer
def provision_external_course(course_name, external_id):
return session_api.provisionExternalCourse(course_name, external_id)


@timer
def update_folder_external_id_with_provider(folder_id, external_id, provider):
return session_api.updateFolderExternalIdWithProvider(
folder_id, external_id, provider)
3 changes: 3 additions & 0 deletions scheduler/dao/panopto/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@
# SPDX-License-Identifier: Apache-2.0

from panopto_client.user import UserManagement
from scheduler.utils import timer


user_api = UserManagement()


@timer
def get_users_from_guids(guids):
return user_api.getUsers(guids)


@timer
def get_user_by_key(key):
return user_api.getUserByKey(key)
5 changes: 5 additions & 0 deletions scheduler/dao/r25.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
from uw_r25.spaces import get_space_by_id as r25_space_by_id
from uw_r25.spaces import get_spaces as r25_get_spaces
from scheduler.exceptions import CourseReservationsException
from scheduler.utils import timer


@timer
def get_event_by_course(course):
""""""
reservation_uid = course.reservation_uid()
Expand All @@ -20,14 +22,17 @@ def get_event_by_course(course):
return event


@timer
def get_reservations_by_search_params(search):
""""""
return get_reservations(**search)


@timer
def get_space_by_id(id):
return r25_space_by_id(id)


@timer
def get_spaces(*args, **kwargs):
return r25_get_spaces(*args, **kwargs)
16 changes: 8 additions & 8 deletions scheduler/dao/sws.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@
# SPDX-License-Identifier: Apache-2.0

from uw_sws.section import get_section_by_label, get_section_by_url
from uw_sws.models import SWS_SECTION_LABEL
from scheduler.utils import timer


def sws_course_label(course):
return "{},{},{},{}/{}".format(course.year, course.quarter,
course.curriculum, course.number,
course.section)


@timer
def get_sws_section_for_course(course):
label = SWS_SECTION_LABEL.format(
year=course.year, quarter=course.quarter, curr_abbr=course.curriculum,
course_num=course.number, section_id=course.section_id)
return get_section_by_label(
sws_course_label(course),
include_instructor_not_on_time_schedule=False)
label, include_instructor_not_on_time_schedule=False)


@timer
def get_sws_section_by_url(url):
return get_section_by_url(url)
39 changes: 24 additions & 15 deletions scheduler/org/uw/course.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ class Course(BaseCourse):
quarter = ""
curriculum = ""
number = ""
section = ""
section_id = ""
external_id = ""
canvas_course_id = None
section_data = None
UW_CAMPUS = ['seattle', 'bothell', 'tacoma']
UW_TERMS = ['spring', 'summer', 'autumn', 'winter']

Expand All @@ -49,7 +50,7 @@ def __init__(self, courseId):
self.quarter = course_parts.group(2).lower()
self.curriculum = self._is_curriculum(course_parts.group(3))
self.number = self._is_course_number(course_parts.group(4))
self.section = self._is_course_section(course_parts.group(5))
self.section_id = self._is_course_section(course_parts.group(5))

def _is_curriculum(self, curriculum):
if not curriculum:
Expand Down Expand Up @@ -83,20 +84,20 @@ def reservation_uid(self):
return "LYNX-EV-104-{}{}-{}{}{}".format(
self.year, self._quarter_ordinal(),
self.curriculum.replace(' ', ''),
self.number, self.section)
self.number, self.section_id)

def canvas_sis_id(self):
return "{}".format('-'.join([
self.year, self.quarter, self.curriculum,
self.number, self.section]))
self.number, self.section_id]))

def panopto_course_external_id(self, start_datetime):
# session_external_id: 2014-autumn-BIOL-404-A-2014-10-27
start_dt = parser.parse(start_datetime)
start_date = start_dt.strftime('%Y-%m-%d')
return "{}-{}-{}-{}-{}-{}".format(
self.year, self.quarter, self.curriculum,
self.number, self.section, start_date)
self.number, self.section_id, start_date)

def canvas_course(self):
if self.canvas_course_id is None:
Expand Down Expand Up @@ -161,17 +162,17 @@ def panopto_folder_name(self, course_name):

def panopto_course_session(self, start_datetime):
name = "{} {} {} - {}".format(
self.curriculum, self.number, self.section,
self.curriculum, self.number, self.section_id,
local_ymd_from_utc_date_string(start_datetime))
external_id = self.panopto_course_external_id(
local_ymd_from_utc_date_string(start_datetime))
return (name, external_id)

def course_event_title_and_contact(self):
try:
section = get_sws_section_for_course(self)
meeting = section.meetings[0] if hasattr(
section, 'meetings') and len(section.meetings) else None
meeting = self.sws_section.meetings[0] if (hasattr(
self.sws_section, 'meetings') and
len(self.sws_section.meetings)) else None
instructor = meeting.instructors[0] if hasattr(
meeting, 'instructors') and len(meeting.instructors) else None
first_name = instructor.first_name if hasattr(
Expand All @@ -194,21 +195,29 @@ def course_event_title_and_contact(self):
raise

return {
'title_long': section.course_title_long if section else '',
'title_long': self.sws_section.course_title_long if (
self.sws_section) else '',
'name': '{} {}'.format(name.first, name.last) if name else '',
'loginid': uwnetid if uwnetid else '',
'email': email if (
email and len(email)) else "{}@uw.edu".format(
uwnetid if uwnetid else '')
}

@property
def sws_section(self):
if not self.section_data:
self.section_data = get_sws_section_for_course(self)

return self.section_data

def get_crosslisted_course(self):
# default to Canvas course that SIS provisioning selects
# for student sections
section = get_sws_section_for_course(self)
if not section.is_withdrawn and len(section.joint_section_urls):
if (not self.sws_section.is_withdrawn
and len(self.sws_section.joint_section_urls)):
joint_course_ids = [self.canvas_sis_id()]
for url in section.joint_section_urls:
for url in self.sws_section.joint_section_urls:
try:
joint_section = get_sws_section_by_url(url)
if not joint_section.is_withdrawn:
Expand All @@ -234,8 +243,8 @@ def _campus_ordinal(self):
return Curriculum.objects.get(
curriculum_abbr=self.curriculum).campus_code
except Curriculum.DoesNotExist:
section = get_sws_section_for_course(self)
campus_code = self.UW_CAMPUS.index(section.course_campus.lower())
campus_code = self.UW_CAMPUS.index(
self.sws_section.course_campus.lower())
curriculum = Curriculum(curriculum_abbr=self.curriculum,
campus_code=campus_code)
curriculum.save()
Expand Down
2 changes: 1 addition & 1 deletion scheduler/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@


class User(object):
"""Indirection class used to load campus-specific Course class"""
"""Indirection class used to load campus-specific User class"""
def __new__(self, *args, **kwargs):
return load_class_from_module_setting(
USER_MODULE_SETTING, 'User', *args, **kwargs)
Expand Down
Loading

0 comments on commit 1cee9ec

Please sign in to comment.