0001-handle-storage-error-on-file-upload-40044.patch
tests/test_form_pages.py | ||
---|---|---|
2895 | 2895 |
assert resp.content_type == 'text/plain' |
2896 | 2896 |
assert resp.text == 'foobar' |
2897 | 2897 | |
2898 |
# upload error if file storage is unknown (out of order) |
|
2899 |
formdef.fields[0].storage = 'unknown-storage' |
|
2900 |
formdef.store() |
|
2901 |
resp = app.get('/test/') |
|
2902 |
resp.form['f0$file'] = upload |
|
2903 |
# javascript simulation |
|
2904 |
upload_url = resp.form['f0$file'].attrs['data-url'] |
|
2905 |
upload_resp = app.post(upload_url, params=resp.form.submit_fields()) |
|
2906 |
assert upload_resp.json == [{'error': 'Failed to store file (system error)'}] |
|
2907 |
# try to post the form anyway (with file in f0$file, i.e. "no javascript") |
|
2908 |
resp = resp.forms[0].submit('submit') |
|
2909 |
assert 'Check values then click submit.' not in resp.text |
|
2910 |
assert 'failed to store file (system error)' in resp.text |
|
2911 | ||
2898 | 2912 | |
2899 | 2913 |
def test_form_file_field_image_submit(pub): |
2900 | 2914 |
formdef = create_formdef() |
wcs/qommon/form.py | ||
---|---|---|
80 | 80 |
from .misc import strftime, C_, HAS_PDFTOPPM, json_loads |
81 | 81 |
from .publisher import get_cfg |
82 | 82 |
from .template_utils import render_block_to_string |
83 |
from .upload_storage import PicklableUpload |
|
83 |
from .upload_storage import PicklableUpload, UploadStorageError
|
|
84 | 84 | |
85 | 85 | |
86 | 86 |
QuixoteForm = Form |
... | ... | |
749 | 749 |
if self.get('token'): |
750 | 750 |
token = self.get('token') |
751 | 751 |
elif self.get('file'): |
752 |
token = get_session().add_tempfile(self.get('file'), storage=self.storage)['token'] |
|
752 |
try: |
|
753 |
token = get_session().add_tempfile(self.get('file'), storage=self.storage)['token'] |
|
754 |
except UploadStorageError as e: |
|
755 |
self.error = _('failed to store file (system error)') |
|
756 |
return |
|
753 | 757 |
request.form[self.get_widget('token').get_name()] = token |
754 | 758 |
else: |
755 | 759 |
token = None |
... | ... | |
764 | 768 | |
765 | 769 |
if self.storage and self.storage != self.storage: |
766 | 770 |
self.error = _('unknown storage system (system error)') |
771 |
return |
|
767 | 772 | |
768 | 773 |
# Don't trust the browser supplied MIME type, update the Upload object |
769 | 774 |
# with a MIME type created with magic (or based on the extension if the |
wcs/root.py | ||
---|---|---|
36 | 36 |
from .qommon.form import * |
37 | 37 |
from .qommon import ident |
38 | 38 |
from .qommon import pages |
39 |
from .qommon.upload_storage import UploadStorageError |
|
39 | 40 | |
40 | 41 |
from .qommon.afterjobs import AfterJobStatusDirectory |
41 | 42 | |
... | ... | |
295 | 296 |
storage = get_request().form.get('storage') |
296 | 297 |
for k, v in get_request().form.items(): |
297 | 298 |
if hasattr(v, 'fp'): |
298 |
tempfile = get_session().add_tempfile(v, storage=storage) |
|
299 |
results.append({'name': tempfile.get('base_filename'), |
|
300 |
'type': tempfile.get('content_type'), |
|
301 |
'size': tempfile.get('size'), |
|
302 |
'token': tempfile.get('token')}) |
|
299 |
try: |
|
300 |
tempfile = get_session().add_tempfile(v, storage=storage) |
|
301 |
results.append({'name': tempfile.get('base_filename'), |
|
302 |
'type': tempfile.get('content_type'), |
|
303 |
'size': tempfile.get('size'), |
|
304 |
'token': tempfile.get('token')}) |
|
305 |
except UploadStorageError as e: |
|
306 |
get_logger().error('upload storage error: %s' % e) |
|
307 |
results.append({'error': _('Failed to store file (system error)')}) |
|
303 | 308 | |
304 | 309 |
get_response().set_content_type('application/json') |
305 | 310 |
useragent = get_request().get_header('User-agent') or '' |
306 |
- |