[FIX] web: avoid report with invalid sheet name

This commit does not fix any bug in odoo/odoo but helps fixing #12788
Needed for odoo/enterprise#433
This commit is contained in:
Martin Trigaux
2016-08-19 15:28:27 +02:00
parent f571ba373a
commit 0122c05eff
3 changed files with 24 additions and 11 deletions
+1 -6
View File
@@ -25,11 +25,6 @@ import werkzeug.utils
import werkzeug.wrappers
from openerp.api import Environment
try:
import xlwt
except ImportError:
xlwt = None
import openerp
import openerp.modules.registry
from openerp.addons.base.ir.ir_qweb import AssetsBundle, QWebTemplateNotFound
@@ -37,7 +32,7 @@ from openerp.modules import get_resource_path
from openerp.tools import topological_sort
from openerp.tools.translate import _
from openerp.tools import ustr
from openerp.tools.misc import str2bool
from openerp.tools.misc import str2bool, xlwt
from openerp import http
from openerp.http import request, serialize_exception as _serialize_exception
from openerp.exceptions import AccessError
+2 -5
View File
@@ -1,13 +1,10 @@
from openerp import http
import json
from openerp.http import request, serialize_exception as _serialize_exception
from openerp.tools.misc import xlwt
from cStringIO import StringIO
from collections import deque
try:
import xlwt
except ImportError:
xlwt = None
class TableExporter(http.Controller):
@@ -21,7 +18,7 @@ class TableExporter(http.Controller):
jdata = json.loads(data)
nbr_measures = jdata['nbr_measures']
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet(jdata['title'][:30])
worksheet = workbook.add_sheet(jdata['title'])
header_bold = xlwt.easyxf("font: bold on; pattern: pattern solid, fore_colour gray25;")
header_plain = xlwt.easyxf("pattern: pattern solid, fore_colour gray25;")
bold = xlwt.easyxf("font: bold on;")
+21
View File
@@ -14,6 +14,7 @@ import subprocess
import logging
import os
import passlib.utils
import re
import socket
import sys
import threading
@@ -323,6 +324,26 @@ def topological_sort(elems):
return result
try:
import xlwt
# add some sanitizations to respect the excel sheet name restrictions
# as the sheet name is often translatable, can not control the input
class PatchedWorkbook(xlwt.Workbook):
def add_sheet(self, name):
# invalid Excel character: []:*?/\
name = re.sub(r'[\[\]:*?/\\]', '', name)
# maximum size is 31 characters
name = name[:31]
return super(PatchedWorkbook, self).add_sheet(name)
xlwt.Workbook = PatchedWorkbook
except ImportError:
xlwt = None
class UpdateableStr(local):
""" Class that stores an updateable string (used in wizards)
"""