json: export content of uploads (#7254)
This commit is contained in:
parent
08e2d240b9
commit
2255337a50
|
@ -858,7 +858,7 @@ class FormPage(Directory):
|
||||||
selected_filter, user=user, query=query, criterias=criterias,
|
selected_filter, user=user, query=query, criterias=criterias,
|
||||||
order_by=order_by)
|
order_by=order_by)
|
||||||
if get_request().form.get('full') == 'on':
|
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:
|
else:
|
||||||
output = [{'id': filled.id,
|
output = [{'id': filled.id,
|
||||||
'url': filled.get_url(),
|
'url': filled.get_url(),
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
import time
|
import time
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
import base64
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
from quixote import get_request, get_publisher
|
from quixote import get_request, get_publisher
|
||||||
|
@ -708,7 +709,12 @@ class FileField(WidgetField):
|
||||||
return ['%s' % value]
|
return ['%s' % value]
|
||||||
|
|
||||||
def get_json_value(self, 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):
|
def perform_more_widget_changes(self, form, kwargs, edit = True):
|
||||||
if not edit:
|
if not edit:
|
||||||
|
|
|
@ -28,6 +28,7 @@ import qommon.misc
|
||||||
from qommon.substitution import Substitutions
|
from qommon.substitution import Substitutions
|
||||||
|
|
||||||
from roles import Role
|
from roles import Role
|
||||||
|
from fields import FileField
|
||||||
|
|
||||||
|
|
||||||
def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False):
|
def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False):
|
||||||
|
@ -87,11 +88,13 @@ def flatten_dict(d):
|
||||||
del d[k]
|
del d[k]
|
||||||
|
|
||||||
|
|
||||||
def get_json_dict(fields, data):
|
def get_json_dict(fields, data, include_files=True):
|
||||||
new_data = {}
|
new_data = {}
|
||||||
for field in fields:
|
for field in fields:
|
||||||
if not field.varname: # exports only named fields
|
if not field.varname: # exports only named fields
|
||||||
continue
|
continue
|
||||||
|
if not include_files and isinstance(field, FileField):
|
||||||
|
continue
|
||||||
if data is not None:
|
if data is not None:
|
||||||
value = data.get(field.id)
|
value = data.get(field.id)
|
||||||
if value and hasattr(field, 'get_json_value'):
|
if value and hasattr(field, 'get_json_value'):
|
||||||
|
@ -527,7 +530,7 @@ class FormData(StorableObject):
|
||||||
evo.parts = None
|
evo.parts = None
|
||||||
self.store()
|
self.store()
|
||||||
|
|
||||||
def export_to_json(self):
|
def export_to_json(self, include_files=True):
|
||||||
data = {}
|
data = {}
|
||||||
data['id'] = '%s/%s' % (self.formdef.url_name, self.id)
|
data['id'] = '%s/%s' % (self.formdef.url_name, self.id)
|
||||||
data['display_id'] = self.get_display_id()
|
data['display_id'] = self.get_display_id()
|
||||||
|
@ -553,7 +556,8 @@ class FormData(StorableObject):
|
||||||
if user:
|
if user:
|
||||||
data['user'] = {'id': user.id, 'name': user.display_name}
|
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'] = {}
|
data['workflow'] = {}
|
||||||
wf_status = self.get_visible_status()
|
wf_status = self.get_visible_status()
|
||||||
|
|
Loading…
Reference in New Issue