Skip to content

Commit

Permalink
Version 2.3.10
Browse files Browse the repository at this point in the history
  • Loading branch information
tomchristie committed Dec 6, 2013
1 parent 85d9eb0 commit 910de38
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 2 deletions.
21 changes: 21 additions & 0 deletions docs/api-guide/status-codes.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ Using bare status codes in your responses isn't recommended. REST framework inc

The full set of HTTP status codes included in the `status` module is listed below.

The module also includes a set of helper functions for testing if a status code is in a given range.

from rest_framework import status
from rest_framework.test import APITestCase

class ExampleTestCase(APITestCase):
def test_url_root(self):
url = reverse('index')
response = self.client.get(url)
self.assertTrue(status.is_success(response.status_code))

For more information on proper usage of HTTP status codes see [RFC 2616][rfc2616]
and [RFC 6585][rfc6585].

Expand Down Expand Up @@ -90,6 +102,15 @@ Response status codes beginning with the digit "5" indicate cases in which the s
HTTP_505_HTTP_VERSION_NOT_SUPPORTED
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

## Helper functions

The following helper functions are available for identifying the category of the response code.

is_informational() # 1xx
is_success() # 2xx
is_redirect() # 3xx
is_client_error() # 4xx
is_server_error() # 5xx

[rfc2324]: http://www.ietf.org/rfc/rfc2324.txt
[rfc2616]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Expand Down
5 changes: 4 additions & 1 deletion docs/topics/release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,13 @@ You can determine your currently installed version using `pip freeze`:

## 2.3.x series

### Master
### 2.3.10

**Date**: 6th December 2013

* Add in choices information for ChoiceFields in response to `OPTIONS` requests.
* Added `pre_delete()` and `post_delete()` method hooks.
* Added status code category helper functions.
* Bugfix: Partial updates which erronously set a related field to `None` now correctly fail validation instead of raising an exception.
* Bugfix: Responses without any content no longer include an HTTP `'Content-Type'` header.
* Bugfix: Correctly handle validation errors in PUT-as-create case, responding with 400.
Expand Down
2 changes: 1 addition & 1 deletion rest_framework/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"""

__title__ = 'Django REST framework'
__version__ = '2.3.9'
__version__ = '2.3.10'
__author__ = 'Tom Christie'
__license__ = 'BSD 2-Clause'
__copyright__ = 'Copyright 2011-2013 Tom Christie'
Expand Down
17 changes: 17 additions & 0 deletions rest_framework/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,23 @@
"""
from __future__ import unicode_literals


def is_informational(code):
return code >= 100 and code <= 199

def is_success(code):
return code >= 200 and code <= 299

def is_redirect(code):
return code >= 300 and code <= 399

def is_client_error(code):
return code >= 400 and code <= 499

def is_server_error(code):
return code >= 500 and code <= 599


HTTP_100_CONTINUE = 100
HTTP_101_SWITCHING_PROTOCOLS = 101
HTTP_200_OK = 200
Expand Down
33 changes: 33 additions & 0 deletions rest_framework/tests/test_status.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from __future__ import unicode_literals
from django.test import TestCase
from rest_framework.status import (
is_informational, is_success, is_redirect, is_client_error, is_server_error
)


class TestStatus(TestCase):
def test_status_categories(self):
self.assertFalse(is_informational(99))
self.assertTrue(is_informational(100))
self.assertTrue(is_informational(199))
self.assertFalse(is_informational(200))

self.assertFalse(is_success(199))
self.assertTrue(is_success(200))
self.assertTrue(is_success(299))
self.assertFalse(is_success(300))

self.assertFalse(is_redirect(299))
self.assertTrue(is_redirect(300))
self.assertTrue(is_redirect(399))
self.assertFalse(is_redirect(400))

self.assertFalse(is_client_error(399))
self.assertTrue(is_client_error(400))
self.assertTrue(is_client_error(499))
self.assertFalse(is_client_error(500))

self.assertFalse(is_server_error(499))
self.assertTrue(is_server_error(500))
self.assertTrue(is_server_error(599))
self.assertFalse(is_server_error(600))

0 comments on commit 910de38

Please sign in to comment.