0001-api-add-possibility-to-get-drafts-from-api-user-form.patch
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 |
- |