From 5fcb0e62878fb1ceba2ab5d4bbb79826b0e8666c Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 3 May 2016 23:54:11 +0200 Subject: [PATCH] export evolutions in form API (#10820) --- wcs/formdata.py | 32 +++++++++++++++++++++++++++----- wcs/users.py | 11 +++++++++++ wcs/wf/register_comment.py | 6 ++++++ wcs/wf/wscall.py | 8 ++++++++ 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/wcs/formdata.py b/wcs/formdata.py index b78143e..4f80a9d 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -150,6 +150,29 @@ class Evolution(object): l.append(p.view()) return l + def get_json_export_dict(self, user): + data = { + 'status': self.status, + 'time': self.time, + } + try: + if self.who != '_submitter': + user = get_publisher().user_class.get(self.who) + except KeyError: + pass + else: + if user: + data['who'] = user.get_json_export_dict() + if self.comment: + data['comment'] = self.comment + parts = [] + for part in self.parts or []: + if hasattr(part, 'get_json_export_dict'): + parts.append(part.get_json_export_dict()) + if parts: + data['parts'] = parts + return data + class FormData(StorableObject): _names = 'XX' @@ -699,11 +722,7 @@ class FormData(StorableObject): user = None break if user: - data['user'] = {'id': user.id, 'name': user.display_name} - if user.email: - data['user']['email'] = user.email - if user.name_identifiers: - data['user']['NameID'] = user.name_identifiers + data['user'] = user.get_json_export_dict() data['fields'] = get_json_dict(self.formdef.fields, self.data, include_files=include_files) @@ -742,6 +761,9 @@ class FormData(StorableObject): 'channel': self.get_submission_channel_label(), } + if self.evolution: + data['evolution'] = [evo.get_json_export_dict(user) for evo in self.evolution] + return data def export_to_json(self, include_files=True): diff --git a/wcs/users.py b/wcs/users.py index 8bb602d..9a14f60 100644 --- a/wcs/users.py +++ b/wcs/users.py @@ -188,6 +188,17 @@ class User(StorableObject): return self.__dict__['form_data'].get(attr[1:]) raise AttributeError() + def get_json_export_dict(self): + data = { + 'id': self.id, + 'name': self.display_name, + } + if self.email: + data['email'] = self.email + if self.name_identifiers: + data['NameID'] = self.name_identifiers + return data + Substitutions.register('session_user', category=N_('User'), comment=N_('Session User')) Substitutions.register('session_user_display_name', category=N_('User'), comment=N_('Session User Display Name')) diff --git a/wcs/wf/register_comment.py b/wcs/wf/register_comment.py index a7dd418..5d89cd5 100644 --- a/wcs/wf/register_comment.py +++ b/wcs/wf/register_comment.py @@ -51,6 +51,12 @@ class JournalEvolutionPart: #pylint: disable=C1001 [(x or htmltext('

')) for x in self.content.splitlines()]) + \ htmltext('

') + def get_json_export_dict(self): + return { + 'type': 'journal-evolution', + 'content': self.content, + } + class RegisterCommenterWorkflowStatusItem(WorkflowStatusItem): description = N_('Record in Log') diff --git a/wcs/wf/wscall.py b/wcs/wf/wscall.py index a35e53b..39771c2 100644 --- a/wcs/wf/wscall.py +++ b/wcs/wf/wscall.py @@ -79,6 +79,14 @@ class JournalWsCallErrorPart: #pylint: disable=C1001 r += htmltext('') return r.getvalue() + def get_json_export_dict(self): + return { + 'type': 'wscall-error', + 'summary': self.summary, + 'label': self.label, + 'data': self.data, + } + class WebserviceCallStatusItem(WorkflowStatusItem): description = N_('Webservice Call') -- 2.1.4