backoffice: remove support for .xls export (#8230)
This commit is contained in:
parent
c9753cbf34
commit
5890fcd9c6
|
@ -10,7 +10,7 @@ X-Python-Version: 2.7
|
|||
Package: wcs
|
||||
Architecture: all
|
||||
Depends: ${python:Depends}, python-quixote, python-scgi, graphviz, python-feedparser
|
||||
Recommends: python-dns, python-m2crypto, python-xlwt, python-qrcode, libjs-leaflet
|
||||
Recommends: python-dns, python-m2crypto, python-qrcode, libjs-leaflet
|
||||
Suggests: libapache2-mod-scgi | libapache-mod-scgi, python-libxml2, python-lasso, python-psycopg2
|
||||
Description: web application to design and set up online forms
|
||||
w.c.s. is a web application which allows to design and set up online forms.
|
||||
|
|
|
@ -20,11 +20,6 @@ import datetime
|
|||
import json
|
||||
import time
|
||||
|
||||
try:
|
||||
import xlwt
|
||||
except ImportError:
|
||||
xlwt = None
|
||||
|
||||
from quixote import get_session, get_publisher, get_request, get_response, redirect
|
||||
from quixote.directory import Directory
|
||||
from quixote.html import TemplateIO, htmltext
|
||||
|
@ -375,9 +370,6 @@ class FormPage(Directory):
|
|||
qs, _('Export a Spreadsheet'))
|
||||
r += htmltext(' <li><a data-base-href="csv" href="csv%s">%s</a></li>') % (
|
||||
qs, _('Export as CSV File'))
|
||||
if xlwt:
|
||||
r += htmltext('<li><a data-base-href="xls" href="xls%s">%s</a></li>') % (
|
||||
qs, _('Excel Export'))
|
||||
r += htmltext(' <li><a href="stats">%s</a></li>') % _('Statistics')
|
||||
r += htmltext('</ul>')
|
||||
return r.getvalue()
|
||||
|
@ -824,67 +816,6 @@ class FormPage(Directory):
|
|||
'attachment; filename=%s' % job.file_name)
|
||||
return job.file_content
|
||||
|
||||
def xls(self):
|
||||
if xlwt is None:
|
||||
raise errors.TraversalError()
|
||||
|
||||
fields = self.get_fields_from_query()
|
||||
selected_filter = self.get_filter_from_query()
|
||||
user = get_request().user
|
||||
query = get_request().form.get('q')
|
||||
|
||||
class Exporter(object):
|
||||
def __init__(self, formpage, formdef, fields, selected_filter):
|
||||
self.formpage = formpage
|
||||
self.formdef = formdef
|
||||
self.fields = fields
|
||||
self.selected_filter = selected_filter
|
||||
|
||||
def export(self, job=None):
|
||||
w = xlwt.Workbook(encoding=get_publisher().site_charset)
|
||||
ws = w.add_sheet('1')
|
||||
|
||||
for i, f in enumerate(self.formpage.csv_tuple_heading(self.fields)):
|
||||
ws.write(0, i, f)
|
||||
|
||||
items, total_count = FormDefUI(self.formdef).get_listing_items(
|
||||
self.selected_filter, user=user, query=query)
|
||||
|
||||
for i, filled in enumerate(items):
|
||||
for j, elem in enumerate(self.formpage.csv_tuple(fields, filled)):
|
||||
if elem and len(elem) > 32767:
|
||||
# xls cells have a limit of 32767 characters, cut
|
||||
# it down.
|
||||
elem = elem[:32760] + ' [...]'
|
||||
ws.write(i+1, j, elem)
|
||||
|
||||
self.output = cStringIO.StringIO()
|
||||
w.save(self.output)
|
||||
|
||||
if job:
|
||||
job.file_content = self.output.getvalue()
|
||||
job.content_type = 'application/vnd.ms-excel'
|
||||
job.store()
|
||||
|
||||
get_logger().info('backoffice - form %s - as excel' % self.formdef.name)
|
||||
|
||||
count = self.formdef.data_class().count()
|
||||
exporter = Exporter(self, self.formdef, fields, selected_filter)
|
||||
if count > 100: # Arbitrary threshold
|
||||
job = get_response().add_after_job(
|
||||
str(N_('Exporting forms in Excel format')),
|
||||
exporter.export)
|
||||
job.file_name = '%s.xls' % self.formdef.url_name
|
||||
job.store()
|
||||
return redirect('export?job=%s' % job.id)
|
||||
else:
|
||||
exporter.export()
|
||||
|
||||
response = get_response()
|
||||
response.set_content_type('application/vnd.ms-excel')
|
||||
response.set_header('content-disposition', 'attachment; filename=%s.xls' % self.formdef.url_name)
|
||||
return exporter.output.getvalue()
|
||||
|
||||
def ods(self):
|
||||
fields = self.get_fields_from_query()
|
||||
selected_filter = self.get_filter_from_query()
|
||||
|
|
Loading…
Reference in New Issue