This commit is contained in:
Jeff Tratner 2020-05-14 22:52:58 -07:00
parent 4246dab3d6
commit b61ecd88ec
No known key found for this signature in database
GPG Key ID: 59A47B7A1FEE75A1
2 changed files with 25 additions and 11 deletions

View File

@ -104,8 +104,13 @@ class DjangoFormMutation(BaseDjangoFormMutation):
@classmethod
def __init_subclass_with_meta__(
cls, form_class=None, only_fields=(), exclude_fields=(),
fields=None, exclude=(), input_fields=None,
cls,
form_class=None,
only_fields=(),
exclude_fields=(),
fields=None,
exclude=(),
input_fields=None,
**options
):
@ -113,28 +118,33 @@ class DjangoFormMutation(BaseDjangoFormMutation):
raise Exception("form_class is required for DjangoFormMutation")
form = form_class()
if (any([fields, exclude, input_fields])
and (only_fields or exclude_fields)):
raise Exception("Cannot specify legacy `only_fields` or `exclude_fields` params with"
" `only`, `exclude`, or `input_fields` params")
if any([fields, exclude, input_fields]) and (only_fields or exclude_fields):
raise Exception(
"Cannot specify legacy `only_fields` or `exclude_fields` params with"
" `only`, `exclude`, or `input_fields` params"
)
if only_fields or exclude_fields:
warnings.warn(
"only_fields/exclude_fields have been deprecated, use "
"input_fields or only/exclude (for output fields)"
"instead",
DeprecationWarning
DeprecationWarning,
)
if not fields or exclude:
warnings.warn(
"a future version of graphene-django will require fields or exclude."
" Set fields='__all__' to allow all fields through.",
DeprecationWarning
DeprecationWarning,
)
if not input_fields and input_fields is not None:
input_fields = {}
else:
input_fields = fields_for_form(form, only_fields or input_fields, exclude_fields)
output_fields = fields_for_form(form, only_fields or fields, exclude_fields or exclude)
input_fields = fields_for_form(
form, only_fields or input_fields, exclude_fields
)
output_fields = fields_for_form(
form, only_fields or fields, exclude_fields or exclude
)
_meta = DjangoFormMutationOptions(cls)
_meta.form_class = form_class

View File

@ -81,6 +81,7 @@ def test_no_input_fields():
class Meta:
form_class = MyForm
input_fields = []
assert set(MyMutation.Input._meta.fields.keys()) == set(["client_mutation_id"])
@ -90,7 +91,7 @@ def test_filtering_input_fields():
form_class = MyForm
input_fields = ["text"]
assert "text" in MyMutation.Input._meta.fields
assert "text" in MyMutation.Input._meta.fields
assert "another" not in MyMutation.Input._meta.fields
@ -99,6 +100,7 @@ def test_select_output_fields():
class Meta:
form_class = MyForm
fields = ["text"]
assert "text" in MyMutation._meta.fields
assert "another" not in MyMutation._meta.fields
@ -106,8 +108,10 @@ def test_select_output_fields():
def test_filtering_output_fields_exclude():
class FormWithWeirdOutput(MyForm):
"""Weird form that has extra cleaned_data we want to expose"""
text = forms.CharField()
another = forms.CharField(required=False)
def clean(self):
super(FormWithWeirdOutput, self).clean()
self.cleaned_data["some_integer"] = 5