Skip to content

Commit 3f84e39

Browse files
authored
Merge pull request #13 from filips123/fix-substitutions-handling
Fix substitutions handling
2 parents 557c5a0 + 9326930 commit 3f84e39

File tree

1 file changed

+48
-6
lines changed

1 file changed

+48
-6
lines changed

API/gimvicurnik/updaters/eclassroom.py

+48-6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,37 @@ def update(self):
3636
else:
3737
self._store_generic(name, url, date, "other")
3838

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+
3970
def _get_documents(self):
4071
params = {
4172
"moodlewsrestformat": "json",
@@ -66,7 +97,7 @@ def _get_documents(self):
6697
# Yield every document name, URL and date
6798
for object in objects:
6899
for module in object["modules"]:
69-
if "contents" not in module:
100+
if "contents" not in module or len(module["contents"]) == 0:
70101
continue
71102

72103
yield (
@@ -75,6 +106,9 @@ def _get_documents(self):
75106
datetime.datetime.fromtimestamp(module["contents"][0]["timecreated"]).date(),
76107
)
77108

109+
# Yield external URLs
110+
yield from self._get_external_urls()
111+
78112
@with_span(op="document", pass_span=True)
79113
def _store_generic(self, name, url, date, urltype, span):
80114
# Add or skip new generic document
@@ -260,16 +294,24 @@ def _store_substitutions(self, name, url, span):
260294
"date": date,
261295
"day": day,
262296
"time": time,
263-
"subject": subject,
297+
"subject": subject if subject != "X" else None,
264298
"original_teacher_id": get_or_create(
265299
self.session, model=Teacher, name=original_teacher
266-
)[0].id,
300+
)[0].id
301+
if original_teacher != "X"
302+
else None,
267303
"original_classroom_id": get_or_create(
268304
self.session, model=Classroom, name=original_classroom
269-
)[0].id,
305+
)[0].id
306+
if original_classroom != "/"
307+
else None,
270308
"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,
273315
}
274316
)
275317

0 commit comments

Comments
 (0)