Skip to content

Commit d1dbb77

Browse files
prathamgupta36robwaz
authored andcommitted
Making the code by removing nested exceptions
1 parent b4b169a commit d1dbb77

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

dojo_plugin/pages/dojo.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -200,26 +200,32 @@ def update_dojo(dojo, update_code=None):
200200
db.session.rollback()
201201
error = str(e)
202202
match = re.search(r"Key \(dojo_id, module_index, id\)=\(.*?,\s*(\d+),\s*([^\)]+)\)", error)
203-
if match:
204-
module_index, challenge_id = match.groups()
205-
module_index = int(module_index)
206-
challenge_id = challenge_id.strip()
207-
try:
208-
module = dojo.modules[module_index]
209-
challenge = next((c for c in module.challenges if c.id == challenge_id), None)
210-
module_name = module.name
211-
challenge_name = challenge.name if challenge else challenge_id
212-
error_message = f"Duplicate ID used in Module: {module_name}, for Challenge: {challenge_name}."
213-
return {"success": False, "error": error_message}, 400
214-
except (IndexError, StopIteration):
215-
return {"success": False, "error": "Database integrity error: Could not parse module/challenge."}, 400
216-
else:
217-
print(f"ERROR: Dojo failed for {dojo}", file=sys.stderr, flush=True)
203+
204+
if not match:
205+
print(f"ERROR: Dojo update failed with unparsed IntegrityError for {dojo}", file=sys.stderr, flush=True)
218206
traceback.print_exc(file=sys.stderr)
219-
return {"success": False, "error": "Database integrity error"}, 400
207+
return {"success": False, "error": "Database integrity error: A challenge ID is likely duplicated."}, 400
208+
209+
module_index_str, challenge_id = match.groups()
210+
module_index = int(module_index_str)
211+
challenge_id = challenge_id.strip()
212+
213+
if module_index >= len(dojo.modules):
214+
print(f"ERROR: IntegrityError for {dojo} references out-of-bounds module_index {module_index}", file=sys.stderr, flush=True)
215+
return {"success": False, "error": "Database integrity error: Inconsistent module data."}, 400
216+
217+
module = dojo.modules[module_index]
218+
challenge = next((c for c in module.challenges if c.id == challenge_id), None)
219+
220+
module_name = module.name
221+
challenge_name = challenge.name if challenge else challenge_id
222+
error_message = f"Duplicate ID '{challenge_id}' used in module '{module_name}'."
223+
224+
return {"success": False, "error": error_message}, 400
225+
220226
except Exception as e:
221227
db.session.rollback()
222-
print(f"ERROR: Dojo failed for {dojo}", file=sys.stderr, flush=True)
228+
print(f"ERROR: Dojo update failed for {dojo}", file=sys.stderr, flush=True)
223229
traceback.print_exc(file=sys.stderr)
224230
return {"success": False, "error": str(e)}, 400
225231
return {"success": True}

0 commit comments

Comments
 (0)