Projet

Général

Profil

0001-json-export-content-of-uploads-7254.patch

Thomas Noël, 15 mai 2015 16:29

Télécharger (3,36 ko)

Voir les différences:

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(-)
wcs/backoffice/management.py
855 855
            selected_filter, user=user, query=query, criterias=criterias,
856 856
            order_by=order_by)
857 857
        if get_request().form.get('full') == 'on':
858
            output = [json.loads(filled.export_to_json()) for filled in items]
858
            output = [json.loads(filled.export_to_json(include_files=False)) for filled in items]
859 859
        else:
860 860
            output = [{'id': filled.id,
861 861
                'url': filled.get_url(),
wcs/fields.py
17 17
import time
18 18
import random
19 19
import re
20
import base64
20 21
import xml.etree.ElementTree as ET
21 22

  
22 23
from quixote import get_request, get_publisher
......
707 708
        return ['%s' % value]
708 709

  
709 710
    def get_json_value(self, value):
710
        return {'field_id': self.id, 'filename': value.base_filename}
711
        return {
712
            'field_id': self.id,
713
            'filename': value.base_filename,
714
            'content_type': value.content_type or 'application/octet-stream',
715
            'content': base64.b64encode(value.get_file_pointer().read())
716
        }
711 717

  
712 718
    def perform_more_widget_changes(self, form, kwargs, edit = True):
713 719
        if not edit:
wcs/formdata.py
28 28
from qommon.substitution import Substitutions
29 29

  
30 30
from roles import Role
31
from fields import FileField
31 32

  
32 33

  
33 34
def get_dict_with_varnames(fields, data, formdata=None):
......
74 75
            del d[k]
75 76

  
76 77

  
77
def get_json_dict(fields, data):
78
def get_json_dict(fields, data, include_files=True):
78 79
    new_data = {}
79 80
    for field in fields:
80 81
        if not field.varname: # exports only named fields
81 82
            continue
83
        if not include_files and isinstance(field, FileField):
84
            continue
82 85
        if data is not None:
83 86
            value = data.get(field.id)
84 87
            if value and hasattr(field, 'get_json_value'):
......
514 517
                evo.parts = None
515 518
        self.store()
516 519

  
517
    def export_to_json(self):
520
    def export_to_json(self, include_files=True):
518 521
        data = {}
519 522
        data['id'] = '%s/%s' % (self.formdef.url_name, self.id)
520 523
        data['display_id'] = self.get_display_id()
......
540 543
        if user:
541 544
            data['user'] = {'id': user.id, 'name': user.display_name}
542 545

  
543
        data['fields'] = get_json_dict(self.formdef.fields, self.data)
546
        data['fields'] = get_json_dict(self.formdef.fields, self.data,
547
                include_files=include_files)
544 548

  
545 549
        data['workflow'] = {}
546 550
        wf_status = self.get_visible_status()
547
-