From 5e8373235438e306a6cbce1d5800a1b1e7a44043 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 15 Oct 2018 09:57:30 +0200 Subject: [PATCH 1/3] add json_attachment properties to LazyFormData (#27323) The following properties are added: - as_json_attachment : use export_to_json without include files - as_json_attachment_with_files : use export_to_json including files --- tests/test_workflows.py | 14 ++++++++++++++ wcs/variables.py | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/tests/test_workflows.py b/tests/test_workflows.py index 15d072ba..7df31ef5 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -1,3 +1,4 @@ +import json import datetime import os import pytest @@ -1211,6 +1212,19 @@ def test_email_attachments(pub, emails): assert emails.emails['foobar']['msg'].get_payload()[2].get_payload() == 'blah' assert len(emails.emails['foobar']['msg'].get_payload()) == 3 + emails.empty() + sendmail.attachments = ['form.as_json_attachment', 'form.as_json_attachment_with_files'] + sendmail.perform(formdata) + get_response().process_after_jobs() + assert emails.count() == 1 + assert emails.emails['foobar']['msg'].is_multipart() + assert emails.emails['foobar']['msg'].get_content_subtype() == 'mixed' + assert emails.emails['foobar']['msg'].get_payload(0).get_content_type() == 'text/html' + assert emails.emails['foobar']['msg'].get_payload(1).get_content_type() == 'application/json' + payload1 = emails.emails['foobar']['msg'].get_payload(1) + payload2 = emails.emails['foobar']['msg'].get_payload(2) + assert json.loads(formdata.export_to_json(include_files=False)) == json.loads(payload1.get_payload(decode=True)) + assert json.loads(formdata.export_to_json()) == json.loads(payload2.get_payload(decode=True)) def test_webservice_call(http_requests, pub): diff --git a/wcs/variables.py b/wcs/variables.py index 01384a86..84f07a5e 100644 --- a/wcs/variables.py +++ b/wcs/variables.py @@ -14,6 +14,8 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, see . +import base64 + from quixote import get_publisher import qommon.misc @@ -248,6 +250,22 @@ class LazyFormData(LazyFormDef): def evolution(self): return self.formdef.get_detailed_evolution(self.formdata) + def __to_json_attachment(self, include_files=False, anonymise=False): + return { + 'filename': 'form-%s.json' % self.formdata.id, + 'content_type': 'application/json', + 'b64_content': base64.b64encode(self.formdata.export_to_json( + include_files=include_files, anonymise=anonymise)), + } + + @property + def as_json_attachment(self): + return self.__to_json_attachment() + + @property + def as_json_attachment_with_files(self): + return self.__to_json_attachment(include_files=True) + def __getitem__(self, key): try: return getattr(self, key) -- 2.18.0