[IMP] ir_translation: improve usage of `ormcache` by method `_get_source`

Convert the arguments to avoid a cache error when the method is called with a
list of ids.
This commit is contained in:
Raphael Collet 2015-03-30 15:19:46 +02:00
parent f87570e83f
commit f2930c548e
1 changed files with 20 additions and 17 deletions

View File

@ -282,7 +282,7 @@ class ir_translation(osv.osv):
def _set_ids(self, cr, uid, name, tt, lang, ids, value, src=None):
self._get_ids.clear_cache(self)
self._get_source.clear_cache(self)
self.__get_source.clear_cache(self)
cr.execute('delete from ir_translation '
'where lang=%s '
@ -310,10 +310,6 @@ class ir_translation(osv.osv):
AND src=%s"""
params = (lang or '', types, tools.ustr(source))
if res_id:
if isinstance(res_id, (int, long)):
res_id = (res_id,)
else:
res_id = tuple(res_id)
query += " AND res_id in %s"
params += (res_id,)
if name:
@ -331,6 +327,16 @@ class ir_translation(osv.osv):
return (query, params)
@tools.ormcache(skiparg=3)
def __get_source(self, cr, uid, name, types, lang, source, res_id):
# res_id is a tuple or None, otherwise ormcache cannot cache it!
query, params = self._get_source_query(cr, uid, name, types, lang, source, res_id)
cr.execute(query, params)
res = cr.fetchone()
trad = res and res[0] or u''
if source and not trad:
return tools.ustr(source)
return trad
def _get_source(self, cr, uid, name, types, lang, source=None, res_id=None):
"""
Returns the translation for the given combination of name, type, language
@ -352,21 +358,18 @@ class ir_translation(osv.osv):
return tools.ustr(source or '')
if isinstance(types, basestring):
types = (types,)
query, params = self._get_source_query(cr, uid, name, types, lang, source, res_id)
cr.execute(query, params)
res = cr.fetchone()
trad = res and res[0] or u''
if source and not trad:
return tools.ustr(source)
return trad
if res_id:
if isinstance(res_id, (int, long)):
res_id = (res_id,)
else:
res_id = tuple(res_id)
return self.__get_source(cr, uid, name, types, lang, source, res_id)
def create(self, cr, uid, vals, context=None):
if context is None:
context = {}
ids = super(ir_translation, self).create(cr, uid, vals, context=context)
self._get_source.clear_cache(self)
self.__get_source.clear_cache(self)
self._get_ids.clear_cache(self)
self.pool['ir.ui.view'].clear_cache()
return ids
@ -381,7 +384,7 @@ class ir_translation(osv.osv):
if vals.get('value'):
vals.update({'state':'translated'})
result = super(ir_translation, self).write(cursor, user, ids, vals, context=context)
self._get_source.clear_cache(self)
self.__get_source.clear_cache(self)
self._get_ids.clear_cache(self)
self.pool['ir.ui.view'].clear_cache()
return result
@ -392,7 +395,7 @@ class ir_translation(osv.osv):
if isinstance(ids, (int, long)):
ids = [ids]
self._get_source.clear_cache(self)
self.__get_source.clear_cache(self)
self._get_ids.clear_cache(self)
result = super(ir_translation, self).unlink(cursor, user, ids, context=context)
return result