From 5200c2ceaa098225976b517eaef7652b5bd1af05 Mon Sep 17 00:00:00 2001 From: Omer Katz Date: Mon, 10 Nov 2014 09:29:41 +0200 Subject: [PATCH 1/3] Added old hooks mixins for those who need an easier migration path from 2.4.x to 3.x. --- rest_framework/mixins.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index 2074a1072..a968b41a4 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -10,6 +10,35 @@ from rest_framework import status from rest_framework.response import Response from rest_framework.settings import api_settings +class CreateOrUpdateHooksMixin(object): + def pre_save(obj): + pass + + def perform_create(self, serializer): + self.pre_save(serializer.instance) + serializer.save() + self.post_save(serializer.instance, created=True) + + def perform_update(self, serializer): + self.pre_save(serializer.instance) + serializer.save() + self.post_save(serializer.instance, created=True) + + def post_save(obj, created=False): + pass + +class DeleteHooksMixin(object): + def pre_delete(obj): + pass + + def perform_delete(self, instance): + self.pre_delete(instance) + instance.delete() + self.post_delete(instance) + + def post_delete(obj): + pass + class CreateModelMixin(object): """ From 5fb300d880086f8b78a734419e8093248f27e06e Mon Sep 17 00:00:00 2001 From: Omer Katz Date: Mon, 10 Nov 2014 14:19:31 +0200 Subject: [PATCH 2/3] Fixed the created flag and made sure the new/updated instance is provided to post_save. --- rest_framework/mixins.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index a968b41a4..7511b7ef7 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -16,13 +16,13 @@ class CreateOrUpdateHooksMixin(object): def perform_create(self, serializer): self.pre_save(serializer.instance) - serializer.save() - self.post_save(serializer.instance, created=True) + instance = serializer.save() + self.post_save(instance, created=True) def perform_update(self, serializer): self.pre_save(serializer.instance) - serializer.save() - self.post_save(serializer.instance, created=True) + instance = serializer.save() + self.post_save(instance, created=False) def post_save(obj, created=False): pass From b9d7a111561b09774f66a4892a1b34061e80c175 Mon Sep 17 00:00:00 2001 From: Omer Katz Date: Mon, 10 Nov 2014 14:31:05 +0200 Subject: [PATCH 3/3] Added pending deprecation warning to the hooks mixins. --- rest_framework/mixins.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index 7511b7ef7..1fcbbb81b 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -6,11 +6,18 @@ which allows mixin classes to be composed in interesting ways. """ from __future__ import unicode_literals +import warnings + from rest_framework import status from rest_framework.response import Response from rest_framework.settings import api_settings class CreateOrUpdateHooksMixin(object): + def __init__(self, *args, **kwargs): + warnings.warn('The pre_save and post_save hooks are deprecated. Use perform_create and perform_update instead.', + PendingDeprecationWarning, stacklevel=2) + super(CreateOrUpdateHooksMixin, self).__init__(*args, **kwargs) + def pre_save(obj): pass @@ -28,6 +35,11 @@ class CreateOrUpdateHooksMixin(object): pass class DeleteHooksMixin(object): + def __init__(self, *args, **kwargs): + warnings.warn('The pre_delete and post_delete hooks are deprecated. Use perform_delete instead.', + PendingDeprecationWarning, stacklevel=2) + super(DeleteHooksMixin, self).__init__(*args, **kwargs) + def pre_delete(obj): pass