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)
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)
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) ]) ])
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)
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() ])
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
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)
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) ]) ])