|
1 | 1 | from django.contrib import admin, messages |
| 2 | +from django.core.exceptions import ValidationError |
2 | 3 | from django.forms.models import modelform_factory |
3 | 4 | from django.http import JsonResponse |
4 | 5 | from django.urls import path |
|
9 | 10 | from ..models import Clipboard, ClipboardItem, Folder |
10 | 11 | from ..utils.files import handle_request_files_upload, handle_upload |
11 | 12 | from ..utils.loader import load_model |
12 | | -from ..validation import FileValidationError, validate_upload |
| 13 | +from ..validation import validate_upload |
13 | 14 | from . import views |
14 | 15 |
|
15 | 16 |
|
@@ -112,48 +113,53 @@ def ajax_upload(request, folder_id=None): |
112 | 113 | break |
113 | 114 | uploadform = FileForm({'original_filename': filename, 'owner': request.user.pk}, |
114 | 115 | {'file': upload}) |
| 116 | + uploadform.request = request |
115 | 117 | uploadform.instance.mime_type = mime_type |
116 | 118 | if uploadform.is_valid(): |
117 | 119 | try: |
118 | 120 | validate_upload(filename, upload, request.user, mime_type) |
119 | | - except FileValidationError as error: |
120 | | - from django.contrib.messages import ERROR, add_message |
121 | | - message = str(error) |
122 | | - add_message(request, ERROR, message) |
123 | | - return JsonResponse({'error': message}) |
124 | | - file_obj = uploadform.save(commit=False) |
125 | | - # Enforce the FILER_IS_PUBLIC_DEFAULT |
126 | | - file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT |
| 121 | + file_obj = uploadform.save(commit=False) |
| 122 | + # Enforce the FILER_IS_PUBLIC_DEFAULT |
| 123 | + file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT |
| 124 | + except ValidationError as error: |
| 125 | + messages.error(request, str(error)) |
| 126 | + return JsonResponse({'error': str(error)}) |
127 | 127 | file_obj.folder = folder |
128 | 128 | file_obj.save() |
129 | 129 | # TODO: Deprecated/refactor |
130 | 130 | # clipboard_item = ClipboardItem( |
131 | 131 | # clipboard=clipboard, file=file_obj) |
132 | 132 | # clipboard_item.save() |
133 | 133 |
|
134 | | - thumbnail = None |
135 | | - data = { |
136 | | - 'thumbnail': thumbnail, |
137 | | - 'alt_text': '', |
138 | | - 'label': str(file_obj), |
139 | | - 'file_id': file_obj.pk, |
140 | | - } |
141 | | - # prepare preview thumbnail |
142 | | - if isinstance(file_obj, Image): |
143 | | - thumbnail_180_options = { |
144 | | - 'size': (180, 180), |
145 | | - 'crop': True, |
146 | | - 'upscale': True, |
| 134 | + try: |
| 135 | + thumbnail = None |
| 136 | + data = { |
| 137 | + 'thumbnail': thumbnail, |
| 138 | + 'alt_text': '', |
| 139 | + 'label': str(file_obj), |
| 140 | + 'file_id': file_obj.pk, |
147 | 141 | } |
148 | | - thumbnail_180 = file_obj.file.get_thumbnail( |
149 | | - thumbnail_180_options) |
150 | | - data['thumbnail_180'] = thumbnail_180.url |
151 | | - data['original_image'] = file_obj.url |
152 | | - return JsonResponse(data) |
| 142 | + # prepare preview thumbnail |
| 143 | + if isinstance(file_obj, Image): |
| 144 | + thumbnail_180_options = { |
| 145 | + 'size': (180, 180), |
| 146 | + 'crop': True, |
| 147 | + 'upscale': True, |
| 148 | + } |
| 149 | + thumbnail_180 = file_obj.file.get_thumbnail( |
| 150 | + thumbnail_180_options) |
| 151 | + data['thumbnail_180'] = thumbnail_180.url |
| 152 | + data['original_image'] = file_obj.url |
| 153 | + return JsonResponse(data) |
| 154 | + except Exception as error: |
| 155 | + messages.error(request, str(error)) |
| 156 | + return JsonResponse({"error": str(error)}) |
153 | 157 | else: |
154 | | - form_errors = '; '.join(['{}: {}'.format( |
155 | | - field, |
156 | | - ', '.join(errors)) for field, errors in list( |
157 | | - uploadform.errors.items()) |
| 158 | + for key, error_list in uploadform.errors.items(): |
| 159 | + for error in error_list: |
| 160 | + messages.error(request, error) |
| 161 | + |
| 162 | + form_errors = '; '.join(['{}'.format( |
| 163 | + ', '.join(errors)) for errors in list(uploadform.errors.values()) |
158 | 164 | ]) |
159 | | - return JsonResponse({'message': str(form_errors)}, status=422) |
| 165 | + return JsonResponse({'error': str(form_errors)}, status=200) |
0 commit comments