import abc
from oslo_db import exception as obj_exc
+from oslo_utils import reflection
from oslo_versionedobjects import base as obj_base
import six
message = _("Unable to update the following object fields: %(fields)s")
-class NeutronObjectDuplicateEntry(exceptions.Conflict):
- message = _("Failed to create a duplicate object")
+class NeutronDbObjectDuplicateEntry(exceptions.Conflict):
+ message = _("Failed to create a duplicate %(object_type)s: "
+ "for attribute(s) %(attributes)s with value(s) %(values)s")
+
+ def __init__(self, object_class, db_exception):
+ super(NeutronDbObjectDuplicateEntry, self).__init__(
+ object_type=reflection.get_class_name(object_class,
+ fully_qualified=False),
+ attributes=db_exception.columns,
+ values=db_exception.value)
def get_updatable_fields(cls, fields):
fields = self._get_changed_persistent_fields()
try:
db_obj = db_api.create_object(self._context, self.db_model, fields)
- except obj_exc.DBDuplicateEntry:
- raise NeutronObjectDuplicateEntry()
+ except obj_exc.DBDuplicateEntry as db_exc:
+ raise NeutronDbObjectDuplicateEntry(object_class=self.__class__,
+ db_exception=db_exc)
+
self.from_db_object(db_obj)
def update(self):
with mock.patch.object(db_api, 'create_object',
side_effect=obj_exc.DBDuplicateEntry):
obj = self._test_class(self.context, **self.db_obj)
- self.assertRaises(base.NeutronObjectDuplicateEntry, obj.create)
+ self.assertRaises(base.NeutronDbObjectDuplicateEntry, obj.create)
@mock.patch.object(db_api, 'update_object')
def test_update_no_changes(self, update_mock):