old_contents: # -*- coding: utf-8 -*-
  ##############################################################################
  #
  #    OpenERP, Open Source Management Solution
  #    Copyright (C) 2011 OpenERP s.a. (<http://openerp.com>).
  #
  #    This program is free software: you can redistribute it and/or modify
  #    it under the terms of the GNU Affero General Public License as
  #    published by the Free Software Foundation, either version 3 of the
  #    License, or (at your option) any later version.
  #
  #    This program is distributed in the hope that it will be useful,
  #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #    GNU Affero General Public License for more details.
  #
  #    You should have received a copy of the GNU Affero General Public License
  #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  #
  ##############################################################################
  
  """ OpenERP core exceptions.
  
  This module defines a few exception types. Those types are understood by the
  RPC layer. Any other exception type bubbling until the RPC layer will be
  treated as a 'Server error'.
  
  """
  
  class Warning(Exception):
      pass
  
  class AccessDenied(Exception):
      """ Login/password error. No message, no traceback. """
      def __init__(self):
          super(AccessDenied, self).__init__('Access denied.')
          self.traceback = ('', '', '')
  
  class AccessError(Exception):
      """ Access rights error. """
  
  class DeferredException(Exception):
      """ Exception object holding a traceback for asynchronous reporting.
  
      Some RPC calls (database creation and report generation) happen with
      an initial request followed by multiple, polling requests. This class
      is used to store the possible exception occuring in the thread serving
      the first request, and is then sent to a polling request.
  
      ('Traceback' is misleading, this is really a exc_info() triple.)
      """
      def __init__(self, msg, tb):
          self.message = msg
          self.traceback = tb
  
  # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
  
new_contents: # -*- coding: utf-8 -*-
  ##############################################################################
  #
  #    OpenERP, Open Source Management Solution
  #    Copyright (C) 2011 OpenERP s.a. (<http://openerp.com>).
  #
  #    This program is free software: you can redistribute it and/or modify
  #    it under the terms of the GNU Affero General Public License as
  #    published by the Free Software Foundation, either version 3 of the
  #    License, or (at your option) any later version.
  #
  #    This program is distributed in the hope that it will be useful,
  #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #    GNU Affero General Public License for more details.
  #
  #    You should have received a copy of the GNU Affero General Public License
  #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  #
  ##############################################################################
  
  """ OpenERP core exceptions.
  
  This module defines a few exception types. Those types are understood by the
  RPC layer. Any other exception type bubbling until the RPC layer will be
  treated as a 'Server error'.
  
  """
  
  class Warning(Exception):
      pass
  
  class RedirectWarning(Exception):
      """ Warning with a possibility to redirect the user instead of simply
      discarding the warning message.
      """
      def __init__(self, msg, action_id, button_text):
          """
          :param int action_id: id of the action required to perform the
          redirection
          :param string button_text: text to put on the button which will trigger
          the redirection
          """
          super(RedirectWarning, self).__init__(msg, action_id, button_text)
  
  class AccessDenied(Exception):
      """ Login/password error. No message, no traceback. """
      def __init__(self):
          super(AccessDenied, self).__init__('Access denied.')
          self.traceback = ('', '', '')
  
  class AccessError(Exception):
      """ Access rights error. """
  
  class DeferredException(Exception):
      """ Exception object holding a traceback for asynchronous reporting.
  
      Some RPC calls (database creation and report generation) happen with
      an initial request followed by multiple, polling requests. This class
      is used to store the possible exception occuring in the thread serving
      the first request, and is then sent to a polling request.
  
      ('Traceback' is misleading, this is really a exc_info() triple.)
      """
      def __init__(self, msg, tb):
          self.message = msg
          self.traceback = tb
  
  # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
  
subject: introduce a new kind of exception: RedirectWarning (warning with an additional redirection button)