From a24882db877c7ae88fdd3fd72aee4180cac598ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 20 Aug 2015 11:54:06 +0200 Subject: [PATCH 4/4] forms: add an _url variant to vars pointing to form worflow files (#8031) --- help/fr/wf-form.page | 6 ++++++ tests/test_form_pages.py | 10 +++++++--- wcs/formdata.py | 12 ++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/help/fr/wf-form.page b/help/fr/wf-form.page index ecbcc10..38feb7a 100644 --- a/help/fr/wf-form.page +++ b/help/fr/wf-form.page @@ -48,4 +48,10 @@ xref="misc-substvars">variables de substitution, sous la forme champ (par exemple : contact_interne_var_telephone).

+

+Pour les champs de type fichier, la variable contiendra le nom du fichier. +L'adresse du fichier sera présente dans la variable nommée +variable du formulaire_var_variable du champ_url. +

+ diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 92dc972..6f21db6 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -1078,6 +1078,10 @@ def test_formdata_form_file_download(pub): formdata = formdef.data_class().select()[0] assert 'xxx_var_yyy_raw' in formdata.workflow_data - resp = resp.test_app.get(resp.location + 'files/form-xxx-yyy/test.txt') - assert resp.content_type == 'text/plain' - assert resp.body == 'foobar' + download = resp.test_app.get(resp.location + 'files/form-xxx-yyy/test.txt') + assert download.content_type == 'text/plain' + assert download.body == 'foobar' + + # go back to the status page, this will exercise the substitution variables + # codepath. + resp = resp.follow() diff --git a/wcs/formdata.py b/wcs/formdata.py index 13c4297..700375a 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -17,6 +17,7 @@ import copy import datetime import json +import re import sys import time @@ -423,6 +424,17 @@ class FormData(StorableObject): if self.workflow_data: d.update(self.workflow_data) + # pass over uploaded files and attach an extra attribute with the + # url to the file. + for k, v in self.workflow_data.items(): + if isinstance(v, Upload): + try: + formvar, fieldvar = re.match('(.*)_var_(.*)_raw$', k).groups() + except AttributeError: + continue + d[k.rsplit('_', 1)[0] + '_url'] = '%sfiles/form-%s-%s/%s' % ( + d['form_url'], formvar, fieldvar, + self.workflow_data['%s_var_%s' % (formvar, fieldvar)]) d = copy.deepcopy(d) flatten_dict(d) -- 2.5.0