From a337dc3b5f3816987515ccb3ce31a6801aa46520 Mon Sep 17 00:00:00 2001 From: George Hickman Date: Wed, 20 Mar 2013 23:55:13 -0700 Subject: [PATCH] Add IfMatchMissing exception Needed to make testing easier. --- rest_framework/exceptions.py | 8 ++++++++ rest_framework/views.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/rest_framework/exceptions.py b/rest_framework/exceptions.py index 9ceb64fe1..229c8df82 100644 --- a/rest_framework/exceptions.py +++ b/rest_framework/exceptions.py @@ -96,6 +96,14 @@ class PreconditionFailed(APIException): self.detail = detail or self.default_detail +class IfMatchMissing(APIException): + default_detail = 'IF_MATCH header is required' + status_code = 400 + + def __init__(self, detail=None): + self.detail = detail or self.default_detail + + class ConfigurationError(Exception): """ Indicates an internal server error. diff --git a/rest_framework/views.py b/rest_framework/views.py index 98c7dcc64..36f5a92fa 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -401,7 +401,7 @@ class APIView(View): if getattr(self, 'use_etags', False) and request.method.lower() in ('put', 'delete'): self.etag_header = request.META.get('HTTP_IF_MATCH') if self.etag_header is None: - return Response({'detail': 'IF_MATCH header is required'}, status=400, exception=True) + raise exceptions.IfMatchMissing response = handler(request, *args, **kwargs)