Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make v3 django choice field enum naming default (in v3) #982

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/settings.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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``

Expand Down
6 changes: 3 additions & 3 deletions graphene_django/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
4 changes: 2 additions & 2 deletions graphene_django/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

Expand Down
22 changes: 19 additions & 3 deletions graphene_django/tests/test_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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")
Expand All @@ -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"
22 changes: 10 additions & 12 deletions graphene_django/tests/test_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,10 @@ def test_schema_representation():
editor: Reporter!

\"""Language\"""
lang: ArticleLang!
lang: TestsArticleLangChoices!

\"""\"""
importance: ArticleImportance
importance: TestsArticleImportanceChoices
}

\"""An object with an ID\"""
Expand All @@ -165,7 +165,7 @@ def test_schema_representation():
scalar DateTime

\"""An enumeration.\"""
enum ArticleLang {
enum TestsArticleLangChoices {
\"""Spanish\"""
ES

Expand All @@ -174,7 +174,7 @@ def test_schema_representation():
}

\"""An enumeration.\"""
enum ArticleImportance {
enum TestsArticleImportanceChoices {
\"""Very important\"""
A_1

Expand All @@ -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

Expand All @@ -219,7 +219,7 @@ def test_schema_representation():
}

\"""An enumeration.\"""
enum ReporterReporterType {
enum TestsReporterReporterTypeChoices {
\"""Regular\"""
A_1

Expand Down Expand Up @@ -547,14 +547,14 @@ class Query(ObjectType):
id: ID!

\"""\"""
kind: PetModelKind!
kind: TestsPetModelKindChoices!

\"""\"""
cuteness: Int!
}

\"""An enumeration.\"""
enum PetModelKind {
enum TestsPetModelKindChoices {
\"""Cat\"""
CAT

Expand Down Expand Up @@ -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
Expand Down