0001-add-new-version-to-api-user-form-API-fixes-13184.patch
help/fr/api-user.page | ||
---|---|---|
58 | 58 | |
59 | 59 |
<p> |
60 | 60 |
La liste des formulaires transmis par un utilisateur est accessible à l'URL |
61 |
<code>/api/user/forms</code>, elle reprend un ensemble minimal |
|
61 |
<code>/api/user/forms?api_version=1</code>, elle reprend un ensemble minimal
|
|
62 | 62 |
d'informations concernant chacun de ceux-ci. |
63 | 63 |
</p> |
64 | 64 |
<screen> |
65 | 65 |
<output style="prompt">$ </output><input>curl https://www.example.net/api/user/forms</input> |
66 |
<output>[ |
|
66 |
<output>{ |
|
67 |
"err": 0, |
|
68 |
"data": [ |
|
69 |
{ |
|
70 |
"category_id": "1", |
|
71 |
"category_name": "Divers", |
|
72 |
"datetime": "2014-03-28 15:36:52", |
|
73 |
"form_name": "Demande d'inscription", |
|
74 |
"form_slug": "demande-d-inscription", |
|
75 |
"form_number": "123", |
|
76 |
"form_number_raw": "123", |
|
77 |
"form_receipt_date": "28/03/2014", |
|
78 |
"form_receipt_time": "15:36", |
|
79 |
"form_status": "Nouveau", |
|
80 |
"form_status_is_endpoint": false, |
|
81 |
"form_uri": "demande-d-inscription/123/", |
|
82 |
"form_url": "http://www.example.net/demande-d-inscription/123/", |
|
83 |
"form_url_backoffice": "http://www.example.net/backoffice/demande-d-inscription/123/", |
|
84 |
"name": "Demande d'inscription", |
|
85 |
"status": "Nouveau", |
|
86 |
"title": "Demande d'inscription #123 (Nouveau)", |
|
87 |
"url": "http://www.example.net/demande-d-inscription/123/", |
|
88 |
}, |
|
89 |
{ |
|
90 |
"category_id": "2", |
|
91 |
"category_name": "Prise de rendez-vous", |
|
92 |
"datetime": "2014-03-17 10:39:52", |
|
93 |
"form_name": "Rendez-vous avec le service B", |
|
94 |
"form_slug": "rendez-vous-service-b", |
|
95 |
"form_number": "456", |
|
96 |
"form_number_raw": "456", |
|
97 |
"form_receipt_date": "17/03/2014", |
|
98 |
"form_receipt_time": "10:39", |
|
99 |
"form_status": "En cours", |
|
100 |
"form_status_is_endpoint": false, |
|
101 |
"form_uri": "rendez-vous-service-b/456/", |
|
102 |
"form_url": "http://www.example.net/rendez-vous-service-b/456/", |
|
103 |
"form_url_backoffice": "http://www.example.net/backoffice/rendez-vous-service-b/456/", |
|
104 |
"name": "Rendez-vous avec le service B"", |
|
105 |
"status": "Nouveau", |
|
106 |
"title": "Rendez-vous avec le service B #456 (En cours)", |
|
107 |
"url": "http://www.example.net/rendez-vous-service-b/456/", |
|
108 |
}, |
|
109 |
{ |
|
110 |
"category_id": "3", |
|
111 |
"category_name": "Modification de vos coordonn\u00e9es", |
|
112 |
"datetime": "2014-03-17 10:42:17", |
|
113 |
"form_name": "Changement d'adresse", |
|
114 |
"form_slug": "changement-d-adresse", |
|
115 |
"form_number": "424", |
|
116 |
"form_number_raw": "424", |
|
117 |
"form_receipt_date": "17/03/2014", |
|
118 |
"form_receipt_time": "10:42", |
|
119 |
"form_status": "Traitement de la demande termin\u00e9", |
|
120 |
"form_status_is_endpoint": true, |
|
121 |
"form_uri": "changement-d-adresse/424/", |
|
122 |
"form_url": "http://www.example.net/changement-d-adresse/424/", |
|
123 |
"form_url_backoffice": "http://www.example.net/backoffice/changement-d-adresse/424/", |
|
124 |
"name": "Changement d'adresse", |
|
125 |
"status": "Traitement de la demande termin\u00e9", |
|
126 |
"title": "Changement d'adresse #424 (Traitement de la demande termin\u00e9)", |
|
127 |
"url": "http://www.example.net/changement-d-adresse/424/", |
|
128 |
} |
|
129 |
] |
|
130 |
}</output></screen> |
|
131 | ||
132 |
<note> |
|
133 |
<p>Cette API a évoluée, l'ancien format est toujours disponible en enlevant le paramètre |
|
134 |
<code>?api_version=1</code>. |
|
135 |
</p> |
|
136 |
<screen><output>[ |
|
67 | 137 |
{ |
68 | 138 |
"category_id": "1", |
69 | 139 |
"category_name": "Divers", |
... | ... | |
125 | 195 |
"url": "http://www.example.net/changement-d-adresse/424/", |
126 | 196 |
} |
127 | 197 |
]</output></screen> |
198 |
</note> |
|
128 | 199 | |
129 | 200 |
<p> |
130 | 201 |
Il est possible de recevoir un ensemble plus complet de données en passant un |
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 |
- |