Skip to content

Commit dde1f1c

Browse files
author
Ernesto Perez Amigo
committed
Fixed some minors bugs
1 parent 55a30cd commit dde1f1c

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

graphene_django_extras/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from .paginations import LimitOffsetGraphqlPagination, PageGraphqlPagination, CursorGraphqlPagination
88
from .types import DjangoObjectType, DjangoInputObjectType, DjangoListObjectType, DjangoSerializerType
99

10-
VERSION = (0, 1, 3, 'alpha', '1')
10+
VERSION = (0, 1, 3, 'final', '')
1111

1212
__version__ = get_version(VERSION)
1313

graphene_django_extras/converter.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
from graphene_django.fields import DjangoListField
1414
from graphene_django.utils import import_single_dispatch
1515

16+
from .base_types import Date, GenericForeignKeyType, GenericForeignKeyInputType
1617
from .fields import DjangoFilterListField
1718
from .utils import is_required, get_model_fields, get_related_model
18-
from .base_types import Date, GenericForeignKeyType, GenericForeignKeyInputType
1919

2020
singledispatch = import_single_dispatch()
2121

graphene_django_extras/mutation.py

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22
from collections import OrderedDict
33

4+
from django.core.exceptions import ValidationError
45
from graphene import Boolean, List, Field, ID, Argument, ObjectType
56
from graphene.types.base import BaseOptions
67
from graphene.utils.deprecated import warn_deprecation
@@ -11,7 +12,7 @@
1112
from .base_types import object_type_factory, input_object_type_factory
1213
from .registry import get_global_registry
1314
from .types import DjangoObjectType, DjangoInputObjectType
14-
from .utils import get_Object_or_None, kwargs_formatter as native_kwargs_formatter
15+
from .utils import get_Object_or_None, kwargs_formatter as native_kwargs_formatter, parse_validation_exc
1516

1617

1718
class SerializerMutationOptions(BaseOptions):
@@ -162,8 +163,19 @@ def create_mutation(cls, root, info, **kwargs):
162163
serializer = cls._meta.serializer_class(data=new_obj)
163164

164165
if serializer.is_valid():
165-
obj = serializer.save()
166-
return cls.perform_mutate(obj, info)
166+
try:
167+
cls._meta.model(**serializer.validated_data).full_clean()
168+
obj = serializer.save()
169+
return cls.perform_mutate(obj, info)
170+
171+
except ValidationError as e:
172+
errors_list = parse_validation_exc(e)
173+
174+
errors = [
175+
ErrorType(**errors)
176+
for errors in errors_list
177+
]
178+
return cls.get_errors(errors)
167179

168180
else:
169181
errors = [

graphene_django_extras/utils.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def get_obj(app_label, model_name, object_id):
7676
except TypeError as e:
7777
raise TypeError(e.__str__())
7878
except Exception as e:
79-
return e.__str__()
79+
raise Exception(e.__str__())
8080

8181

8282
def create_obj(model, new_obj_key=None, *args, **kwargs):
@@ -328,3 +328,13 @@ def queryset_factory(manager, fields_asts=None, fragments=None, **kwargs):
328328
elif select_related and not prefetch_related:
329329
return _get_queryset(manager.select_related(*select_related))
330330
return _get_queryset(manager)
331+
332+
333+
def parse_validation_exc(validation_exc):
334+
335+
errors_list = []
336+
for key, value in validation_exc.error_dict.items():
337+
for exc in value:
338+
errors_list.append({"field": key, "messages": exc.messages})
339+
340+
return errors_list

0 commit comments

Comments
 (0)