From 5c630c2d00cc4ff45ac5fe57dc0f9e3bab34e08d Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Fri, 15 May 2015 13:13:24 +0200 Subject: [PATCH] json: export content of uploads (#7254) --- wcs/backoffice/management.py | 2 +- wcs/fields.py | 8 +++++++- wcs/formdata.py | 10 +++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index 43beca4..a7261a5 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -855,7 +855,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 7fced45..4edffe5 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 @@ -707,7 +708,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 b066132..c9875e1 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): @@ -74,11 +75,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'): @@ -514,7 +517,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() @@ -540,7 +543,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() -- 2.1.4