def handle_conflicts(conflict_type='object'):
 _conflict_msg = 'Conflict %(conflict_type)s: %(details)s'
 def decorator(method):
  @functools.wraps(method)
  def wrapper(*args, **kwargs):
   try:
    return method(*args, **kwargs)
   except db_exception.DBDuplicateEntry as e:
    LOG.debug(_conflict_msg, {'conflict_type': conflict_type, 'details': six.text_type(e)})
    name = None
    field = None
    domain_id = None
    params = args[1:]
    for arg in params:
     if ('name' in arg):
      field = 'name'
      name = arg['name']
     elif ('id' in arg):
      field = 'ID'
      name = arg['id']
     if ('domain_id' in arg):
      domain_id = arg['domain_id']
    msg = _('Duplicate entry')
    if (name and domain_id):
     msg = (_('Duplicate entry found with %(field)s %(name)s at domain ID %(domain_id)s') % {'field': field, 'name': name, 'domain_id': domain_id})
    elif name:
     msg = (_('Duplicate entry found with %(field)s %(name)s') % {'field': field, 'name': name})
    elif domain_id:
     msg = (_('Duplicate entry at domain ID %s') % domain_id)
    raise exception.Conflict(type=conflict_type, details=msg)
   except db_exception.DBError as e:
    if isinstance(e.inner_exception, IntegrityError):
     LOG.debug(_conflict_msg, {'conflict_type': conflict_type, 'details': six.text_type(e)})
     raise exception.UnexpectedError((_('An unexpected error occurred when trying to store %s') % conflict_type))
    raise
  return wrapper
 return decorator

def handle_conflicts ( conflict_type = 'object' ) : _conflict_msg = 'Conflict %(conflict_type)s: %(details)s' def decorator ( method ) : @ functools . wraps ( method ) def wrapper ( * args , ** kwargs ) : try : return method ( * args , ** kwargs ) except db_exception . DBDuplicateEntry as e : LOG . debug ( _conflict_msg , { 'conflict_type' : conflict_type , 'details' : six . text_type ( e ) } ) name = None field = None domain_id = None params = args [ 1 : ] for arg in params : if ( 'name' in arg ) : field = 'name' name = arg [ 'name' ] elif ( 'id' in arg ) : field = 'ID' name = arg [ 'id' ] if ( 'domain_id' in arg ) : domain_id = arg [ 'domain_id' ] msg = _ ( 'Duplicate entry' ) if ( name and domain_id ) : msg = ( _ ( 'Duplicate entry found with %(field)s %(name)s at domain ID %(domain_id)s' ) % { 'field' : field , 'name' : name , 'domain_id' : domain_id } ) elif name : msg = ( _ ( 'Duplicate entry found with %(field)s %(name)s' ) % { 'field' : field , 'name' : name } ) elif domain_id : msg = ( _ ( 'Duplicate entry at domain ID %s' ) % domain_id ) raise exception . Conflict ( type = conflict_type , details = msg ) except db_exception . DBError as e : if isinstance ( e . inner_exception , IntegrityError ) : LOG . debug ( _conflict_msg , { 'conflict_type' : conflict_type , 'details' : six . text_type ( e ) } ) raise exception . UnexpectedError ( ( _ ( 'An unexpected error occurred when trying to store %s' ) % conflict_type ) ) raise return wrapper return decorator
converts integrityerror into http 409 conflict .