Projet

Général

Profil

0004-forms-abort-autosave-after-200-ms-58276.patch

Benjamin Dauvergne, 21 décembre 2021 11:10

Télécharger (2,37 ko)

Voir les différences:

Subject: [PATCH 4/4] forms: abort autosave after 200 ms (#58276)

 tests/form_pages/test_all.py | 24 ++++++++++++++++++++++++
 wcs/forms/root.py            |  5 +++++
 2 files changed, 29 insertions(+)
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
-