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