9
9
from uw_canvas .sections import Sections
10
10
from uw_canvas .courses import Courses
11
11
from uw_canvas .models import CanvasCourse , CanvasSection
12
- from uw_sws .exceptions import InvalidCanvasIndependentStudyCourse
12
+ from uw_sws .exceptions import (
13
+ InvalidCanvasIndependentStudyCourse , InvalidCanvasSection )
13
14
from myuw .dao import log_err
14
15
from myuw .dao .pws import get_regid_of_current_user
15
16
from myuw .dao .term import get_comparison_datetime
16
17
17
18
logger = logging .getLogger (__name__ )
19
+ canvas_enrollments = Enrollments ()
18
20
19
21
20
22
def canvas_prefetch ():
@@ -26,9 +28,11 @@ def _method(request):
26
28
def get_canvas_active_enrollments (request ):
27
29
if not hasattr (request , "canvas_act_enrollments" ):
28
30
request .canvas_act_enrollments = (
29
- Enrollments () .get_enrollments_for_regid (
31
+ canvas_enrollments .get_enrollments_for_regid (
30
32
get_regid_of_current_user (request ),
31
33
{'type' : ['StudentEnrollment' ], 'state' : ['active' ]}))
34
+ logger .debug ({'canvas_act_enrollments' :
35
+ request .canvas_act_enrollments [0 ].json_data ()})
32
36
return request .canvas_act_enrollments
33
37
34
38
@@ -37,34 +41,50 @@ def set_section_canvas_course_urls(canvas_active_enrollments, schedule,
37
41
"""
38
42
Set canvas_course_url in schedule.sections
39
43
"""
40
- now = get_comparison_datetime ( request )
41
- section_labels = set ()
44
+ canvas_sis_ids = {}
45
+ # MUWM-5362 {canvas_section_sis_id: primary_section_label}
42
46
for section in schedule .sections :
43
- section_labels . add ( section .section_label () )
47
+ section_label = section .section_label ()
44
48
45
- canvas_links = {} # sis_course_id: canvas course_url
46
- for enrollment in canvas_active_enrollments :
47
- (sws_label , inst_regid ) = sws_section_label (enrollment .sis_course_id )
48
- if sws_label is not None and sws_label in section_labels :
49
- sis_course_id = enrollment .sis_course_id
50
- if sis_course_id not in canvas_links :
51
- canvas_links [sis_course_id ] = enrollment .course_url
52
-
53
- for section in schedule .sections :
54
49
try :
55
- section .canvas_course_url = canvas_links .get (
56
- section .canvas_course_sis_id ())
50
+ cid = section .canvas_course_sis_id ()
51
+ if cid not in canvas_sis_ids :
52
+ canvas_sis_ids [cid ] = section .primary_section_label ()
57
53
except InvalidCanvasIndependentStudyCourse as ex :
58
54
# REQ3132940 known SWS issue:
59
55
# prior quarter's registration data has
60
56
# no independent study instructor.
61
57
# If independent_study_instructor being None occurs
62
58
# in current or future quarter, likely is a data error.
63
- if not section .term .is_past (now ):
64
- log_err (logger ,
65
- "{} {}" .format (section .section_label (), ex ),
66
- traceback , request )
67
- pass
59
+ log_err (
60
+ logger , f"canvas_course_sis_id of { section_label } { ex } " ,
61
+ traceback , request )
62
+ continue
63
+ try :
64
+ cid = section .canvas_section_sis_id ()
65
+ canvas_sis_ids [cid ] = section .primary_section_label ()
66
+ except Exception as ex :
67
+ log_err (
68
+ logger , f"canvas_section_sis_id of { section_label } { ex } " ,
69
+ traceback , request )
70
+ logger .debug ({'canvas_sis_ids' : canvas_sis_ids })
71
+
72
+ canvas_links = {} # primary_section_label: canvas course_url
73
+ for enrollment in canvas_active_enrollments :
74
+ psection_label = None
75
+ # MUWM-5362 check both course and section
76
+ if enrollment .sis_section_id in canvas_sis_ids :
77
+ psection_label = canvas_sis_ids [enrollment .sis_section_id ]
78
+ else :
79
+ if enrollment .sis_course_id in canvas_sis_ids :
80
+ psection_label = canvas_sis_ids [enrollment .sis_course_id ]
81
+ if psection_label and psection_label not in canvas_links :
82
+ canvas_links [psection_label ] = enrollment .course_url
83
+ logger .debug ({'canvas_links' : canvas_links })
84
+
85
+ for section in schedule .sections :
86
+ section .canvas_course_url = canvas_links .get (
87
+ section .primary_section_label ())
68
88
69
89
70
90
def get_canvas_course_from_section (sws_section ):
@@ -91,12 +111,11 @@ def get_canvas_course_url(sws_section, person):
91
111
def sws_section_label (sis_id ):
92
112
canvas_section = CanvasSection (sis_section_id = sis_id )
93
113
sws_label = canvas_section .sws_section_id ()
94
- if sws_label is None :
95
- canvas_course = CanvasCourse (sis_course_id = sis_id )
96
- sws_label = canvas_course .sws_course_id ()
97
- return (sws_label , canvas_course .sws_instructor_regid ())
98
- else :
114
+ if sws_label is not None :
99
115
return (sws_label , canvas_section .sws_instructor_regid ())
116
+ canvas_course = CanvasCourse (sis_course_id = sis_id )
117
+ sws_label = canvas_course .sws_course_id ()
118
+ return (sws_label , canvas_course .sws_instructor_regid ())
100
119
101
120
102
121
def get_viewable_course_sections (canvas_course_id , canvas_user_id ):
@@ -108,7 +127,7 @@ def get_viewable_course_sections(canvas_course_id, canvas_user_id):
108
127
limit_privileges_to_course_section = False
109
128
limit_sections = {}
110
129
111
- enrollments = Enrollments () .get_enrollments_for_course (
130
+ enrollments = canvas_enrollments .get_enrollments_for_course (
112
131
canvas_course_id , params = {'user_id' : canvas_user_id })
113
132
114
133
for enrollment in enrollments :
0 commit comments