old_contents: # vim: tabstop=4 shiftwidth=4 softtabstop=4
  
  # Copyright 2010 United States Government as represented by the
  # Administrator of the National Aeronautics and Space Administration.
  # All Rights Reserved.
  # Copyright 2012 Cloudscaling Group, Inc
  #
  #    Licensed under the Apache License, Version 2.0 (the "License"); you may
  #    not use this file except in compliance with the License. You may obtain
  #    a copy of the License at
  #
  #         http://www.apache.org/licenses/LICENSE-2.0
  #
  #    Unless required by applicable law or agreed to in writing, software
  #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  #    License for the specific language governing permissions and limitations
  #    under the License.
  
  from openstack.common.gettextutils import _
  from openstack.common import log as logging
  
  
  LOG = logging.getLogger(__name__)
  
  
  class Invalid(Exception):
          pass
  
  
  class InvalidSortKey(Invalid):
      message = _("Sort key supplied was not valid.")
  
  
  class InvalidUnicodeParameter(Invalid):
      message = _("Invalid Parameter: "
                  "Unicode is not supported by the current database.")
  
  
  class DBError(Exception):
      """Wraps an implementation specific exception."""
      def __init__(self, inner_exception=None):
          self.inner_exception = inner_exception
          super(DBError, self).__init__(str(inner_exception))
  
new_contents: # vim: tabstop=4 shiftwidth=4 softtabstop=4
  
  # Copyright 2010 United States Government as represented by the
  # Administrator of the National Aeronautics and Space Administration.
  # All Rights Reserved.
  # Copyright 2012 Cloudscaling Group, Inc
  #
  #    Licensed under the Apache License, Version 2.0 (the "License"); you may
  #    not use this file except in compliance with the License. You may obtain
  #    a copy of the License at
  #
  #         http://www.apache.org/licenses/LICENSE-2.0
  #
  #    Unless required by applicable law or agreed to in writing, software
  #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  #    License for the specific language governing permissions and limitations
  #    under the License.
  
  from openstack.common.gettextutils import _
  from openstack.common import log as logging
  
  
  LOG = logging.getLogger(__name__)
  
  
  class Invalid(Exception):
          pass
  
  
  class InvalidSortKey(Invalid):
      message = _("Sort key supplied was not valid.")
  
  
  class InvalidUnicodeParameter(Invalid):
      message = _("Invalid Parameter: "
                  "Unicode is not supported by the current database.")
  
  
  class DBError(Exception):
      """Wraps an implementation specific exception."""
      def __init__(self, inner_exception=None):
          self.inner_exception = inner_exception
          super(DBError, self).__init__(str(inner_exception))
  
  
  class DBDuplicateEntry(DBError):
      """Wraps an implementation specific exception."""
      def __init__(self, columns=[], inner_exception=None):
          self.columns = columns
          super(DBDuplicateEntry, self).__init__(inner_exception)
  
subject: Add missing DBDuplicateEntry