|
16 | 16 | from integrated_channels.integrated_channel.client import IntegratedChannelApiClient |
17 | 17 | from integrated_channels.utils import generate_formatted_log, stringify_and_store_api_record |
18 | 18 |
|
| 19 | +MOODLE_ERROR_STATUS_MAP = { |
| 20 | + "shortnametaken": 409, |
| 21 | + "courseidnumbertaken": 409, |
| 22 | + "cannotfindcourse": 404, |
| 23 | + "cannotfinduser": 404, |
| 24 | + "missingparam": 400, |
| 25 | +} |
| 26 | + |
19 | 27 | LOGGER = logging.getLogger(__name__) |
20 | 28 |
|
21 | 29 |
|
@@ -82,17 +90,30 @@ def inner(self, *args, **kwargs): |
82 | 90 | raise ClientError('Moodle API Grade Update failed with possible error: {body}'.format(body=body), 500) |
83 | 91 | error_code = body.get('errorcode') |
84 | 92 | 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 | + |
85 | 101 | if error_code and error_code == 'invalidtoken': |
86 | 102 | self.token = self._get_access_token() # pylint: disable=protected-access |
87 | 103 | response = method(self, *args, **kwargs) |
88 | 104 | elif error_code: |
89 | 105 | raise MoodleClientError( |
90 | 106 | 'Moodle API Client Task "{method}" failed with error code ' |
91 | 107 | '"{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'), |
93 | 111 | ), |
94 | 112 | response.status_code, |
95 | | - error_code, |
| 113 | + moodle_error={ |
| 114 | + 'mapped_status': mapped_status, |
| 115 | + 'error_code': error_code, |
| 116 | + }, |
96 | 117 | ) |
97 | 118 | elif warnings: |
98 | 119 | # More Moodle nonsense! |
@@ -464,9 +485,18 @@ def create_content_metadata(self, serialized_data): |
464 | 485 | except MoodleClientError as error: |
465 | 486 | # treat duplicate as successful, but only if its a single course |
466 | 487 | # 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 | + ): |
468 | 493 | 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 | + ): |
470 | 500 | return 200, "courseidnumbertaken" |
471 | 501 | else: |
472 | 502 | raise error |
|
0 commit comments