Projet

Général

Profil

0001-api-add-possibility-to-get-drafts-from-api-user-form.patch

Frédéric Péters, 30 novembre 2017 19:39

Télécharger (4,23 ko)

Voir les différences:

Subject: [PATCH] api: add possibility to get drafts from /api/user/forms
 endpoint (#20230)

 tests/test_api.py | 24 ++++++++++++++++++++++++
 wcs/api.py        | 34 ++++++++++++++++++++++++++++++++--
 2 files changed, 56 insertions(+), 2 deletions(-)
tests/test_api.py
1096 1096
        fields.StringField(id='0', label='foobar', varname='foobar'),
1097 1097
        fields.StringField(id='1', label='foobar2'),]
1098 1098
    formdef.keywords = 'hello, world'
1099
    formdef.disabled = False
1100
    formdef.enable_tracking_codes = True
1099 1101
    formdef.store()
1100 1102
    formdef.data_class().wipe()
1101 1103

  
......
1130 1132
    resp = get_app(pub).get(sign_uri('/api/user/forms', user=local_user))
1131 1133
    assert len(resp.json) == 1
1132 1134

  
1135
    formdata = formdef.data_class()()
1136
    formdata.user_id = local_user.id
1137
    formdata.status = 'draft'
1138
    formdata.receipt_time = datetime.datetime(2015, 1, 1).timetuple()
1139
    formdata.store()
1140

  
1141
    resp = get_app(pub).get(sign_uri('/api/user/forms', user=local_user))
1142
    assert len(resp.json) == 1
1143

  
1144
    resp = get_app(pub).get(sign_uri('/api/user/forms?include-drafts=true', user=local_user))
1145
    assert len(resp.json) == 1
1146

  
1147
    formdef.disabled = False
1148
    formdef.store()
1149

  
1150
    resp = get_app(pub).get(sign_uri('/api/user/forms?include-drafts=true', user=local_user))
1151
    assert len(resp.json) == 2
1152

  
1153
    draft_formdata = [x for x in resp.json if x['status'] == 'Draft'][0]
1154
    assert draft_formdata.get('url')[-1] != '/'
1155
    assert draft_formdata['status_css_class'] == 'draft'
1156

  
1133 1157
def test_user_drafts(pub, local_user):
1134 1158
    FormDef.wipe()
1135 1159
    formdef = FormDef()
wcs/api.py
24 24

  
25 25
from qommon import _
26 26
from qommon import misc
27
from qommon.evalutils import make_datetime
27 28
from qommon.errors import (AccessForbiddenError, QueryError, TraversalError,
28 29
    UnknownNameIdAccessForbiddenError)
29 30
from qommon.form import ValidationError, ComputedExpressionWidget
......
96 97
    return d
97 98

  
98 99

  
100
def get_draft_formdata_dict(formdata, user):
101
    title = _('%(name)s (%(status)s)') % {
102
            'name': formdata.formdef.name,
103
            'status': _('Draft'),
104
    }
105
    d = {'title': title,
106
        'name': formdata.formdef.name,
107
        'url': formdata.get_url().rstrip('/'),
108
        'datetime': misc.strftime('%Y-%m-%d %H:%M:%S', formdata.receipt_time),
109
        'status': _('Draft'),
110
        'status_css_class': 'draft',
111
        'keywords': formdata.formdef.keywords_list,
112
        'draft': True,
113
    }
114
    if formdata.last_update_time:
115
        d['last_update_time'] = misc.strftime('%Y-%m-%d %H:%M:%S', formdata.last_update_time)
116
    d.update(formdata.get_substitution_variables(minimal=True))
117
    del d['form_number']
118
    del d['form_number_raw']
119
    return d
120

  
121

  
99 122
class ApiFormdataPage(FormStatusPage):
100 123
    _q_exports_orig = ['', 'download']
101 124

  
......
556 579
        if not user:
557 580
            raise AccessForbiddenError('no user specified')
558 581
        forms = []
582
        include_drafts = get_request().form.get('include-drafts') == 'true'
559 583
        for form in self.get_user_forms(user):
560 584
            if form.is_draft():
561
                continue
562
            formdata_dict = get_formdata_dict(form, user)
585
                if not include_drafts:
586
                    continue
587
                if form.formdef.is_disabled() or not form.formdef.enable_tracking_codes:
588
                    # the form or its draft support has been disabled
589
                    continue
590
                formdata_dict = get_draft_formdata_dict(form, user)
591
            else:
592
                formdata_dict = get_formdata_dict(form, user)
563 593
            if not formdata_dict:
564 594
                # skip hidden forms
565 595
                continue
566
-