Projet

Général

Profil

0002-add-new-version-to-api-user-form-API-fixes-13184.patch

Benjamin Dauvergne, 29 septembre 2016 13:54

Télécharger (5,18 ko)

Voir les différences:

Subject: [PATCH 2/2] add new version to /api/user/form API (fixes #13184)

If api_version query parameter is > 0, response are formatted as '{'err': x,
'data': y}. If the user is unknown a proper error is returned.
 tests/test_api.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 wcs/api.py        | 26 ++++++++++++++++----------
 2 files changed, 67 insertions(+), 10 deletions(-)
tests/test_api.py
1020 1020
    resp = get_app(pub).get(sign_uri('/api/user/forms', user=local_user))
1021 1021
    assert len(resp.json) == 1
1022 1022

  
1023
    resp = get_app(pub).get(sign_uri('/api/user/forms?NameID=xxx'), status=403)
1024

  
1025

  
1026
def test_user_forms_v1(pub, local_user):
1027
    FormDef.wipe()
1028
    formdef = FormDef()
1029
    formdef.name = 'test'
1030
    formdef.fields = [
1031
        fields.StringField(id='0', label='foobar', varname='foobar'),
1032
        fields.StringField(id='1', label='foobar2'),]
1033
    formdef.keywords = 'hello, world'
1034
    formdef.store()
1035
    formdef.data_class().wipe()
1036

  
1037
    resp = get_app(pub).get(sign_uri('/api/user/forms?api_version=1', user=local_user))
1038
    assert resp.json['err'] == 0
1039
    assert len(resp.json['data']) == 0
1040

  
1041
    formdata = formdef.data_class()()
1042
    formdata.data = {'0': 'foo@localhost', '1': 'xxx'}
1043
    formdata.user_id = local_user.id
1044
    formdata.just_created()
1045
    formdata.jump_status('new')
1046
    formdata.store()
1047

  
1048
    resp = get_app(pub).get(sign_uri('/api/user/forms?api_version=1', user=local_user))
1049
    resp2 = get_app(pub).get(sign_uri('/myspace/forms?api_version=1', user=local_user))
1050
    resp3 = get_app(pub).get(sign_uri('/api/users/%s/forms?api_version=1' % local_user.id))
1051
    assert resp.json['err'] == 0
1052
    assert len(resp.json['data']) == 1
1053
    assert resp.json['data'][0]['form_name'] == 'test'
1054
    assert resp.json['data'][0]['form_slug'] == 'test'
1055
    assert resp.json['data'][0]['form_status'] == 'New'
1056
    assert resp.json['data'][0]['keywords'] == ['hello', 'world']
1057
    assert resp.json == resp2.json == resp3.json
1058

  
1059
    resp = get_app(pub).get(sign_uri('/api/user/forms?api_version=1&full=on', user=local_user))
1060
    assert resp.json['err'] == 0
1061
    assert resp.json['data'][0]['fields']['foobar'] == 'foo@localhost'
1062
    assert resp.json['data'][0]['keywords'] == ['hello', 'world']
1063

  
1064
    formdef.disabled = True
1065
    formdef.store()
1066
    resp = get_app(pub).get(sign_uri('/api/user/forms?api_version=1', user=local_user))
1067
    assert resp.json['err'] == 0
1068
    assert len(resp.json['data']) == 1
1069

  
1070
    resp = get_app(pub).get(sign_uri('/api/user/forms?api_version=1&NameID=xxx'))
1071
    assert resp.json == {'err': 1, 'err_desc': 'unknown user', 'data': []}
1072

  
1073

  
1023 1074
def test_user_drafts(pub, local_user):
1024 1075
    FormDef.wipe()
1025 1076
    formdef = FormDef()
wcs/api.py
462 462
                encoding=get_publisher().site_charset)
463 463

  
464 464
    def forms(self):
465
        api_version = get_request().get_api_version()
465 466
        get_response().set_content_type('application/json')
466
        user = self.user or get_user_from_api_query_string() or get_request().user
467
        try:
468
            user = self.user or get_user_from_api_query_string() or get_request().user
469
        except UnknownNameIdAccessForbiddenError:
470
            user = None
467 471
        if not user:
468
            raise AccessForbiddenError('no user specified')
472
            if api_version < 1:
473
                raise AccessForbiddenError('no user specified')
474
            return json.dumps({'err': 1, 'err_desc': 'unknown user', 'data': []})
469 475
        forms = []
470 476
        for form in self.get_user_forms(user):
471 477
            if form.is_draft():
......
478 484
            id = form.get_display_id()
479 485
            status = visible_status.name
480 486
            title = _('%(name)s #%(id)s (%(status)s)') % {
481
                    'name': name,
482
                    'id': id,
483
                    'status': status
487
                'name': name,
488
                'id': id,
489
                'status': status
484 490
            }
485 491
            url = form.get_url()
486
            d = {'title': title,
492
            d = {
493
                'title': title,
487 494
                'name': form.formdef.name,
488 495
                'url': url,
489 496
                'datetime': misc.strftime.strftime('%Y-%m-%d %H:%M:%S', form.receipt_time),
......
494 501
            if get_request().form.get('full') == 'on':
495 502
                d.update(form.get_json_export_dict(include_files=False))
496 503
            forms.append(d)
497

  
498
        return json.dumps(forms,
499
                cls=misc.JSONEncoder,
500
                encoding=get_publisher().site_charset)
504
        if api_version > 0:
505
            forms = {'err': 0, 'data': forms}
506
        return json.dumps(forms, cls=misc.JSONEncoder, encoding=get_publisher().site_charset)
501 507

  
502 508

  
503 509
class ApiUsersDirectory(Directory):
504
-