Refs #26521 -- Added the duplicated value to CreateModel validation messages.

Thanks Tim for the suggestion.
This commit is contained in:
Simon Charette 2016-04-27 16:17:22 -04:00
parent fed7004b8a
commit a877a2f83d
2 changed files with 18 additions and 16 deletions

View File

@ -17,7 +17,7 @@ def _check_for_duplicates(arg_name, objs):
for val in objs: for val in objs:
if val in used_vals: if val in used_vals:
raise ValueError( raise ValueError(
'Found duplicate %s in CreateModel operation.' % arg_name "Found duplicate value %s in CreateModel %s argument." % (val, arg_name)
) )
used_vals.add(val) used_vals.add(val)
@ -55,14 +55,14 @@ class CreateModel(ModelOperation):
super(CreateModel, self).__init__(name) super(CreateModel, self).__init__(name)
# Sanity-check that there are no duplicated field names, bases, or # Sanity-check that there are no duplicated field names, bases, or
# manager names # manager names
_check_for_duplicates("field", (name for name, _ in self.fields)) _check_for_duplicates('fields', (name for name, _ in self.fields))
_check_for_duplicates( _check_for_duplicates(
"base", 'bases',
(base._meta.label_lower if isinstance(base, models.base.ModelBase) else base.lower() (base._meta.label_lower if isinstance(base, models.base.ModelBase) else base.lower()
for base in self.bases for base in self.bases
if base is not models.Model) if base is not models.Model)
) )
_check_for_duplicates("manager", (name for name, _ in self.managers)) _check_for_duplicates('managers', (name for name, _ in self.managers))
def deconstruct(self): def deconstruct(self):
kwargs = { kwargs = {

View File

@ -201,7 +201,7 @@ class OperationTests(OperationTestBase):
self.assertNotIn('managers', definition[2]) self.assertNotIn('managers', definition[2])
def test_create_model_with_duplicate_field_name(self): def test_create_model_with_duplicate_field_name(self):
with self.assertRaisesMessage(ValueError, "Found duplicate field in CreateModel operation."): with self.assertRaisesMessage(ValueError, 'Found duplicate value pink in CreateModel fields argument.'):
migrations.CreateModel( migrations.CreateModel(
"Pony", "Pony",
[ [
@ -212,31 +212,33 @@ class OperationTests(OperationTestBase):
) )
def test_create_model_with_duplicate_base(self): def test_create_model_with_duplicate_base(self):
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): message = 'Found duplicate value test_crmo.pony in CreateModel bases argument.'
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel( migrations.CreateModel(
"Pony", "Pony",
fields=[], fields=[],
bases=("test_crmo.Pony", "test_crmo.Pony",), bases=("test_crmo.Pony", "test_crmo.Pony",),
) )
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel(
"Pony",
fields=[],
bases=(UnicodeModel, UnicodeModel,),
)
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."):
migrations.CreateModel( migrations.CreateModel(
"Pony", "Pony",
fields=[], fields=[],
bases=("test_crmo.Pony", "test_crmo.pony",), bases=("test_crmo.Pony", "test_crmo.pony",),
) )
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): message = 'Found duplicate value migrations.unicodemodel in CreateModel bases argument.'
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel(
"Pony",
fields=[],
bases=(UnicodeModel, UnicodeModel,),
)
with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel( migrations.CreateModel(
"Pony", "Pony",
fields=[], fields=[],
bases=(UnicodeModel, 'migrations.unicodemodel',), bases=(UnicodeModel, 'migrations.unicodemodel',),
) )
with self.assertRaisesMessage(ValueError, "Found duplicate base in CreateModel operation."): with self.assertRaisesMessage(ValueError, message):
migrations.CreateModel( migrations.CreateModel(
"Pony", "Pony",
fields=[], fields=[],
@ -244,7 +246,7 @@ class OperationTests(OperationTestBase):
) )
def test_create_model_with_duplicate_manager_name(self): def test_create_model_with_duplicate_manager_name(self):
with self.assertRaisesMessage(ValueError, "Found duplicate manager in CreateModel operation."): with self.assertRaisesMessage(ValueError, 'Found duplicate value objects in CreateModel managers argument.'):
migrations.CreateModel( migrations.CreateModel(
"Pony", "Pony",
fields=[], fields=[],