From a9279922b47312b2ca45c0e1eb30ac337bbd4614 Mon Sep 17 00:00:00 2001 From: DoctorJohn Date: Sun, 7 Jun 2020 12:59:31 +0200 Subject: [PATCH] Make v3 django choice field enum naming default --- docs/settings.rst | 8 ++++---- graphene_django/converter.py | 6 +++--- graphene_django/settings.py | 4 ++-- graphene_django/tests/test_converter.py | 22 +++++++++++++++++++--- graphene_django/tests/test_types.py | 22 ++++++++++------------ 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index 5a7e4c9da..18251f9d1 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 d8d37db7b..d76cb2b12 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 f4f4db3b5..a88b56ed9 100644 --- a/graphene_django/settings.py +++ b/graphene_django/settings.py @@ -35,8 +35,8 @@ # 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 7340fb4ea..6d8775a78 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -159,7 +159,7 @@ class Meta: 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 1986568c7..1a528a4e0 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -138,10 +138,10 @@ def test_schema_representation(): editor: Reporter! \"""Language\""" - lang: ArticleLang! + lang: TestsArticleLangChoices! \"""\""" - importance: ArticleImportance + importance: TestsArticleImportanceChoices } \"""An object with an ID\""" @@ -165,7 +165,7 @@ def test_schema_representation(): scalar DateTime \"""An enumeration.\""" - enum ArticleLang { + enum TestsArticleLangChoices { \"""Spanish\""" ES @@ -174,7 +174,7 @@ def test_schema_representation(): } \"""An enumeration.\""" - enum ArticleImportance { + enum TestsArticleImportanceChoices { \"""Very important\""" A_1 @@ -200,17 +200,17 @@ def test_schema_representation(): pets: [Reporter!]! \"""\""" - aChoice: ReporterAChoice + aChoice: TestsReporterAChoiceChoices \"""\""" - reporterType: ReporterReporterType + 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 @@ -219,7 +219,7 @@ def test_schema_representation(): } \"""An enumeration.\""" - enum ReporterReporterType { + enum TestsReporterReporterTypeChoices { \"""Regular\""" A_1 @@ -547,14 +547,14 @@ class Query(ObjectType): id: ID! \"""\""" - kind: PetModelKind! + kind: TestsPetModelKindChoices! \"""\""" cuteness: Int! } \"""An enumeration.\""" - enum PetModelKind { + enum TestsPetModelKindChoices { \"""Cat\""" CAT @@ -597,8 +597,6 @@ class Query(ObjectType): 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