Forms unable to handle accented characters

Bug #609153 reported by Bastien
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Odoo Server (MOVED TO GITHUB)
Invalid
Medium
Unassigned
Odoo Web Client
Fix Released
Undecided
Chirag Patel (OpenERP)

Bug Description

Openerp6 craches when there is accents in french translation; when trying to go in administration>Séquence>Séquence for exemple

<type 'exceptions.UnicodeEncodeError'> Python 2.6.5: /usr/bin/python
Fri Jul 23 15:51:27 2010

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
 /usr/local/lib/python2.6/dist-packages/CherryPy-3.1.2-py2.6.egg/cherrypy/_cprequest.py in respond(self=<cherrypy._cprequest.Request object>, path_info='/openerp/tree/open')
  604 if self.handler:
  605 self.stage = 'handler'
  606 cherrypy.response.body = self.handler()
  607
  608 self.stage = 'before_finalize'
global cherrypy = <module 'cherrypy' from '/usr/local/lib/python2..../CherryPy-3.1.2-py2.6.egg/cherrypy/__init__.pyc'>, cherrypy.response = <cherrypy._ThreadLocalProxy object>, cherrypy.response.body = [], self = <cherrypy._cprequest.Request object>, self.handler = <cherrypy._cpdispatch.LateParamPageHandler object>
 /usr/local/lib/python2.6/dist-packages/CherryPy-3.1.2-py2.6.egg/cherrypy/_cpdispatch.py in __call__(self=<cherrypy._cpdispatch.LateParamPageHandler object>)
   23 def __call__(self):
   24 try:
   25 return self.callable(*self.args, **self.kwargs)
   26 except TypeError, x:
   27 test_callable_spec(self.callable, self.args, self.kwargs)
self = <cherrypy._cpdispatch.LateParamPageHandler object>, self.callable = <bound method Root.default of <openobject.controllers._root.Root object>>, self.args = ('openerp', 'tree', 'open'), self.kwargs = {'id': '22', 'model': 'ir.ui.menu'}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/openobject/tools/_expose.py in func_wrapper(*args=(<openobject.controllers._root.Root object>, 'openerp', 'tree', 'open'), **kw={'id': '22', 'model': 'ir.ui.menu'})
  200 def func_wrapper(*args, **kw):
  201
  202 res = func(*args, **kw)
  203
  204 if format == 'json' or (allow_json and 'allow_json' in cherrypy.request.params):
global res = '/usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/config/openobject-web.cfg', func = <function default>, args = (<openobject.controllers._root.Root object>, 'openerp', 'tree', 'open'), kw = {'id': '22', 'model': 'ir.ui.menu'}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/openobject/controllers/_root.py in default(self=<openobject.controllers._root.Root object>, *args=('openerp', 'tree', 'open'), **kw={'id': '22', 'model': 'ir.ui.menu'})
   35 request.handler = cherrypy.NotFound()
   36
   37 return request.handler()
   38
   39 def find_handler(self):
request = <cherrypy._ThreadLocalProxy object>, request.handler = <cherrypy._cpdispatch.LateParamPageHandler object>
 /usr/local/lib/python2.6/dist-packages/CherryPy-3.1.2-py2.6.egg/cherrypy/_cpdispatch.py in __call__(self=<cherrypy._cpdispatch.LateParamPageHandler object>)
   23 def __call__(self):
   24 try:
   25 return self.callable(*self.args, **self.kwargs)
   26 except TypeError, x:
   27 test_callable_spec(self.callable, self.args, self.kwargs)
self = <cherrypy._cpdispatch.LateParamPageHandler object>, self.callable = <function open>, self.args = (), self.kwargs = {'id': '22', 'model': 'ir.ui.menu'}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/utils.py in wrapper(*args=(), **kw={'id': '22', 'model': 'ir.ui.menu'})
  122 # User is logged in; allow access
  123 clear_login_fields(kw)
  124 return fn(*args, **kw)
  125 else:
  126 # User isn't logged in yet.
fn = <bound method Tree.open of <openerp.controllers.tree.Tree object>>, args = (), kw = {'id': '22', 'model': 'ir.ui.menu'}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/openobject/tools/_expose.py in func_wrapper(*args=(<openerp.controllers.tree.Tree object>,), **kw={'id': '22', 'model': 'ir.ui.menu'})
  200 def func_wrapper(*args, **kw):
  201
  202 res = func(*args, **kw)
  203
  204 if format == 'json' or (allow_json and 'allow_json' in cherrypy.request.params):
global res = '/usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/config/openobject-web.cfg', func = <function open>, args = (<openerp.controllers.tree.Tree object>,), kw = {'id': '22', 'model': 'ir.ui.menu'}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/tree.py in open(self=<openerp.controllers.tree.Tree object>, **kw={'id': '22', 'model': 'ir.ui.menu'})
  261 return self.do_action('tree_but_open', datas={
  262 '_terp_model': kw.get('model'),
  263 '_terp_context': kw.get('context', {}),
  264 '_terp_domain': kw.get('domain', []),
  265 'ids': kw.get('id')})
kw = {'id': '22', 'model': 'ir.ui.menu'}, kw.get = <built-in method get of dict object>
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/tree.py in do_action(self=<openerp.controllers.tree.Tree object>, name='tree_but_open', adds={}, datas={'_terp_context': {}, '_terp_domain': [], '_terp_model': 'ir.ui.menu', 'ids': '22'})
  222 return actions.execute_by_keyword(
  223 name, adds=adds, model=model, id=id, ids=ids, context=ctx,
  224 report_type='pdf')
  225 else:
  226 raise common.message(_("No record selected!"))
report_type undefined
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/actions.py in execute_by_keyword(keyword='tree_but_open', adds={}, **data={'context': {'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, 'id': 22, 'ids': [22], 'model': 'ir.ui.menu', 'report_type': 'pdf'})
  383 if len(keyact) == 1:
  384 data['context'].update(rpc.session.context)
  385 return execute(action, **data)
  386 else:
  387 return Selection().create(keyact, **data)
global execute = <function execute>, action = {'auto_refresh': 0, 'auto_search': True, 'context': u"{'active_test': False}", 'default_user_ids': [], 'display_help': True, 'domain': '[]', 'filter': False, 'groups_id': [], 'help': False, 'id': 8, ...}, data = {'context': {'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, 'id': 22, 'ids': [22], 'model': 'ir.ui.menu', 'report_type': 'pdf'}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/actions.py in execute(action={'auto_refresh': 0, 'auto_search': True, 'context': u"{'active_test': False}", 'default_user_ids': [], 'display_help': True, 'domain': '[]', 'filter': False, 'groups_id': [], 'help': False, 'id': 8, ...}, **data={'context': {'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, 'id': 22, 'ids': [22], 'limit': 80, 'model': 'ir.ui.menu', 'report_type': 'pdf', 'res_id': None, 'res_model': u'ir.sequence', 'search_view': u'{\'name\': u\'ir.sequence.form\', \'type\': u\'form\', \'...ode" select="1"/></form>\', \'field_parent\': False}', 'view_mode': u'tree,form', ...})
  262 target=action.get('target'),
  263 limit=data.get('limit'),
  264 search_view = data['search_view'])
  265
  266 return res
search_view = False, data = {'context': {'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, 'id': 22, 'ids': [22], 'limit': 80, 'model': 'ir.ui.menu', 'report_type': 'pdf', 'res_id': None, 'res_model': u'ir.sequence', 'search_view': u'{\'name\': u\'ir.sequence.form\', \'type\': u\'form\', \'...ode" select="1"/></form>\', \'field_parent\': False}', 'view_mode': u'tree,form', ...}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/actions.py in execute_window(view_ids=[19, False], model=u'ir.sequence', res_id=None, domain=[], view_type=u'form', context={'_terp_view_name': u'S\xe9quences', 'active_id': 22, 'active_ids': [22], 'active_model': 'ir.ui.menu', 'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, mode=[u'tree', u'form'], name=u'S\xe9quences', target=u'current', limit=80, search_view=u'{\'name\': u\'ir.sequence.form\', \'type\': u\'form\', \'...ode" select="1"/></form>\', \'field_parent\': False}')
   84 params.view_mode=mode
   85
   86 return Form().create(params)
   87
   88 elif view_type == 'tree':
global Form = <class 'openerp.controllers.form.Form'>, ).create = <unbound method Form.create>, params = {'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/utils.py in wrapper(*args=({'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]},), **kw={})
  122 # User is logged in; allow access
  123 clear_login_fields(kw)
  124 return fn(*args, **kw)
  125 else:
  126 # User isn't logged in yet.
fn = <bound method Form.create of <openerp.controllers.form.Form object>>, args = ({'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]},), kw = {}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/openobject/tools/_expose.py in func_wrapper(*args=(<openerp.controllers.form.Form object>, {'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}), **kw={})
  200 def func_wrapper(*args, **kw):
  201
  202 res = func(*args, **kw)
  203
  204 if format == 'json' or (allow_json and 'allow_json' in cherrypy.request.params):
global res = '/usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/config/openobject-web.cfg', func = <function create>, args = (<openerp.controllers.form.Form object>, {'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}), kw = {}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/form.py in create(self=<openerp.controllers.form.Form object>, params={'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}, tg_errors=None)
  200 if params.view_type == 'tree':
  201 params.editable = True
  202 form = self.create_form(params, tg_errors)
  203
  204 if not tg_errors:
form undefined, self = <openerp.controllers.form.Form object>, self.create_form = <bound method Form.create_form of <openerp.controllers.form.Form object>>, params = {'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}, tg_errors = None
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/controllers/form.py in create_form(self=<openerp.controllers.form.Form object>, params={'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}, tg_errors=None)
  191 params.view_type = params.view_type or params.view_mode[0]
  192
  193 return tw.form_view.ViewForm(params, name="view_form", action="/openerp/form/save")
  194
  195 @expose(template="templates/form.mako")
global tw = <module 'openerp.widgets' from '/usr/local/lib/p...ev-py2.6.egg/addons/openerp/widgets/__init__.py'>, tw.form_view = <module 'openerp.widgets.form_view' from '/usr/l...v-py2.6.egg/addons/openerp/widgets/form_view.py'>, tw.form_view.ViewForm = <class 'openerp.widgets.form_view.ViewForm'>, params = {'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}, name undefined, action undefined
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/openobject/widgets/_meta.py in wrapper(self=ViewForm, *args=({'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]},), **kw={'action': '/openerp/form/save', 'name': 'view_form'})
   38 self.__initstack.append(1)
   39
   40 res = func(self, *args, **kw)
   41 try:
   42 self.__initstack.pop()
res undefined, func = <function __init__>, self = ViewForm, args = ({'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]},), kw = {'action': '/openerp/form/save', 'name': 'view_form'}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/widgets/form_view.py in __init__(self=ViewForm, params={'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}, **kw={'action': '/openerp/form/save', 'name': 'view_form'})
   89 if params.view_type in ('tree', 'graph'):
   90 self.search = Search(model=params.model, domain=search_param, context=params.context, values=params.search_data or {},
   91 filter_domain=params.filter_domain or [], search_view=params.search_view, group_by_ctx=params.group_by_ctx or [])
   92
   93 cherrypy.request.custom_search_domain = self.search.listof_domain or []
filter_domain undefined, params = {'_terp_view_type': u'tree', '_terp_offset': 0, ...tment_id': False}, '_terp_view_ids': [19, False]}, params.filter_domain = None, search_view undefined, params.search_view = {'arch': u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', 'field_parent': False, 'fields': {'active': {'selectable': True, 'string': u'Actif', 'type': 'boolean'}, 'code': {'required': True, 'selectable': True, 'selection': [(u'account.invoice.out_invoice', u'Account Invoice Out'), (u'account.invoice.in_invoice', u'Account Invoice In'), (u'account.invoice.out_refund', u'Account Refund Out'), (u'account.invoice.in_refund', u'Account Refund In'), (u'account.analytic.account', u'Analytic account'), (u'account.journal', u'Account Journal'), (u'account.reconcile', u'Account reconcile sequence'), (u'account.bank.statement', u'Bank Statement'), (u'saj', u'Sales Journal - (test)'), (u'scnj', u'Sales Credit Note Journal - (test)'), (u'exj', u'Expenses Journal - (test)'), (u'ecnj', u'Expenses Credit Notes Journal - (test)'), (u'bnk', u'Bank Journal - (test)'), (u'chk', u'Checks Journal - (test)')], 'size': 64, 'string': u'Code de la s\xe9quence', 'type': 'selection'}, 'company_id': {'context': {}, 'domain': [], 'relation': 'res.company', 'selectable': True, 'string': u'Soci\xe9t\xe9', 'type': 'many2one'}, 'fiscal_ids': {'context': {}, 'domain': [], 'relation': 'account.sequence.fiscalyear', 'selectable': True, 'string': u'S\xe9quences', 'type': 'one2many'}, 'name': {'required': True, 'selectable': True, 'size': 64, 'string': u'Nom de la s\xe9quence', 'type': 'char'}, 'number_increment': {'required': True, 'selectable': True, 'string': u'Incr\xe9menter le Num\xe9ro', 'type': 'integer'}, 'number_next': {'required': True, 'selectable': True, 'string': u'Num\xe9ro suivant', 'type': 'integer'}, 'padding': {'help': "OpenERP will automatically adds some '0' on the ...e 'Next Number' to get the required padding size.", 'required': True, 'selectable': True, 'string': u'Remplissage', 'type': 'integer'}, 'prefix': {'selectable': True, 'size': 64, 'string': u'Pr\xe9fixe', 'type': 'char'}, 'suffix': {'selectable': True, 'size': 64, 'string': u'Suffixe', 'type': 'char'}}, 'model': 'ir.sequence', 'name': u'ir.sequence.form', 'type': u'form', 'view_id': 18}, group_by_ctx undefined, params.group_by_ctx = None
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/openobject/widgets/_meta.py in wrapper(self=Search, *args=(), **kw={'context': {'_terp_view_name': u'S\xe9quences', 'active_id': 22, 'active_ids': [22], 'active_model': 'ir.ui.menu', 'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, 'domain': [], 'filter_domain': [], 'group_by_ctx': [], 'model': u'ir.sequence', 'search_view': {'arch': u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', 'field_parent': False, 'fields': {'active': {'selectable': True, 'string': u'Actif', 'type': 'boolean'}, 'code': {'required': True, 'selectable': True, 'selection': [(u'account.invoice.out_invoice', u'Account Invoice Out'), (u'account.invoice.in_invoice', u'Account Invoice In'), (u'account.invoice.out_refund', u'Account Refund Out'), (u'account.invoice.in_refund', u'Account Refund In'), (u'account.analytic.account', u'Analytic account'), (u'account.journal', u'Account Journal'), (u'account.reconcile', u'Account reconcile sequence'), (u'account.bank.statement', u'Bank Statement'), (u'saj', u'Sales Journal - (test)'), (u'scnj', u'Sales Credit Note Journal - (test)'), (u'exj', u'Expenses Journal - (test)'), (u'ecnj', u'Expenses Credit Notes Journal - (test)'), (u'bnk', u'Bank Journal - (test)'), (u'chk', u'Checks Journal - (test)')], 'size': 64, 'string': u'Code de la s\xe9quence', 'type': 'selection'}, 'company_id': {'context': {}, 'domain': [], 'relation': 'res.company', 'selectable': True, 'string': u'Soci\xe9t\xe9', 'type': 'many2one'}, 'fiscal_ids': {'context': {}, 'domain': [], 'relation': 'account.sequence.fiscalyear', 'selectable': True, 'string': u'S\xe9quences', 'type': 'one2many'}, 'name': {'required': True, 'selectable': True, 'size': 64, 'string': u'Nom de la s\xe9quence', 'type': 'char'}, 'number_increment': {'required': True, 'selectable': True, 'string': u'Incr\xe9menter le Num\xe9ro', 'type': 'integer'}, 'number_next': {'required': True, 'selectable': True, 'string': u'Num\xe9ro suivant', 'type': 'integer'}, 'padding': {'help': "OpenERP will automatically adds some '0' on the ...e 'Next Number' to get the required padding size.", 'required': True, 'selectable': True, 'string': u'Remplissage', 'type': 'integer'}, 'prefix': {'selectable': True, 'size': 64, 'string': u'Pr\xe9fixe', 'type': 'char'}, 'suffix': {'selectable': True, 'size': 64, 'string': u'Suffixe', 'type': 'char'}}, 'model': 'ir.sequence', 'name': u'ir.sequence.form', 'type': u'form', 'view_id': 18}, 'values': {}})
   38 self.__initstack.append(1)
   39
   40 res = func(self, *args, **kw)
   41 try:
   42 self.__initstack.pop()
res undefined, func = <function __init__>, self = Search, args = (), kw = {'context': {'_terp_view_name': u'S\xe9quences', 'active_id': 22, 'active_ids': [22], 'active_model': 'ir.ui.menu', 'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, 'domain': [], 'filter_domain': [], 'group_by_ctx': [], 'model': u'ir.sequence', 'search_view': {'arch': u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', 'field_parent': False, 'fields': {'active': {'selectable': True, 'string': u'Actif', 'type': 'boolean'}, 'code': {'required': True, 'selectable': True, 'selection': [(u'account.invoice.out_invoice', u'Account Invoice Out'), (u'account.invoice.in_invoice', u'Account Invoice In'), (u'account.invoice.out_refund', u'Account Refund Out'), (u'account.invoice.in_refund', u'Account Refund In'), (u'account.analytic.account', u'Analytic account'), (u'account.journal', u'Account Journal'), (u'account.reconcile', u'Account reconcile sequence'), (u'account.bank.statement', u'Bank Statement'), (u'saj', u'Sales Journal - (test)'), (u'scnj', u'Sales Credit Note Journal - (test)'), (u'exj', u'Expenses Journal - (test)'), (u'ecnj', u'Expenses Credit Notes Journal - (test)'), (u'bnk', u'Bank Journal - (test)'), (u'chk', u'Checks Journal - (test)')], 'size': 64, 'string': u'Code de la s\xe9quence', 'type': 'selection'}, 'company_id': {'context': {}, 'domain': [], 'relation': 'res.company', 'selectable': True, 'string': u'Soci\xe9t\xe9', 'type': 'many2one'}, 'fiscal_ids': {'context': {}, 'domain': [], 'relation': 'account.sequence.fiscalyear', 'selectable': True, 'string': u'S\xe9quences', 'type': 'one2many'}, 'name': {'required': True, 'selectable': True, 'size': 64, 'string': u'Nom de la s\xe9quence', 'type': 'char'}, 'number_increment': {'required': True, 'selectable': True, 'string': u'Incr\xe9menter le Num\xe9ro', 'type': 'integer'}, 'number_next': {'required': True, 'selectable': True, 'string': u'Num\xe9ro suivant', 'type': 'integer'}, 'padding': {'help': "OpenERP will automatically adds some '0' on the ...e 'Next Number' to get the required padding size.", 'required': True, 'selectable': True, 'string': u'Remplissage', 'type': 'integer'}, 'prefix': {'selectable': True, 'size': 64, 'string': u'Pr\xe9fixe', 'type': 'char'}, 'suffix': {'selectable': True, 'size': 64, 'string': u'Suffixe', 'type': 'char'}}, 'model': 'ir.sequence', 'name': u'ir.sequence.form', 'type': u'form', 'view_id': 18}, 'values': {}}
 /usr/local/lib/python2.6/dist-packages/openobject_web-5.2dev-py2.6.egg/addons/openerp/widgets/search.py in __init__(self=Search, model=u'ir.sequence', domain=[], context={'_terp_view_name': u'S\xe9quences', 'active_id': 22, 'active_ids': [22], 'active_model': 'ir.ui.menu', 'active_test': False, 'client': 'web', 'department_id': False, 'lang': u'fr_FR', 'tz': False}, values={}, filter_domain=[], search_view={'arch': u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', 'field_parent': False, 'fields': {'active': {'selectable': True, 'string': u'Actif', 'type': 'boolean'}, 'code': {'required': True, 'selectable': True, 'selection': [(u'account.invoice.out_invoice', u'Account Invoice Out'), (u'account.invoice.in_invoice', u'Account Invoice In'), (u'account.invoice.out_refund', u'Account Refund Out'), (u'account.invoice.in_refund', u'Account Refund In'), (u'account.analytic.account', u'Analytic account'), (u'account.journal', u'Account Journal'), (u'account.reconcile', u'Account reconcile sequence'), (u'account.bank.statement', u'Bank Statement'), (u'saj', u'Sales Journal - (test)'), (u'scnj', u'Sales Credit Note Journal - (test)'), (u'exj', u'Expenses Journal - (test)'), (u'ecnj', u'Expenses Credit Notes Journal - (test)'), (u'bnk', u'Bank Journal - (test)'), (u'chk', u'Checks Journal - (test)')], 'size': 64, 'string': u'Code de la s\xe9quence', 'type': 'selection'}, 'company_id': {'context': {}, 'domain': [], 'relation': 'res.company', 'selectable': True, 'string': u'Soci\xe9t\xe9', 'type': 'many2one'}, 'fiscal_ids': {'context': {}, 'domain': [], 'relation': 'account.sequence.fiscalyear', 'selectable': True, 'string': u'S\xe9quences', 'type': 'one2many'}, 'name': {'required': True, 'selectable': True, 'size': 64, 'string': u'Nom de la s\xe9quence', 'type': 'char'}, 'number_increment': {'required': True, 'selectable': True, 'string': u'Incr\xe9menter le Num\xe9ro', 'type': 'integer'}, 'number_next': {'required': True, 'selectable': True, 'string': u'Num\xe9ro suivant', 'type': 'integer'}, 'padding': {'help': "OpenERP will automatically adds some '0' on the ...e 'Next Number' to get the required padding size.", 'required': True, 'selectable': True, 'string': u'Remplissage', 'type': 'integer'}, 'prefix': {'selectable': True, 'size': 64, 'string': u'Pr\xe9fixe', 'type': 'char'}, 'suffix': {'selectable': True, 'size': 64, 'string': u'Suffixe', 'type': 'char'}}, 'model': 'ir.sequence', 'name': u'ir.sequence.form', 'type': u'form', 'view_id': 18}, group_by_ctx=[])
  272 self.fields_list.sort(lambda x, y: cmp(x[1], y[1]))
  273
  274 dom = xml.dom.minidom.parseString(self.search_view['arch'])
  275 self.view_type = dom.firstChild.localName
  276 self.string = dom.documentElement.getAttribute('string')
dom undefined, global xml = <module 'xml' from '/usr/lib/python2.6/xml/__init__.pyc'>, xml.dom = <module 'xml.dom' from '/usr/lib/python2.6/xml/dom/__init__.pyc'>, xml.dom.minidom = <module 'xml.dom.minidom' from '/usr/lib/python2.6/xml/dom/minidom.pyc'>, xml.dom.minidom.parseString = <function parseString>, self = Search, self.search_view = {'arch': u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', 'field_parent': False, 'fields': {'active': {'selectable': True, 'string': u'Actif', 'type': 'boolean'}, 'code': {'required': True, 'selectable': True, 'selection': [(u'account.invoice.out_invoice', u'Account Invoice Out'), (u'account.invoice.in_invoice', u'Account Invoice In'), (u'account.invoice.out_refund', u'Account Refund Out'), (u'account.invoice.in_refund', u'Account Refund In'), (u'account.analytic.account', u'Analytic account'), (u'account.journal', u'Account Journal'), (u'account.reconcile', u'Account reconcile sequence'), (u'account.bank.statement', u'Bank Statement'), (u'saj', u'Sales Journal - (test)'), (u'scnj', u'Sales Credit Note Journal - (test)'), (u'exj', u'Expenses Journal - (test)'), (u'ecnj', u'Expenses Credit Notes Journal - (test)'), (u'bnk', u'Bank Journal - (test)'), (u'chk', u'Checks Journal - (test)')], 'size': 64, 'string': u'Code de la s\xe9quence', 'type': 'selection'}, 'company_id': {'context': {}, 'domain': [], 'relation': 'res.company', 'selectable': True, 'string': u'Soci\xe9t\xe9', 'type': 'many2one'}, 'fiscal_ids': {'context': {}, 'domain': [], 'relation': 'account.sequence.fiscalyear', 'selectable': True, 'string': u'S\xe9quences', 'type': 'one2many'}, 'name': {'required': True, 'selectable': True, 'size': 64, 'string': u'Nom de la s\xe9quence', 'type': 'char'}, 'number_increment': {'required': True, 'selectable': True, 'string': u'Incr\xe9menter le Num\xe9ro', 'type': 'integer'}, 'number_next': {'required': True, 'selectable': True, 'string': u'Num\xe9ro suivant', 'type': 'integer'}, 'padding': {'help': "OpenERP will automatically adds some '0' on the ...e 'Next Number' to get the required padding size.", 'required': True, 'selectable': True, 'string': u'Remplissage', 'type': 'integer'}, 'prefix': {'selectable': True, 'size': 64, 'string': u'Pr\xe9fixe', 'type': 'char'}, 'suffix': {'selectable': True, 'size': 64, 'string': u'Suffixe', 'type': 'char'}}, 'model': 'ir.sequence', 'name': u'ir.sequence.form', 'type': u'form', 'view_id': 18}
 /usr/lib/python2.6/xml/dom/minidom.py in parseString(string=u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', parser=None)
 1926 if parser is None:
 1927 from xml.dom import expatbuilder
 1928 return expatbuilder.parseString(string)
 1929 else:
 1930 from xml.dom import pulldom
expatbuilder = <module 'xml.dom.expatbuilder' from '/usr/lib/python2.6/xml/dom/expatbuilder.pyc'>, expatbuilder.parseString = <function parseString>, string = u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>'
 /usr/lib/python2.6/xml/dom/expatbuilder.py in parseString(string=u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', namespaces=True)
  938 else:
  939 builder = ExpatBuilder()
  940 return builder.parseString(string)
  941
  942
builder = <xml.dom.expatbuilder.ExpatBuilderNS instance>, builder.parseString = <bound method ExpatBuilderNS.parseString of <xml.dom.expatbuilder.ExpatBuilderNS instance>>, string = u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>'
 /usr/lib/python2.6/xml/dom/expatbuilder.py in parseString(self=<xml.dom.expatbuilder.ExpatBuilderNS instance>, string=u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>')
  221 parser = self.getParser()
  222 try:
  223 parser.Parse(string, True)
  224 self._setup_subset(string)
  225 except ParseEscape:
parser = <pyexpat.xmlparser object>, parser.Parse = <built-in method Parse of pyexpat.xmlparser object>, string = u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', builtin True = True

<type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\xe9' in position 37: ordinal not in range(128)
      args = ('ascii', u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>', 37, 38, 'ordinal not in range(128)')
      encoding = 'ascii'
      end = 38
      message = ''
      object = u'<?xml version="1.0" ?><form string="S\xe9quences">\n...elect="1"/><field name="code" select="1"/></form>'
      reason = 'ordinal not in range(128)'
      start = 37

Changed in openobject-server:
status: New → Confirmed
Changed in openobject-server:
importance: Undecided → Medium
milestone: none → 6.0
summary: - crashes with accents in french translation
+ Forms unable to handle accented characters
Changed in openobject-server:
milestone: 6.0 → none
Changed in openobject-server:
status: Confirmed → Invalid
milestone: none → 6.0
Changed in openobject-client-web:
milestone: none → 6.0
status: New → Confirmed
Revision history for this message
Chirag Patel (OpenERP) (cpa-openerp) wrote :

Hello,
  This is fixed in lp:~openerp-dev/openobject-client-web/trunk-dev-web branch at rev.no : 3616.

Thanks.

Changed in openobject-client-web:
assignee: nobody → cpa(OpenERP) (cpa-openerp)
status: Confirmed → Fix Committed
Changed in openobject-client-web:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.