diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index 9c0115c45..501b20d0f 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -858,7 +858,7 @@ class FormPage(Directory): selected_filter, user=user, query=query, criterias=criterias, order_by=order_by) if get_request().form.get('full') == 'on': - output = [json.loads(filled.export_to_json()) for filled in items] + output = [json.loads(filled.export_to_json(include_files=False)) for filled in items] else: output = [{'id': filled.id, 'url': filled.get_url(), diff --git a/wcs/fields.py b/wcs/fields.py index 51cc5b531..d6afcfc3e 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -17,6 +17,7 @@ import time import random import re +import base64 import xml.etree.ElementTree as ET from quixote import get_request, get_publisher @@ -708,7 +709,12 @@ class FileField(WidgetField): return ['%s' % value] def get_json_value(self, value): - return {'field_id': self.id, 'filename': value.base_filename} + return { + 'field_id': self.id, + 'filename': value.base_filename, + 'content_type': value.content_type or 'application/octet-stream', + 'content': base64.b64encode(value.get_file_pointer().read()) + } def perform_more_widget_changes(self, form, kwargs, edit = True): if not edit: diff --git a/wcs/formdata.py b/wcs/formdata.py index 70c21f20b..13c42972e 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -28,6 +28,7 @@ import qommon.misc from qommon.substitution import Substitutions from roles import Role +from fields import FileField def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False): @@ -87,11 +88,13 @@ def flatten_dict(d): del d[k] -def get_json_dict(fields, data): +def get_json_dict(fields, data, include_files=True): new_data = {} for field in fields: if not field.varname: # exports only named fields continue + if not include_files and isinstance(field, FileField): + continue if data is not None: value = data.get(field.id) if value and hasattr(field, 'get_json_value'): @@ -527,7 +530,7 @@ class FormData(StorableObject): evo.parts = None self.store() - def export_to_json(self): + def export_to_json(self, include_files=True): data = {} data['id'] = '%s/%s' % (self.formdef.url_name, self.id) data['display_id'] = self.get_display_id() @@ -553,7 +556,8 @@ class FormData(StorableObject): if user: data['user'] = {'id': user.id, 'name': user.display_name} - data['fields'] = get_json_dict(self.formdef.fields, self.data) + data['fields'] = get_json_dict(self.formdef.fields, self.data, + include_files=include_files) data['workflow'] = {} wf_status = self.get_visible_status()