diff --git a/src/animaltrack/web/routes/events.py b/src/animaltrack/web/routes/events.py index c585a63..0693e4a 100644 --- a/src/animaltrack/web/routes/events.py +++ b/src/animaltrack/web/routes/events.py @@ -335,7 +335,7 @@ async def event_delete(request: Request, event_id: str): if not auth: return JSONResponse({"error": "Not authenticated"}, status_code=401) - if auth.role != UserRole.admin: + if auth.role != UserRole.ADMIN: return JSONResponse({"error": "Admin role required"}, status_code=403) # Parse form data diff --git a/src/animaltrack/web/templates/animal_select.py b/src/animaltrack/web/templates/animal_select.py index aeb232c..3b3a582 100644 --- a/src/animaltrack/web/templates/animal_select.py +++ b/src/animaltrack/web/templates/animal_select.py @@ -157,13 +157,24 @@ def selection_script(total_count: int) -> Div: from_location_id: fromLoc }}) }}) - .then(response => response.json()) + .then(response => {{ + if (!response.ok) {{ + console.error('Hash computation failed:', response.status); + return {{}}; + }} + var contentType = response.headers.get('content-type'); + if (contentType && contentType.includes('application/json')) {{ + return response.json(); + }} + return {{}}; + }}) .then(data => {{ var hashField = document.getElementById('roster-hash-field'); - if (hashField) {{ + if (hashField && data.roster_hash) {{ hashField.value = data.roster_hash; }} - }}); + }}) + .catch(err => console.error('Hash computation error:', err)); }} // Initialize hash on load diff --git a/src/animaltrack/web/templates/event_detail.py b/src/animaltrack/web/templates/event_detail.py index 4f4c11f..aa76d8e 100644 --- a/src/animaltrack/web/templates/event_detail.py +++ b/src/animaltrack/web/templates/event_detail.py @@ -409,7 +409,12 @@ def delete_script() -> Script: body: 'reason=Deleted via UI' }); - const data = await response.json(); + // Try to parse JSON, but handle non-JSON responses gracefully + let data = {}; + const contentType = response.headers.get('content-type'); + if (contentType && contentType.includes('application/json')) { + data = await response.json(); + } if (response.ok) { statusEl.innerHTML = 'Event deleted successfully!'; @@ -422,7 +427,8 @@ def delete_script() -> Script: statusEl.innerHTML = '' + data.message + ''; deleteBtn.disabled = false; } else { - statusEl.innerHTML = 'Error: ' + (data.error || 'Unknown error') + ''; + const errorMsg = data.error || 'Server error (' + response.status + ')'; + statusEl.innerHTML = 'Error: ' + errorMsg + ''; deleteBtn.disabled = false; } } catch (err) {