[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:
@@ -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
|
||||
|
||||
@@ -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;")
|
||||
|
||||
@@ -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)
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user