0004-forms-abort-autosave-after-200-ms-58276.patch
tests/form_pages/test_all.py | ||
---|---|---|
4436 | 4436 |
assert formdef.data_class().select()[0].data['1'] == 'foobar3' |
4437 | 4437 | |
4438 | 4438 | |
4439 |
def test_form_autosave_timeout(pub, monkeypatch): |
|
4440 |
from wcs.forms.root import FormPage |
|
4441 | ||
4442 |
monkeypatch.setattr(FormPage, 'AUTOSAVE_TIMEOUT', 0.0001) |
|
4443 | ||
4444 |
formdef = create_formdef() |
|
4445 |
formdef.fields = [ |
|
4446 |
fields.PageField(id='0', label='1st page', type='page'), |
|
4447 |
fields.StringField(id='1', label='string'), |
|
4448 |
fields.PageField(id='2', label='2nd page', type='page'), |
|
4449 |
fields.StringField(id='3', label='string 2'), |
|
4450 |
] |
|
4451 |
formdef.enable_tracking_codes = True |
|
4452 |
formdef.store() |
|
4453 | ||
4454 |
formdef.data_class().wipe() |
|
4455 |
app = get_app(pub) |
|
4456 |
resp = app.get('/test/') |
|
4457 |
resp.form['f1'] = 'foobar' |
|
4458 | ||
4459 |
resp = app.post('/test/autosave', params=resp.form.submit_fields()) |
|
4460 |
assert resp.json == {'reason': 'too long', 'result': 'error'} |
|
4461 | ||
4462 | ||
4439 | 4463 |
def test_form_autosave_with_items_field(pub): |
4440 | 4464 |
formdef = create_formdef() |
4441 | 4465 |
formdef.data_class().wipe() |
wcs/forms/root.py | ||
---|---|---|
1352 | 1352 |
formdata.user = get_request().user |
1353 | 1353 |
formdata.store() |
1354 | 1354 | |
1355 |
AUTOSAVE_TIMEOUT = 0.2 |
|
1356 | ||
1355 | 1357 |
def autosave(self): |
1356 | 1358 |
get_response().set_content_type('application/json') |
1357 | 1359 | |
... | ... | |
1409 | 1411 |
if not session.has_form_token(get_request().form.get('_ajax_form_token')): |
1410 | 1412 |
return result_error('obsolete ajax form token (late check)') |
1411 | 1413 | |
1414 |
if time.time() - get_request().t0 > self.AUTOSAVE_TIMEOUT: |
|
1415 |
return result_error('too long') |
|
1416 | ||
1412 | 1417 |
try: |
1413 | 1418 |
self.save_draft(form_data, page_no) |
1414 | 1419 |
except SubmittedDraftException: |
1415 |
- |