diff --git a/graphene_django/converter.py b/graphene_django/converter.py index 8b00dd9..8d18446 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -28,10 +28,18 @@ from .utils import import_single_dispatch singledispatch = import_single_dispatch() +def _is_dunder(name): + """Returns True if a __dunder__ name, False otherwise.""" + return (len(name) > 4 and + name[:2] == name[-2:] == '__' and + name[2:3] != '_' and + name[-3:-2] != '_') + + def convert_choice_name(name): name = force_text(name).encode('utf8').decode('ascii', 'ignore') name = to_const(name) - if name.startswith('_'): + if _is_dunder(name): name = "A%s" % name try: assert_valid_name(name) diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index 82e7f6b..f79504a 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -199,7 +199,7 @@ def test_field_with_choices_collision(): def test_field_with_choices_underscore(): field = models.CharField( choices=( - ("__amount__", "Amount"), + ("_amount__", "Amount"), ("__percentage__", "Percentage"), ), ) @@ -212,8 +212,8 @@ def test_field_with_choices_underscore(): graphene_type = convert_django_field_with_choices(field) assert len(graphene_type._meta.enum.__members__) == 2 - assert graphene_type._meta.enum.__members__["A__AMOUNT__"].value == "__amount__" - assert graphene_type._meta.enum.__members__["A__AMOUNT__"].description == "Amount" + assert graphene_type._meta.enum.__members__["_AMOUNT__"].value == "_amount__" + assert graphene_type._meta.enum.__members__["_AMOUNT__"].description == "Amount" assert graphene_type._meta.enum.__members__["A__PERCENTAGE__"].value == "__percentage__" assert graphene_type._meta.enum.__members__["A__PERCENTAGE__"].description == "Percentage" diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 7b32edd..8896f6e 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -174,7 +174,7 @@ type Reporter { enum ReporterAChoice { A_1 A_2 - A_3 + _3 } enum ReporterReporterType {