diff --git a/docs/settings.rst b/docs/settings.rst index 5a7e4c9..18251f9 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -142,20 +142,20 @@ Default: ``False`` # ] -``DJANGO_CHOICE_FIELD_ENUM_V3_NAMING`` +``DJANGO_CHOICE_FIELD_ENUM_V2_NAMING`` -------------------------------------- -Set to ``True`` to use the new naming format for the auto generated Enum types from Django choice fields. The new format looks like this: ``{app_label}{object_name}{field_name}Choices`` +Set to ``True`` to use the old naming format for the auto generated Enum types from Django choice fields. The old format looks like this: ``{object_name}_{field_name}`` Default: ``False`` ``DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME`` --------------------------------------- +---------------------------------------- Define the path of a function that takes the Django choice field and returns a string to completely customise the naming for the Enum type. -If set to a function then the ``DJANGO_CHOICE_FIELD_ENUM_V3_NAMING`` setting is ignored. +If set to a function then the ``DJANGO_CHOICE_FIELD_ENUM_V2_NAMING`` setting is ignored. Default: ``None`` diff --git a/graphene_django/converter.py b/graphene_django/converter.py index 1173eff..53b2537 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -79,14 +79,14 @@ def generate_enum_name(django_model_meta, field): graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME ) name = custom_func(field) - elif graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING is True: + elif graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V2_NAMING is True: + name = to_camel_case("{}_{}".format(django_model_meta.object_name, field.name)) + else: name = "{app_label}{object_name}{field_name}Choices".format( app_label=to_camel_case(django_model_meta.app_label.title()), object_name=django_model_meta.object_name, field_name=to_camel_case(field.name.title()), ) - else: - name = to_camel_case("{}_{}".format(django_model_meta.object_name, field.name)) return name diff --git a/graphene_django/settings.py b/graphene_django/settings.py index f4f4db3..a88b56e 100644 --- a/graphene_django/settings.py +++ b/graphene_django/settings.py @@ -35,8 +35,8 @@ DEFAULTS = { # Max items returned in ConnectionFields / FilterConnectionFields "RELAY_CONNECTION_MAX_LIMIT": 100, "CAMELCASE_ERRORS": True, - # Set to True to enable v3 naming convention for choice field Enum's - "DJANGO_CHOICE_FIELD_ENUM_V3_NAMING": False, + # Set to True to enable v2 naming convention for choice field Enum's + "DJANGO_CHOICE_FIELD_ENUM_V2_NAMING": False, "DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME": None, } diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index 7340fb4..6d8775a 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -159,7 +159,7 @@ def test_field_with_choices_convert_enum(): graphene_type = convert_django_field_with_choices(field) assert isinstance(graphene_type, graphene.Enum) - assert graphene_type._meta.name == "TranslatedModelLanguage" + assert graphene_type._meta.name == "TestTranslatedModelLanguageChoices" assert graphene_type._meta.enum.__members__["ES"].value == "es" assert graphene_type._meta.enum.__members__["ES"].description == "Spanish" assert graphene_type._meta.enum.__members__["EN"].value == "en" @@ -344,9 +344,8 @@ def test_should_postgres_range_convert_list(): assert field.type.of_type.of_type == graphene.Int -def test_generate_enum_name(graphene_settings): +def test_generate_enum_name(): MockDjangoModelMeta = namedtuple("DjangoMeta", ["app_label", "object_name"]) - graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING = True # Simple case field = graphene.Field(graphene.String, name="type") @@ -362,3 +361,20 @@ def test_generate_enum_name(graphene_settings): generate_enum_name(model_meta, field) == "SomeLongAppNameSomeObjectFizzBuzzChoices" ) + + +def test_generate_v2_enum_name(graphene_settings): + MockDjangoModelMeta = namedtuple("DjangoMeta", ["app_label", "object_name"]) + graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V2_NAMING = True + + # Simple case + field = graphene.Field(graphene.String, name="type") + model_meta = MockDjangoModelMeta(app_label="users", object_name="User") + assert generate_enum_name(model_meta, field) == "UserType" + + # More complicated multiple work case + field = graphene.Field(graphene.String, name="fizz_buzz") + model_meta = MockDjangoModelMeta( + app_label="some_long_app_name", object_name="SomeObject" + ) + assert generate_enum_name(model_meta, field) == "SomeObjectFizzBuzz" diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 3008394..e59e012 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -128,8 +128,8 @@ def test_schema_representation(): editor: Reporter! \"""Language\""" - lang: ArticleLang! - importance: ArticleImportance + lang: TestsArticleLangChoices! + importance: TestsArticleImportanceChoices } \"""An object with an ID\""" @@ -153,7 +153,7 @@ def test_schema_representation(): scalar DateTime \"""An enumeration.\""" - enum ArticleLang { + enum TestsArticleLangChoices { \"""Spanish\""" ES @@ -162,7 +162,7 @@ def test_schema_representation(): } \"""An enumeration.\""" - enum ArticleImportance { + enum TestsArticleImportanceChoices { \"""Very important\""" A_1 @@ -177,13 +177,13 @@ def test_schema_representation(): lastName: String! email: String! pets: [Reporter!]! - aChoice: ReporterAChoice - reporterType: ReporterReporterType + aChoice: TestsReporterAChoiceChoices + reporterType: TestsReporterReporterTypeChoices articles(before: String = null, after: String = null, first: Int = null, last: Int = null): ArticleConnection! } \"""An enumeration.\""" - enum ReporterAChoice { + enum TestsReporterAChoiceChoices { \"""this\""" A_1 @@ -192,7 +192,7 @@ def test_schema_representation(): } \"""An enumeration.\""" - enum ReporterReporterType { + enum TestsReporterReporterTypeChoices { \"""Regular\""" A_1 @@ -512,12 +512,12 @@ class TestDjangoObjectType: type Pet { id: ID! - kind: PetModelKind! + kind: TestsPetModelKindChoices! cuteness: Int! } \"""An enumeration.\""" - enum PetModelKind { + enum TestsPetModelKindChoices { \"""Cat\""" CAT @@ -555,8 +555,6 @@ class TestDjangoObjectType: def test_django_objecttype_convert_choices_enum_naming_collisions( self, PetModel, graphene_settings ): - graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING = True - class PetModelKind(DjangoObjectType): class Meta: model = PetModel