mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-10 16:22:20 +03:00
Refactor validation function to reduce complexity
This commit is contained in:
parent
34db851230
commit
98fd498959
|
@ -62,10 +62,7 @@ def construct_fields(
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
|
|
||||||
def validate_fields(type_, model, fields, only_fields, exclude_fields):
|
def validate_only_fields(only_fields, all_field_names, model, type_):
|
||||||
# Validate the given fields against the model's fields and custom fields
|
|
||||||
all_field_names = set(fields.keys())
|
|
||||||
only_fields = only_fields if only_fields is not ALL_FIELDS else ()
|
|
||||||
for name in only_fields or ():
|
for name in only_fields or ():
|
||||||
if name in all_field_names:
|
if name in all_field_names:
|
||||||
continue
|
continue
|
||||||
|
@ -83,20 +80,21 @@ def validate_fields(type_, model, fields, only_fields, exclude_fields):
|
||||||
type_=type_,
|
type_=type_,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
else:
|
warnings.warn(
|
||||||
warnings.warn(
|
(
|
||||||
(
|
'Field name "{field_name}" doesn\'t exist on Django model "{app_label}.{object_name}". '
|
||||||
'Field name "{field_name}" doesn\'t exist on Django model "{app_label}.{object_name}". '
|
'Consider removing the field from the "fields" list of DjangoObjectType "{type_}" because it has no effect.'
|
||||||
'Consider removing the field from the "fields" list of DjangoObjectType "{type_}" because it has no effect.'
|
).format(
|
||||||
).format(
|
field_name=name,
|
||||||
field_name=name,
|
app_label=model._meta.app_label,
|
||||||
app_label=model._meta.app_label,
|
object_name=model._meta.object_name,
|
||||||
object_name=model._meta.object_name,
|
type_=type_,
|
||||||
type_=type_,
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def validate_exclude_fields(exclude_fields, all_field_names, model, type_):
|
||||||
# Validate exclude fields
|
# Validate exclude fields
|
||||||
for name in exclude_fields or ():
|
for name in exclude_fields or ():
|
||||||
if name in all_field_names:
|
if name in all_field_names:
|
||||||
|
@ -107,19 +105,28 @@ def validate_fields(type_, model, fields, only_fields, exclude_fields):
|
||||||
'Either remove the custom field or remove the field from the "exclude" list.'
|
'Either remove the custom field or remove the field from the "exclude" list.'
|
||||||
).format(field_name=name, type_=type_)
|
).format(field_name=name, type_=type_)
|
||||||
)
|
)
|
||||||
else:
|
continue
|
||||||
if not hasattr(model, name):
|
|
||||||
warnings.warn(
|
if not hasattr(model, name):
|
||||||
(
|
warnings.warn(
|
||||||
'Django model "{app_label}.{object_name}" does not have a field or attribute named "{field_name}". '
|
(
|
||||||
'Consider removing the field from the "exclude" list of DjangoObjectType "{type_}" because it has no effect'
|
'Django model "{app_label}.{object_name}" does not have a field or attribute named "{field_name}". '
|
||||||
).format(
|
'Consider removing the field from the "exclude" list of DjangoObjectType "{type_}" because it has no effect'
|
||||||
field_name=name,
|
).format(
|
||||||
app_label=model._meta.app_label,
|
field_name=name,
|
||||||
object_name=model._meta.object_name,
|
app_label=model._meta.app_label,
|
||||||
type_=type_,
|
object_name=model._meta.object_name,
|
||||||
)
|
type_=type_,
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def validate_fields(type_, model, fields, only_fields, exclude_fields):
|
||||||
|
# Validate the given fields against the model's fields and custom fields
|
||||||
|
all_field_names = set(fields.keys())
|
||||||
|
only_fields = only_fields if only_fields is not ALL_FIELDS else ()
|
||||||
|
|
||||||
|
validate_only_fields(only_fields, all_field_names, model, type_)
|
||||||
|
validate_exclude_fields(exclude_fields, all_field_names, model, type_)
|
||||||
|
|
||||||
|
|
||||||
class DjangoObjectTypeOptions(ObjectTypeOptions):
|
class DjangoObjectTypeOptions(ObjectTypeOptions):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user