@@ -36,6 +36,37 @@ def update(self):
36
36
else :
37
37
self ._store_generic (name , url , date , "other" )
38
38
39
+ def _get_external_urls (self ):
40
+ params = {
41
+ "moodlewsrestformat" : "json" ,
42
+ }
43
+ data = {
44
+ "wstoken" : self .token ,
45
+ "wsfunction" : "mod_url_get_urls_by_courses" ,
46
+ }
47
+
48
+ try :
49
+ response = requests .post (self .url , params = params , data = data )
50
+ objects = response .json ()
51
+
52
+ response .raise_for_status ()
53
+ except (IOError , ValueError ) as error :
54
+ raise ClassroomApiError ("Error while accessing e-classroom API" ) from error
55
+
56
+ # Handle API errors
57
+ if "errorcode" in objects :
58
+ if objects ["errorcode" ] == "invalidtoken" :
59
+ raise InvalidTokenError (objects ["message" ])
60
+ else :
61
+ raise ClassroomApiError (objects ["message" ])
62
+
63
+ # Yield every external URL name, URL and date
64
+ for object in objects ["urls" ]:
65
+ if object ["course" ] != self .course :
66
+ continue
67
+
68
+ yield (object ["name" ], object ["externalurl" ], datetime .datetime .fromtimestamp (object ["timemodified" ]))
69
+
39
70
def _get_documents (self ):
40
71
params = {
41
72
"moodlewsrestformat" : "json" ,
@@ -66,7 +97,7 @@ def _get_documents(self):
66
97
# Yield every document name, URL and date
67
98
for object in objects :
68
99
for module in object ["modules" ]:
69
- if "contents" not in module :
100
+ if "contents" not in module or len ( module [ "contents" ]) == 0 :
70
101
continue
71
102
72
103
yield (
@@ -75,6 +106,9 @@ def _get_documents(self):
75
106
datetime .datetime .fromtimestamp (module ["contents" ][0 ]["timecreated" ]).date (),
76
107
)
77
108
109
+ # Yield external URLs
110
+ yield from self ._get_external_urls ()
111
+
78
112
@with_span (op = "document" , pass_span = True )
79
113
def _store_generic (self , name , url , date , urltype , span ):
80
114
# Add or skip new generic document
@@ -260,16 +294,24 @@ def _store_substitutions(self, name, url, span):
260
294
"date" : date ,
261
295
"day" : day ,
262
296
"time" : time ,
263
- "subject" : subject ,
297
+ "subject" : subject if subject != "X" else None ,
264
298
"original_teacher_id" : get_or_create (
265
299
self .session , model = Teacher , name = original_teacher
266
- )[0 ].id ,
300
+ )[0 ].id
301
+ if original_teacher != "X"
302
+ else None ,
267
303
"original_classroom_id" : get_or_create (
268
304
self .session , model = Classroom , name = original_classroom
269
- )[0 ].id ,
305
+ )[0 ].id
306
+ if original_classroom != "/"
307
+ else None ,
270
308
"class_id" : get_or_create (self .session , model = Class , name = class_ )[0 ].id ,
271
- "teacher_id" : get_or_create (self .session , model = Teacher , name = teacher )[0 ].id ,
272
- "classroom_id" : get_or_create (self .session , model = Classroom , name = classroom )[0 ].id ,
309
+ "teacher_id" : get_or_create (self .session , model = Teacher , name = teacher )[0 ].id
310
+ if teacher != "X"
311
+ else None ,
312
+ "classroom_id" : get_or_create (self .session , model = Classroom , name = classroom )[0 ].id
313
+ if classroom != "/"
314
+ else None ,
273
315
}
274
316
)
275
317
0 commit comments