[MERGE] Forward-port of latest 7.0 bugfixes, up to rev. 5294 revid:odo@openerp.com...
authorDenis Ledoux <dle@openerp.com>
Tue, 6 May 2014 12:16:27 +0000 (14:16 +0200)
committerDenis Ledoux <dle@openerp.com>
Tue, 6 May 2014 12:16:27 +0000 (14:16 +0200)
bzr revid: dle@openerp.com-20140506121627-4oyw4zl4o6azy73w

1  2 
openerp/addons/base/ir/ir_model.py
openerp/addons/base/res/res_users.py
openerp/tools/convert.py
openerp/tools/safe_eval.py

Simple merge
Simple merge
@@@ -305,18 -266,23 +305,23 @@@ 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.get(d_model).search(cr, self.uid, unsafe_eval(d_search, idref))
++                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.get(d_model).unlink(cr, self.uid, ids)
 +            self.pool[d_model].unlink(cr, self.uid, ids)
  
      def _remove_ir_values(self, cr, name, value, model):
 -        ir_values_obj = self.pool.get('ir.values')
 +        ir_values_obj = self.pool['ir.values']
          ir_value_ids = ir_values_obj.search(cr, self.uid, [('name','=',name),('value','=',value),('model','=',model)])
          if ir_value_ids:
              ir_values_obj.unlink(cr, self.uid, ir_value_ids)
@@@ -67,11 -63,11 +67,12 @@@ _SAFE_OPCODES = _EXPR_OPCODES.union(set
      'LOAD_NAME', 'CALL_FUNCTION', 'COMPARE_OP', 'LOAD_ATTR',
      'STORE_NAME', 'GET_ITER', 'FOR_ITER', 'LIST_APPEND', 'DELETE_NAME',
      'JUMP_FORWARD', 'JUMP_IF_TRUE', 'JUMP_IF_FALSE', 'JUMP_ABSOLUTE',
 -    'MAKE_FUNCTION', 'SLICE+0', 'SLICE+1', 'SLICE+2', 'SLICE+3',
 +    'MAKE_FUNCTION', 'SLICE+0', 'SLICE+1', 'SLICE+2', 'SLICE+3', 'BREAK_LOOP',
 +    '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))