diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py
index 76166ee92e0..aca8ac466c8 100644
--- a/openerp/addons/base/ir/ir_model.py
+++ b/openerp/addons/base/ir/ir_model.py
@@ -384,7 +384,7 @@ class ir_model_fields(osv.osv):
# static table of properties
model_props = [ # (our-name, fields.prop, set_fn)
- ('field_description', 'string', str),
+ ('field_description', 'string', tools.ustr),
('required', 'required', bool),
('readonly', 'readonly', bool),
('domain', '_domain', eval),
diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index abe6b323c88..e898492a762 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -218,13 +218,6 @@ class view(osv.osv):
self.read_template.clear_cache(self)
ret = super(view, self).write(cr, uid, ids, vals, context)
-
- # if arch is modified views become noupdatable
- if 'arch' in vals and not context.get('install_mode', False):
- # TODO: should be doable in a read and a write
- for view_ in self.browse(cr, uid, ids, context=context):
- if view_.model_data_id:
- self.pool.get('ir.model.data').write(cr, openerp.SUPERUSER_ID, view_.model_data_id.id, {'noupdate': True})
return ret
def copy(self, cr, uid, id, default=None, context=None):
diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml
index b545ec7a458..50045aaf270 100644
--- a/openerp/addons/base/res/res_partner_view.xml
+++ b/openerp/addons/base/res/res_partner_view.xml
@@ -156,10 +156,12 @@
-
-
+
+
+
+
diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py
index f85f6949d2d..b0731791ae0 100644
--- a/openerp/addons/base/res/res_users.py
+++ b/openerp/addons/base/res/res_users.py
@@ -99,7 +99,7 @@ class res_groups(osv.osv):
}
_sql_constraints = [
- ('name_uniq', 'unique (category_id, name)', 'The name of the group must be unique !')
+ ('name_uniq', 'unique (category_id, name)', 'The name of the group must be unique within an application!')
]
def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml
index c0f4242198c..755e20c3832 100644
--- a/openerp/addons/base/security/base_security.xml
+++ b/openerp/addons/base/security/base_security.xml
@@ -43,7 +43,7 @@
diff --git a/openerp/modules/module.py b/openerp/modules/module.py
index 82e86e83ce2..0ccb2865796 100644
--- a/openerp/modules/module.py
+++ b/openerp/modules/module.py
@@ -177,7 +177,7 @@ def load_information_from_description_file(module, mod_path=None):
if not mod_path:
mod_path = get_module_path(module)
- terp_file = opj(mod_path, '__openerp__.py')
+ terp_file = mod_path and opj(mod_path, '__openerp__.py') or False
if terp_file:
info = {}
if os.path.isfile(terp_file):
diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py
index 23e2f61e0dc..af6f3431229 100644
--- a/openerp/tools/convert.py
+++ b/openerp/tools/convert.py
@@ -305,12 +305,17 @@ form: module.record_id""" % (xml_id,)
if d_search:
idref = _get_idref(self, cr, self.uid, d_model, context={}, idref={})
- ids = self.pool[d_model].search(cr, self.uid, unsafe_eval(d_search, idref))
+ try:
+ ids = self.pool[d_model].search(cr, self.uid, unsafe_eval(d_search, idref))
+ except ValueError:
+ _logger.warning('Skipping deletion for failed search `%r`', d_search, exc_info=True)
+ pass
if d_id:
try:
ids.append(self.id_get(cr, d_id))
- except:
+ except ValueError:
# d_id cannot be found. doesn't matter in this case
+ _logger.warning('Skipping deletion for missing XML ID `%r`', d_id, exc_info=True)
pass
if ids:
self.pool[d_model].unlink(cr, self.uid, ids)
diff --git a/openerp/tools/safe_eval.py b/openerp/tools/safe_eval.py
index 2f280685350..471827b098b 100644
--- a/openerp/tools/safe_eval.py
+++ b/openerp/tools/safe_eval.py
@@ -71,7 +71,8 @@ _SAFE_OPCODES = _EXPR_OPCODES.union(set(opmap[x] for x in [
'CONTINUE_LOOP', 'RAISE_VARARGS',
# New in Python 2.7 - http://bugs.python.org/issue4715 :
'JUMP_IF_FALSE_OR_POP', 'JUMP_IF_TRUE_OR_POP', 'POP_JUMP_IF_FALSE',
- 'POP_JUMP_IF_TRUE', 'SETUP_EXCEPT', 'END_FINALLY', 'LOAD_FAST',
+ 'POP_JUMP_IF_TRUE', 'SETUP_EXCEPT', 'END_FINALLY',
+ 'LOAD_FAST', 'STORE_FAST', 'DELETE_FAST',
'LOAD_GLOBAL', # Only allows access to restricted globals
] if x in opmap))