Skip to content

Commit f56244d

Browse files
Handling Moodle error messages
1 parent 44a3f12 commit f56244d

1 file changed

Lines changed: 34 additions & 4 deletions

File tree

integrated_channels/moodle/client.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@
1616
from integrated_channels.integrated_channel.client import IntegratedChannelApiClient
1717
from integrated_channels.utils import generate_formatted_log, stringify_and_store_api_record
1818

19+
MOODLE_ERROR_STATUS_MAP = {
20+
"shortnametaken": 409,
21+
"courseidnumbertaken": 409,
22+
"cannotfindcourse": 404,
23+
"cannotfinduser": 404,
24+
"missingparam": 400,
25+
}
26+
1927
LOGGER = logging.getLogger(__name__)
2028

2129

@@ -82,17 +90,30 @@ def inner(self, *args, **kwargs):
8290
raise ClientError('Moodle API Grade Update failed with possible error: {body}'.format(body=body), 500)
8391
error_code = body.get('errorcode')
8492
warnings = body.get('warnings')
93+
94+
# Define mapped_status based on error_code
95+
mapped_status = {
96+
'invalidtoken': 'Invalid Token',
97+
'missingfield': 'Missing Field',
98+
'duplicatedata': 'Duplicate Data',
99+
}.get(error_code, 'Unknown Error')
100+
85101
if error_code and error_code == 'invalidtoken':
86102
self.token = self._get_access_token() # pylint: disable=protected-access
87103
response = method(self, *args, **kwargs)
88104
elif error_code:
89105
raise MoodleClientError(
90106
'Moodle API Client Task "{method}" failed with error code '
91107
'"{code}" and message: "{msg}" '.format(
92-
method=method.__name__, code=error_code, msg=body.get('message'),
108+
method=method.__name__,
109+
code=error_code,
110+
msg=body.get('message'),
93111
),
94112
response.status_code,
95-
error_code,
113+
moodle_error={
114+
'mapped_status': mapped_status,
115+
'error_code': error_code,
116+
},
96117
)
97118
elif warnings:
98119
# More Moodle nonsense!
@@ -464,9 +485,18 @@ def create_content_metadata(self, serialized_data):
464485
except MoodleClientError as error:
465486
# treat duplicate as successful, but only if its a single course
466487
# set chunk size settings to 1 if youre seeing a lot of these errors
467-
if error.moodle_error == 'shortnametaken' and not more_than_one_course:
488+
if (
489+
error.moodle_error
490+
and error.moodle_error.get('error_code') == 'shortnametaken'
491+
and not more_than_one_course
492+
):
468493
return 200, "shortnametaken"
469-
elif error.moodle_error == 'courseidnumbertaken' and not more_than_one_course:
494+
495+
elif (
496+
error.moodle_error
497+
and error.moodle_error.get('error_code') == 'courseidnumbertaken'
498+
and not more_than_one_course
499+
):
470500
return 200, "courseidnumbertaken"
471501
else:
472502
raise error

0 commit comments

Comments
 (0)