mirror of
				https://github.com/graphql-python/graphene-django.git
				synced 2025-10-30 23:47:30 +03:00 
			
		
		
		
	Merge pull request #86 from gamingexperience/fix/field-choices-collision
Avoids collisions in choices names conversion.
This commit is contained in:
		
						commit
						03f3fbef22
					
				|  | @ -27,12 +27,16 @@ def convert_choice_name(name): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_choices(choices): | def get_choices(choices): | ||||||
|  |     converted_names = [] | ||||||
|     for value, help_text in choices: |     for value, help_text in choices: | ||||||
|         if isinstance(help_text, (tuple, list)): |         if isinstance(help_text, (tuple, list)): | ||||||
|             for choice in get_choices(help_text): |             for choice in get_choices(help_text): | ||||||
|                 yield choice |                 yield choice | ||||||
|         else: |         else: | ||||||
|             name = convert_choice_name(value) |             name = convert_choice_name(value) | ||||||
|  |             while name in converted_names: | ||||||
|  |                 name += '_' + str(len(converted_names)) | ||||||
|  |             converted_names.append(name) | ||||||
|             description = help_text |             description = help_text | ||||||
|             yield name, value, description |             yield name, value, description | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -176,6 +176,22 @@ def test_field_with_choices_gettext(): | ||||||
|     convert_django_field_with_choices(field) |     convert_django_field_with_choices(field) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def test_field_with_choices_collision(): | ||||||
|  |     field = models.CharField(help_text='Timezone', choices=( | ||||||
|  |         ('Etc/GMT+1+2', 'Fake choice to produce double collision'), | ||||||
|  |         ('Etc/GMT+1', 'Greenwich Mean Time +1'), | ||||||
|  |         ('Etc/GMT-1', 'Greenwich Mean Time -1'), | ||||||
|  |     )) | ||||||
|  | 
 | ||||||
|  |     class CollisionChoicesModel(models.Model): | ||||||
|  |         timezone = field | ||||||
|  | 
 | ||||||
|  |         class Meta: | ||||||
|  |             app_label = 'test' | ||||||
|  | 
 | ||||||
|  |     convert_django_field_with_choices(field) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_should_float_convert_float(): | def test_should_float_convert_float(): | ||||||
|     assert_conversion(models.FloatField, graphene.Float) |     assert_conversion(models.FloatField, graphene.Float) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user