Skip to content

Commit 78869d2

Browse files
authored
chores: better error management for evidences upload (#3576)
* chores: better error management for evidences upload * fixup * clean up on batch mode for tasks
1 parent ae440db commit 78869d2

6 files changed

Lines changed: 37 additions & 16 deletions

File tree

backend/core/validators.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,18 @@ def validate_file_name(value):
6060
"xml",
6161
"msg",
6262
"eml",
63+
"zip",
64+
"7z",
65+
"tar",
66+
"gz",
67+
"log",
68+
"svg",
69+
"mp4",
70+
"mov",
71+
"gif",
6372
]
6473
parts = value.name.split(".")
65-
extension = parts[-1]
74+
extension = parts[-1].lower()
6675

6776
if extension in allowed_extensions:
6877
if len(value.name) > 256:
@@ -74,4 +83,6 @@ def validate_file_name(value):
7483
)
7584
return value
7685
else:
77-
raise ValidationError("An error occured with file extension")
86+
raise ValidationError(
87+
f"Unsupported file extension '.{extension}'. Allowed extensions: {', '.join(allowed_extensions)}"
88+
)

backend/core/views.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8223,10 +8223,18 @@ def post(self, request, *args, **kwargs):
82238223
revision.attachment = attachment
82248224
try:
82258225
revision.full_clean()
8226-
except ValidationError:
8226+
except ValidationError as e:
82278227
revision.attachment = old_attachment
8228+
messages = []
8229+
if hasattr(e, "message_dict"):
8230+
for field_messages in e.message_dict.values():
8231+
messages.extend(field_messages)
8232+
elif hasattr(e, "messages"):
8233+
messages = e.messages
8234+
else:
8235+
messages = [str(e.message)]
82288236
return Response(
8229-
{"detail": "File too large or unsupported format."},
8237+
{"detail": " ".join(messages)},
82308238
status=status.HTTP_400_BAD_REQUEST,
82318239
)
82328240
if old_attachment:

frontend/src/lib/components/Forms/ModelForm.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@
228228
if (form.message?.redirect) {
229229
goto(getSecureRedirect(form.message.redirect));
230230
}
231-
if (form.valid) {
231+
if (form.valid && !form.message?.error) {
232232
if (parent && typeof parent.onConfirm === 'function') {
233233
parent.onConfirm();
234234
}

frontend/src/lib/utils/actions.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ export async function handleErrorResponse({
7979
return message(form, { warning: res.warning });
8080
}
8181
if (res.error || res.detail) {
82-
setFlash({ type: 'error', message: safeTranslate(res.error || res.detail) }, event);
82+
setFlash(
83+
{ type: 'error', message: safeTranslate(res.error || res.detail), timeout: 10000 },
84+
event
85+
);
8386
return message(form, { error: res.error || res.detail });
8487
}
8588
Object.entries(res).forEach(([key, value]) => {
@@ -149,8 +152,14 @@ export async function defaultWriteFormAction({
149152
body: file
150153
};
151154
const fileUploadRes = await event.fetch(fileUploadEndpoint, fileUploadRequestInitOptions);
152-
if (!fileUploadRes.ok)
155+
if (!fileUploadRes.ok) {
156+
// Clean up the created object if file upload fails during creation
157+
if (action === 'create') {
158+
const deleteEndpoint = `${BASE_API_URL}/${urlModel}/${writtenObject.id}/`;
159+
await event.fetch(deleteEndpoint, { method: 'DELETE' });
160+
}
153161
return await handleErrorResponse({ event, response: fileUploadRes, form });
162+
}
154163
}
155164
}
156165

frontend/src/lib/utils/table.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2935,14 +2935,7 @@ export const batchActions: Partial<Record<urlModel, BatchActionConfig[]>> = {
29352935
icon: 'fa-solid fa-arrow-right-arrow-left',
29362936
field: 'status',
29372937
optionsEndpoint: 'task-nodes/status'
2938-
},
2939-
{
2940-
type: 'change_folder',
2941-
label: 'changeDomain',
2942-
icon: 'fa-solid fa-folder',
2943-
optionsEndpoint: 'folders?content_type=DO&content_type=GL'
2944-
},
2945-
{ type: 'delete', label: 'delete', icon: 'fa-solid fa-trash' }
2938+
}
29462939
],
29472940
'requirement-assessments': [
29482941
{

frontend/src/routes/+layout.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112

113113
<svelte:head><link rel="icon" href="/favicon.ico" /></svelte:head>
114114
<Dialog components={modalRegistry} />
115-
<Toast />
115+
<Toast zIndex="z-[1000]" />
116116
{@render children?.()}
117117

118118
{#if $flash}

0 commit comments

Comments
 (0)