def create_mutation(cls, root, info, **kwargs):
        new_obj = kwargs.get(cls._meta.input_field_name, None)

        if new_obj:
            serializer = cls._meta.serializer_class(data=new_obj)

            if serializer.is_valid():
                try:
                    cls._meta.model(**serializer.validated_data).full_clean()
                    obj = serializer.save()
                    return cls.perform_mutate(obj, info)

                except ValidationError as e:
                    errors_list = parse_validation_exc(e)

                    errors = [
                        ErrorType(**errors)
                        for errors in errors_list
                    ]
                    return cls.get_errors(errors)

            else:
                errors = [
                    ErrorType(field=key, messages=value)
                    for key, value in serializer.errors.items()
                ]
                return cls.get_errors(errors)
Example #2
0
    def update(cls, root, info, **kwargs):
        new_obj = kwargs.get(cls._meta.input_field_name, None)

        if new_obj:
            model = cls._meta.model
            id = new_obj.pop('id')
            old_obj = get_Object_or_None(model, pk=id)
            if old_obj:
                new_obj_serialized = dict(cls._meta.serializer_class(old_obj).data)
                new_obj_serialized.update(new_obj)
                serializer = cls._meta.serializer_class(old_obj, data=new_obj_serialized)

                if serializer.is_valid():
                    obj = serializer.save()
                    return cls.perform_mutate(obj, info)
                else:
                    errors = [
                        ErrorType(field=key, messages=value)
                        for key, value in serializer.errors.items()
                    ]
            else:
                errors = [
                    ErrorType(
                        field='id',
                        messages=['A {} obj with id: {} do not exist'.format(model.__name__, id)])
                ]
            return cls.get_errors(errors)
Example #3
0
    def update(cls, root, info, **kwargs):
        data = kwargs.get(cls._meta.input_field_name)
        request_type = info.context.META.get("CONTENT_TYPE", '')
        if "multipart/form-data" in request_type:
            data.update(
                {name: value
                 for name, value in info.context.FILES.items()})

        pk = data.pop('id')
        old_obj = get_Object_or_None(cls._meta.model, pk=pk)
        if old_obj:
            nested_objs = cls.manage_nested_fields(data, root, info)
            serializer = cls._meta.serializer_class(
                old_obj,
                data=data,
                partial=True,
                **cls.get_serializer_kwargs(root, info, **kwargs))

            ok, obj = cls.save(serializer, root, info)
            if not ok:
                return cls.get_errors(obj)
            elif nested_objs:
                [
                    getattr(obj, field).add(*objs)
                    for field, objs in nested_objs.items()
                ]
            return cls.perform_mutate(obj, info)
        else:
            return cls.get_errors([
                ErrorType(field='id',
                          messages=[
                              'A {} obj with id: {} do not exist'.format(
                                  cls._meta.model.__name__, pk)
                          ])
            ])
Example #4
0
    def update_mutation(cls, root, info, **kwargs):
        new_obj = kwargs.get(cls._meta.input_field_name, None)

        if new_obj:
            model = cls._meta.model
            id = new_obj.pop('id')
            old_obj = get_Object_or_None(model, pk=id)
            if old_obj:
                new_obj_serialized = dict(
                    cls._meta.serializer_class(
                        old_obj,
                        **cls.get_serializer_kwargs(root, info,
                                                    **kwargs)).data)
                new_obj_serialized.update(new_obj)
                serializer = cls._meta.serializer_class(
                    old_obj,
                    data=new_obj_serialized,
                    **cls.get_serializer_kwargs(root, info, **kwargs))

                if serializer.is_valid():
                    try:
                        # cls._meta.model(**serializer.validated_data).full_clean()
                        obj = serializer.save()
                        return cls.perform_mutate(obj, info)

                    except ValidationError as e:
                        errors_list = parse_validation_exc(e)

                        errors = [
                            ErrorType(**errors) for errors in errors_list
                        ]
                        return cls.get_errors(errors)
                else:
                    errors = [
                        ErrorType(field=key, messages=value)
                        for key, value in serializer.errors.items()
                    ]
            else:
                errors = [
                    ErrorType(field='id',
                              messages=[
                                  'A {} obj with id: {} do not exist'.format(
                                      model.__name__, id)
                              ])
                ]
            return cls.get_errors(errors)
Example #5
0
    def save_mutation(cls, root, info, **kwargs):
        new_obj = kwargs.get(cls._meta.input_field_name, None)
        files = info.context.FILES
        data = dict(new_obj, **files)

        if new_obj:
            model = cls._meta.model
            id = new_obj.pop('id', None)
            if id:
                old_obj = get_Object_or_None(model, pk=id)
                if old_obj:
                    serializer = cls._meta.serializer_class(
                        old_obj,
                        data=data,
                        partial=True,
                        **cls.get_serializer_kwargs(root, info, **kwargs))
                else:
                    return cls.get_errors([
                        ErrorType(
                            field='id',
                            messages=[
                                'A {} obj with id: {} do not exist'.format(
                                    model.__name__, id)
                            ])
                    ])
            else:
                serializer = cls._meta.serializer_class(
                    data=data,
                    **cls.get_serializer_kwargs(root, info, **kwargs))

            if serializer.is_valid():
                try:
                    obj = serializer.save()
                    return cls.perform_mutate(obj, info)

                except ValidationError as e:
                    return cls.get_errors([
                        ErrorType(**errors)
                        for errors in parse_validation_exc(e)
                    ])
            else:
                return cls.get_errors([
                    ErrorType(field=key, messages=value)
                    for key, value in serializer.errors.items()
                ])
Example #6
0
    def save(cls, serialized_obj, root, info, **kwargs):
        if serialized_obj.is_valid():
            obj = serialized_obj.save()
            return True, obj

        else:
            errors = [
                ErrorType(field=key, messages=value)
                for key, value in serialized_obj.errors.items()
            ]
            return False, errors
Example #7
0
    def create(cls, root, info, **kwargs):
        new_obj = kwargs.get(cls._meta.input_field_name, None)

        if new_obj:
            serializer = cls._meta.serializer_class(data=new_obj)

            if serializer.is_valid():
                obj = serializer.save()
                return cls.perform_mutate(obj, info)

            else:
                errors = [
                    ErrorType(field=key, messages=value)
                    for key, value in serializer.errors.items()
                ]
                return cls.get_errors(errors)
Example #8
0
    def delete(cls, root, info, **kwargs):
        pk = kwargs.get('id')

        old_obj = get_Object_or_None(cls._meta.model, pk=pk)
        if old_obj:
            old_obj.delete()
            old_obj.id = pk
            return cls.perform_mutate(old_obj, info)
        else:
            return cls.get_errors([
                ErrorType(field='id',
                          messages=[
                              'A {} obj with id {} do not exist'.format(
                                  cls._meta.model.__name__, pk)
                          ])
            ])