[Python-modules-commits] [djangorestframework] 01/06: Import djangorestframework_3.2.2.orig.tar.gz

Brian May bam at moszumanska.debian.org
Tue Oct 20 07:57:30 UTC 2015


This is an automated email from the git hooks/post-receive script.

bam pushed a commit to branch master
in repository djangorestframework.

commit 03d8c77108efe827ce8f553e9cf4d30f72f7654a
Author: Brian May <bam at debian.org>
Date:   Tue Oct 20 17:54:41 2015 +1100

    Import djangorestframework_3.2.2.orig.tar.gz
---
 .gitignore                                         |    1 +
 .isort.cfg                                         |    6 +
 .travis.yml                                        |   28 +-
 .tx/config                                         |    9 +
 CONTRIBUTING.md                                    |   73 +-
 LICENSE.md                                         |   24 +
 MANIFEST.in                                        |    2 +
 README.md                                          |   86 +-
 docs/api-guide/authentication.md                   |  155 +--
 docs/api-guide/exceptions.md                       |   24 +-
 docs/api-guide/fields.md                           |   63 +-
 docs/api-guide/filtering.md                        |    9 +-
 docs/api-guide/generic-views.md                    |   67 +-
 docs/api-guide/metadata.md                         |   14 +-
 docs/api-guide/pagination.md                       |  342 ++++--
 docs/api-guide/parsers.md                          |  100 +-
 docs/api-guide/permissions.md                      |   46 +-
 docs/api-guide/relations.md                        |  175 +++-
 docs/api-guide/renderers.md                        |  220 ++--
 docs/api-guide/requests.md                         |   14 -
 docs/api-guide/routers.md                          |   10 +-
 docs/api-guide/serializers.md                      |   93 +-
 docs/api-guide/settings.md                         |   46 +-
 docs/api-guide/testing.md                          |   12 +-
 docs/api-guide/validators.md                       |   20 +-
 docs/api-guide/versioning.md                       |  220 ++++
 docs/api-guide/viewsets.md                         |   11 +-
 docs/img/admin.png                                 |  Bin 0 -> 55904 bytes
 docs/img/cursor-pagination.png                     |  Bin 0 -> 12221 bytes
 docs/img/link-header-pagination.png                |  Bin 0 -> 35799 bytes
 docs/img/pages-pagination.png                      |  Bin 0 -> 10229 bytes
 docs/index.md                                      |   54 +-
 docs/topics/3.0-announcement.md                    |    2 +-
 docs/topics/3.1-announcement.md                    |  209 ++++
 docs/topics/3.2-announcement.md                    |  113 ++
 docs/topics/browsable-api.md                       |    3 +-
 docs/topics/credits.md                             |  404 --------
 docs/topics/internationalization.md                |  113 ++
 docs/topics/project-management.md                  |   69 +-
 docs/topics/release-notes.md                       |  818 +++++----------
 docs/topics/rest-hypermedia-hateoas.md             |    2 +-
 docs/topics/third-party-resources.md               |   21 +-
 docs/topics/writable-nested-serializers.md         |    4 +-
 docs/tutorial/1-serialization.md                   |    5 +-
 docs/tutorial/2-requests-and-responses.md          |   10 +-
 .../5-relationships-and-hyperlinked-apis.md        |    8 +-
 docs/tutorial/quickstart.md                        |    8 +-
 docs_theme/404.html                                |  219 +---
 docs_theme/base.html                               |  107 +-
 docs_theme/css/default.css                         |   43 +-
 docs_theme/js/theme.js                             |   34 +-
 docs_theme/nav.html                                |    3 +-
 mkdocs.yml                                         |  100 +-
 requirements.txt                                   |   39 +-
 requirements/requirements-codestyle.txt            |    6 +
 requirements/requirements-documentation.txt        |    2 +
 requirements/requirements-optionals.txt            |    4 +
 requirements/requirements-packaging.txt            |    8 +
 requirements/requirements-testing.txt              |    4 +
 rest_framework/__init__.py                         |    2 +-
 rest_framework/authentication.py                   |  226 +---
 rest_framework/authtoken/admin.py                  |    1 +
 .../authtoken/migrations/0001_initial.py           |    2 +-
 rest_framework/authtoken/models.py                 |    1 -
 rest_framework/authtoken/serializers.py            |    4 +-
 rest_framework/authtoken/views.py                  |   10 +-
 rest_framework/compat.py                           |  182 +---
 rest_framework/decorators.py                       |    5 +-
 rest_framework/exceptions.py                       |   52 +-
 rest_framework/fields.py                           |  498 ++++++---
 rest_framework/filters.py                          |   51 +-
 rest_framework/generics.py                         |  232 ++---
 rest_framework/locale/ar/LC_MESSAGES/django.mo     |  Bin 0 -> 4888 bytes
 rest_framework/locale/ar/LC_MESSAGES/django.po     |  366 +++++++
 rest_framework/locale/be/LC_MESSAGES/django.mo     |  Bin 0 -> 655 bytes
 rest_framework/locale/be/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/cs/LC_MESSAGES/django.mo     |  Bin 0 -> 9140 bytes
 rest_framework/locale/cs/LC_MESSAGES/django.po     |  367 +++++++
 rest_framework/locale/da/LC_MESSAGES/django.mo     |  Bin 0 -> 8905 bytes
 rest_framework/locale/da/LC_MESSAGES/django.po     |  366 +++++++
 rest_framework/locale/de/LC_MESSAGES/django.mo     |  Bin 0 -> 9544 bytes
 rest_framework/locale/de/LC_MESSAGES/django.po     |  369 +++++++
 rest_framework/locale/en/LC_MESSAGES/django.mo     |  Bin 0 -> 9406 bytes
 rest_framework/locale/en/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/en_CA/LC_MESSAGES/django.mo  |  Bin 0 -> 529 bytes
 rest_framework/locale/en_CA/LC_MESSAGES/django.po  |  365 +++++++
 rest_framework/locale/en_US/LC_MESSAGES/django.mo  |  Bin 0 -> 378 bytes
 rest_framework/locale/en_US/LC_MESSAGES/django.po  |  363 +++++++
 rest_framework/locale/es/LC_MESSAGES/django.mo     |  Bin 0 -> 9844 bytes
 rest_framework/locale/es/LC_MESSAGES/django.po     |  370 +++++++
 rest_framework/locale/et/LC_MESSAGES/django.mo     |  Bin 0 -> 8836 bytes
 rest_framework/locale/et/LC_MESSAGES/django.po     |  366 +++++++
 rest_framework/locale/fr/LC_MESSAGES/django.mo     |  Bin 0 -> 9389 bytes
 rest_framework/locale/fr/LC_MESSAGES/django.po     |  369 +++++++
 rest_framework/locale/fr_CA/LC_MESSAGES/django.mo  |  Bin 0 -> 527 bytes
 rest_framework/locale/fr_CA/LC_MESSAGES/django.po  |  365 +++++++
 rest_framework/locale/gl/LC_MESSAGES/django.mo     |  Bin 0 -> 515 bytes
 rest_framework/locale/gl/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/gl_ES/LC_MESSAGES/django.mo  |  Bin 0 -> 669 bytes
 rest_framework/locale/gl_ES/LC_MESSAGES/django.po  |  366 +++++++
 rest_framework/locale/hu/LC_MESSAGES/django.mo     |  Bin 0 -> 9228 bytes
 rest_framework/locale/hu/LC_MESSAGES/django.po     |  366 +++++++
 rest_framework/locale/id/LC_MESSAGES/django.mo     |  Bin 0 -> 510 bytes
 rest_framework/locale/id/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/it/LC_MESSAGES/django.mo     |  Bin 0 -> 9512 bytes
 rest_framework/locale/it/LC_MESSAGES/django.po     |  369 +++++++
 rest_framework/locale/ko_KR/LC_MESSAGES/django.mo  |  Bin 0 -> 10148 bytes
 rest_framework/locale/ko_KR/LC_MESSAGES/django.po  |  366 +++++++
 rest_framework/locale/mk/LC_MESSAGES/django.mo     |  Bin 0 -> 10744 bytes
 rest_framework/locale/mk/LC_MESSAGES/django.po     |  366 +++++++
 rest_framework/locale/nb/LC_MESSAGES/django.mo     |  Bin 0 -> 524 bytes
 rest_framework/locale/nb/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/nl/LC_MESSAGES/django.mo     |  Bin 0 -> 9267 bytes
 rest_framework/locale/nl/LC_MESSAGES/django.po     |  366 +++++++
 rest_framework/locale/pl/LC_MESSAGES/django.mo     |  Bin 0 -> 9602 bytes
 rest_framework/locale/pl/LC_MESSAGES/django.po     |  368 +++++++
 rest_framework/locale/pt/LC_MESSAGES/django.mo     |  Bin 0 -> 517 bytes
 rest_framework/locale/pt/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/pt_BR/LC_MESSAGES/django.mo  |  Bin 0 -> 9204 bytes
 rest_framework/locale/pt_BR/LC_MESSAGES/django.po  |  367 +++++++
 rest_framework/locale/pt_PT/LC_MESSAGES/django.mo  |  Bin 0 -> 534 bytes
 rest_framework/locale/pt_PT/LC_MESSAGES/django.po  |  365 +++++++
 rest_framework/locale/ru/LC_MESSAGES/django.mo     |  Bin 0 -> 11487 bytes
 rest_framework/locale/ru/LC_MESSAGES/django.po     |  368 +++++++
 rest_framework/locale/sk/LC_MESSAGES/django.mo     |  Bin 0 -> 9524 bytes
 rest_framework/locale/sk/LC_MESSAGES/django.po     |  366 +++++++
 rest_framework/locale/sv/LC_MESSAGES/django.mo     |  Bin 0 -> 9519 bytes
 rest_framework/locale/sv/LC_MESSAGES/django.po     |  367 +++++++
 rest_framework/locale/tr/LC_MESSAGES/django.mo     |  Bin 0 -> 9211 bytes
 rest_framework/locale/tr/LC_MESSAGES/django.po     |  371 +++++++
 rest_framework/locale/tr_TR/LC_MESSAGES/django.mo  |  Bin 0 -> 522 bytes
 rest_framework/locale/tr_TR/LC_MESSAGES/django.po  |  365 +++++++
 rest_framework/locale/uk/LC_MESSAGES/django.mo     |  Bin 0 -> 590 bytes
 rest_framework/locale/uk/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/vi/LC_MESSAGES/django.mo     |  Bin 0 -> 510 bytes
 rest_framework/locale/vi/LC_MESSAGES/django.po     |  365 +++++++
 rest_framework/locale/zh_CN/LC_MESSAGES/django.mo  |  Bin 0 -> 9261 bytes
 rest_framework/locale/zh_CN/LC_MESSAGES/django.po  |  367 +++++++
 rest_framework/metadata.py                         |   20 +-
 rest_framework/mixins.py                           |   12 +-
 rest_framework/negotiation.py                      |   19 +-
 rest_framework/pagination.py                       |  764 +++++++++++++-
 rest_framework/parsers.py                          |  113 +-
 rest_framework/permissions.py                      |   78 +-
 rest_framework/relations.py                        |  161 ++-
 rest_framework/renderers.py                        |  277 ++---
 rest_framework/request.py                          |  114 +-
 rest_framework/response.py                         |   16 +-
 rest_framework/reverse.py                          |   48 +-
 rest_framework/routers.py                          |   58 +-
 rest_framework/serializers.py                      |  827 ++++++++++-----
 rest_framework/settings.py                         |   42 +-
 .../static/rest_framework/css/bootstrap-tweaks.css |   45 +-
 .../static/rest_framework/css/default.css          |   11 +-
 rest_framework/static/rest_framework/js/default.js |    8 +
 rest_framework/templates/rest_framework/admin.html |  231 +++++
 .../templates/rest_framework/admin/detail.html     |   10 +
 .../templates/rest_framework/admin/dict_value.html |    0
 .../templates/rest_framework/admin/list.html       |   21 +
 .../templates/rest_framework/admin/list_value.html |   11 +
 .../rest_framework/admin/simple_list_value.html    |    2 +
 .../templates/rest_framework/api_form.html         |    6 +-
 rest_framework/templates/rest_framework/base.html  |  453 ++++----
 .../rest_framework/horizontal/checkbox.html        |   35 +-
 .../horizontal/checkbox_multiple.html              |   57 +-
 .../rest_framework/horizontal/fieldset.html        |   21 +-
 .../templates/rest_framework/horizontal/form.html  |   23 +-
 .../templates/rest_framework/horizontal/input.html |   29 +-
 .../rest_framework/horizontal/list_fieldset.html   |   23 +-
 .../templates/rest_framework/horizontal/radio.html |   63 +-
 .../rest_framework/horizontal/select.html          |   49 +-
 .../rest_framework/horizontal/select_multiple.html |   48 +-
 .../rest_framework/horizontal/textarea.html        |   29 +-
 .../templates/rest_framework/inline/checkbox.html  |   12 +-
 .../rest_framework/inline/checkbox_multiple.html   |   19 +-
 .../templates/rest_framework/inline/fieldset.html  |    6 +-
 .../templates/rest_framework/inline/form.html      |   16 +-
 .../templates/rest_framework/inline/input.html     |   11 +-
 .../templates/rest_framework/inline/radio.html     |   37 +-
 .../templates/rest_framework/inline/select.html    |   27 +-
 .../rest_framework/inline/select_multiple.html     |   30 +-
 .../templates/rest_framework/inline/textarea.html  |   11 +-
 .../templates/rest_framework/login_base.html       |  124 ++-
 .../rest_framework/pagination/numbers.html         |   47 +
 .../pagination/previous_and_next.html              |   21 +
 .../templates/rest_framework/raw_data_form.html    |   12 +-
 .../rest_framework/vertical/checkbox.html          |   30 +-
 .../rest_framework/vertical/checkbox_multiple.html |   61 +-
 .../rest_framework/vertical/fieldset.html          |   18 +-
 .../templates/rest_framework/vertical/form.html    |   17 +-
 .../templates/rest_framework/vertical/input.html   |   27 +-
 .../rest_framework/vertical/list_fieldset.html     |    9 +-
 .../templates/rest_framework/vertical/radio.html   |   64 +-
 .../templates/rest_framework/vertical/select.html  |   43 +-
 .../rest_framework/vertical/select_multiple.html   |   36 +-
 .../rest_framework/vertical/textarea.html          |   25 +-
 rest_framework/templatetags/rest_framework.py      |   79 +-
 rest_framework/test.py                             |   13 +-
 rest_framework/throttling.py                       |    5 +-
 rest_framework/urlpatterns.py                      |   10 +-
 rest_framework/urls.py                             |   15 +-
 rest_framework/utils/breadcrumbs.py                |   10 +-
 rest_framework/utils/encoders.py                   |   77 +-
 rest_framework/utils/field_mapping.py              |   19 +-
 rest_framework/utils/formatting.py                 |    5 +-
 rest_framework/utils/html.py                       |    3 +-
 rest_framework/utils/mediatypes.py                 |    2 +
 rest_framework/utils/model_meta.py                 |   26 +-
 rest_framework/utils/representation.py             |    5 +-
 rest_framework/utils/serializer_helpers.py         |   28 +
 rest_framework/utils/urls.py                       |   25 +
 rest_framework/validators.py                       |   15 +-
 rest_framework/versioning.py                       |  180 ++++
 rest_framework/views.py                            |   93 +-
 rest_framework/viewsets.py                         |   13 +-
 runtests.py                                        |   38 +-
 setup.py                                           |    7 +-
 tests/browsable_api/auth_urls.py                   |   10 +-
 tests/browsable_api/no_auth_urls.py                |   10 +-
 tests/browsable_api/test_browsable_api.py          |    1 +
 tests/browsable_api/test_browsable_nested_api.py   |   42 +
 tests/browsable_api/views.py                       |    5 +-
 tests/conftest.py                                  |   27 -
 tests/description.py                               |    1 -
 tests/models.py                                    |    1 +
 tests/test_atomic_requests.py                      |  147 +++
 tests/test_authentication.py                       |  478 +--------
 tests/test_decorators.py                           |   16 +-
 tests/test_description.py                          |    9 +-
 tests/test_fields.py                               |  475 ++++++++-
 tests/test_filters.py                              |   16 +-
 tests/test_generics.py                             |   51 +-
 tests/test_htmlrenderer.py                         |   13 +-
 tests/test_metadata.py                             |  213 +++-
 tests/test_middleware.py                           |    9 +-
 tests/test_model_serializer.py                     |  205 +++-
 tests/test_multitable_inheritance.py               |    2 +
 tests/test_negotiation.py                          |    5 +-
 tests/test_pagination.py                           | 1087 +++++++++++---------
 tests/test_parsers.py                              |   70 +-
 tests/test_permissions.py                          |  166 ++-
 tests/test_relations.py                            |   45 +-
 tests/test_relations_generic.py                    |    6 +-
 tests/test_relations_hyperlink.py                  |   13 +-
 tests/test_relations_pk.py                         |   26 +-
 tests/test_relations_slug.py                       |    5 +-
 tests/test_renderers.py                            |  274 +----
 tests/test_request.py                              |   71 +-
 tests/test_response.py                             |   25 +-
 tests/test_reverse.py                              |   36 +-
 tests/test_routers.py                              |   65 +-
 tests/test_serializer.py                           |   10 +-
 tests/test_serializer_bulk_update.py               |    6 +-
 tests/test_serializer_lists.py                     |    3 +-
 tests/test_serializer_nested.py                    |   87 ++
 tests/test_settings.py                             |   15 +
 tests/test_status.py                               |    5 +-
 tests/test_templatetags.py                         |   20 +-
 tests/test_testing.py                              |   26 +-
 tests/test_throttling.py                           |   10 +-
 tests/test_urlpatterns.py                          |   55 +-
 tests/test_utils.py                                |   14 +-
 tests/test_validation.py                           |   53 +-
 tests/test_validators.py                           |   58 +-
 tests/test_versioning.py                           |  311 ++++++
 tests/test_views.py                                |   14 +-
 tests/test_viewsets.py                             |    2 +-
 tests/test_write_only_fields.py                    |    1 +
 tests/urls.py                                      |    4 +-
 tests/utils.py                                     |   24 +
 tox.ini                                            |   41 +-
 271 files changed, 21346 insertions(+), 5770 deletions(-)

diff --git a/.gitignore b/.gitignore
index 3d5f104..e9222c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ MANIFEST
 
 !.gitignore
 !.travis.yml
+!.isort.cfg
diff --git a/.isort.cfg b/.isort.cfg
new file mode 100644
index 0000000..bd5648e
--- /dev/null
+++ b/.isort.cfg
@@ -0,0 +1,6 @@
+[settings]
+skip=.tox
+atomic=true
+multi_line_output=5
+known_third_party=pytest,django
+known_first_party=rest_framework
diff --git a/.travis.yml b/.travis.yml
index 4f92978..87db5e0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,8 +3,12 @@ language: python
 sudo: false
 
 env:
-    - TOX_ENV=py27-flake8
+    - TOX_ENV=py27-lint
     - TOX_ENV=py27-docs
+    - TOX_ENV=py34-django18
+    - TOX_ENV=py33-django18
+    - TOX_ENV=py32-django18
+    - TOX_ENV=py27-django18
     - TOX_ENV=py34-django17
     - TOX_ENV=py33-django17
     - TOX_ENV=py32-django17
@@ -19,15 +23,25 @@ env:
     - TOX_ENV=py32-django15
     - TOX_ENV=py27-django15
     - TOX_ENV=py26-django15
-    - TOX_ENV=py27-django14
-    - TOX_ENV=py26-django14
-    - TOX_ENV=py34-django18alpha
-    - TOX_ENV=py33-django18alpha
-    - TOX_ENV=py32-django18alpha
-    - TOX_ENV=py27-django18alpha
+    - TOX_ENV=py27-djangomaster
+    - TOX_ENV=py32-djangomaster
+    - TOX_ENV=py33-djangomaster
+    - TOX_ENV=py34-djangomaster
+
+matrix:
+  fast_finish: true
+  allow_failures:
+    - env: TOX_ENV=py27-djangomaster
+    - env: TOX_ENV=py32-djangomaster
+    - env: TOX_ENV=py33-djangomaster
+    - env: TOX_ENV=py34-djangomaster
 
 install:
   - pip install tox
 
 script:
     - tox -e $TOX_ENV
+
+after_success:
+    - pip install codecov
+    - codecov
diff --git a/.tx/config b/.tx/config
new file mode 100644
index 0000000..271fa1e
--- /dev/null
+++ b/.tx/config
@@ -0,0 +1,9 @@
+[main]
+host = https://www.transifex.com
+
+[django-rest-framework.djangopo]
+file_filter = rest_framework/locale/<lang>/LC_MESSAGES/django.po
+source_file = rest_framework/locale/en_US/LC_MESSAGES/django.po
+source_lang = en_US
+type = PO
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b963a49..a383660 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -10,9 +10,9 @@ There are many ways you can contribute to Django REST framework.  We'd like it t
 
 The most important thing you can do to help push the REST framework project forward is to be actively involved wherever possible.  Code contributions are often overvalued as being the primary way to get involved in a project, we don't believe that needs to be the case.
 
-If you use REST framework, we'd love you to be vocal about your experiences with it - you might consider writing a blog post about using REST framework, or publishing a tutorial about building a project with a particular Javascript framework.  Experiences from beginners can be particularly helpful because you'll be in the best position to assess which bits of REST framework are more difficult to understand and work with.
+If you use REST framework, we'd love you to be vocal about your experiences with it - you might consider writing a blog post about using REST framework, or publishing a tutorial about building a project with a particular JavaScript framework.  Experiences from beginners can be particularly helpful because you'll be in the best position to assess which bits of REST framework are more difficult to understand and work with.
 
-Other really great ways you can help move the community forward include helping answer questions on the [discussion group][google-group], or setting up an [email alert on StackOverflow][so-filter] so that you get notified of any new questions with the `django-rest-framework` tag.
+Other really great ways you can help move the community forward include helping to answer questions on the [discussion group][google-group], or setting up an [email alert on StackOverflow][so-filter] so that you get notified of any new questions with the `django-rest-framework` tag.
 
 When answering questions make sure to help future contributors find their way around by hyperlinking wherever possible to related threads and tickets, and include backlinks from those items if relevant.
 
@@ -38,7 +38,7 @@ Some tips on good issue reporting:
 
 ## Triaging issues
 
-Getting involved in triaging incoming issues is a good way to start contributing.  Every single ticket that comes into the ticket tracker needs to be reviewed in order to determine what the next steps should be.  Anyone can help out with this, you just need to be willing to
+Getting involved in triaging incoming issues is a good way to start contributing.  Every single ticket that comes into the ticket tracker needs to be reviewed in order to determine what the next steps should be.  Anyone can help out with this, you just need to be willing to:
 
 * Read through the ticket - does it make sense, is it missing any context that would help explain it better?
 * Is the ticket reported in the correct place, would it be better suited as a discussion on the discussion group?
@@ -52,7 +52,7 @@ To start developing on Django REST framework, clone the repo:
 
     git clone git at github.com:tomchristie/django-rest-framework.git
 
-Changes should broadly follow the [PEP 8][pep-8] style conventions, and we recommend you setup your editor to automatically indicated non-conforming styles.
+Changes should broadly follow the [PEP 8][pep-8] style conventions, and we recommend you set up your editor to automatically indicate non-conforming styles.
 
 ## Testing
 
@@ -60,13 +60,47 @@ To run the tests, clone the repository, and then:
 
     # Setup the virtual environment
     virtualenv env
-    env/bin/activate
+    source env/bin/activate
     pip install -r requirements.txt
 
     # Run the tests
     ./runtests.py
 
-You can also use the excellent [`tox`][tox] testing tool to run the tests against all supported versions of Python and Django.  Install `tox` globally, and then simply run:
+### Test options
+
+Run using a more concise output style.
+
+    ./runtests.py -q
+
+Run the tests using a more concise output style, no coverage, no flake8.
+
+    ./runtests.py --fast
+
+Don't run the flake8 code linting.
+
+    ./runtests.py --nolint
+
+Only run the flake8 code linting, don't run the tests.
+
+    ./runtests.py --lintonly
+
+Run the tests for a given test case.
+
+    ./runtests.py MyTestCase
+
+Run the tests for a given test method.
+
+    ./runtests.py MyTestCase.test_this_method
+
+Shorter form to run the tests for a given test method.
+
+    ./runtests.py test_this_method
+
+Note: The test case and test method matching is fuzzy and will sometimes run other tests that contain a partial string match to the given  command line input.
+
+### Running against multiple environments
+
+You can also use the excellent [tox][tox] testing tool to run the tests against all supported versions of Python and Django.  Install `tox` globally, and then simply run:
 
     tox
 
@@ -82,7 +116,7 @@ GitHub's documentation for working on pull requests is [available here][pull-req
 
 Always run the tests before submitting pull requests, and ideally run `tox` in order to check that your modifications are compatible with both Python 2 and Python 3, and that they run properly on all supported versions of Django.
 
-Once you've made a pull request take a look at the travis build status in the GitHub interface and make sure the tests are running as you'd expect.
+Once you've made a pull request take a look at the Travis build status in the GitHub interface and make sure the tests are running as you'd expect.
 
 ![Travis status][travis-status]
 
@@ -96,7 +130,7 @@ Sometimes, in order to ensure your code works on various different versions of D
 
 The documentation for REST framework is built from the [Markdown][markdown] source files in [the docs directory][docs].
 
-There are many great markdown editors that make working with the documentation really easy.  The [Mou editor for Mac][mou] is one such editor that comes highly recommended.
+There are many great Markdown editors that make working with the documentation really easy.  The [Mou editor for Mac][mou] is one such editor that comes highly recommended.
 
 ## Building the documentation
 
@@ -104,7 +138,7 @@ To build the documentation, install MkDocs with `pip install mkdocs` and then ru
 
     mkdocs build
 
-This will build the html output into the `html` directory.
+This will build the documentation into the `site` directory.
 
 You can build the documentation and open a preview in a browser window by using the `serve` command.
 
@@ -117,8 +151,7 @@ Documentation should be in American English.  The tone of the documentation is v
 Some other tips:
 
 * Keep paragraphs reasonably short.
-* Use double spacing after the end of sentences.
-* Don't use the abbreviations such as 'e.g.' but instead use long form, such as 'For example'.
+* Don't use abbreviations such as 'e.g.' but instead use the long form, such as 'For example'.
 
 ## Markdown style
 
@@ -151,7 +184,7 @@ If you are hyperlinking to another REST framework document, you should use a rel
 
     [authentication]: ../api-guide/authentication.md
 
-Linking in this style means you'll be able to click the hyperlink in your markdown editor to open the referenced document.  When the documentation is built, these links will be converted into regular links to HTML pages.
+Linking in this style means you'll be able to click the hyperlink in your Markdown editor to open the referenced document.  When the documentation is built, these links will be converted into regular links to HTML pages.
 
 ##### 3. Notes
 
@@ -163,19 +196,6 @@ If you want to draw attention to a note or warning, use a pair of enclosing line
 
     ---
 
-# Third party packages
-
-New features to REST framework are generally recommended to be implemented as third party libraries that are developed outside of the core framework.  Ideally third party libraries should be properly documented and packaged, and made available on PyPI.
-
-## Getting started
-
-If you have some functionality that you would like to implement as a third party package it's worth contacting the [discussion group][google-group] as others may be willing to get involved.  We strongly encourage third party package development and will always try to prioritize time spent helping their development, documentation and packaging.
-
-We recommend the [`django-reusable-app`][django-reusable-app] template as a good resource for getting up and running with implementing a third party Django package.
-
-## Linking to your package
-
-Once your package is decently documented and available on PyPI open a pull request or issue, and we'll add a link to it from the main REST framework documentation.
 
 [cite]: http://www.w3.org/People/Berners-Lee/FAQ.html
 [code-of-conduct]: https://www.djangoproject.com/conduct/
@@ -183,10 +203,9 @@ Once your package is decently documented and available on PyPI open a pull reque
 [so-filter]: http://stackexchange.com/filters/66475/rest-framework
 [issues]: https://github.com/tomchristie/django-rest-framework/issues?state=open
 [pep-8]: http://www.python.org/dev/peps/pep-0008/
-[travis-status]: https://raw.github.com/tomchristie/django-rest-framework/master/docs/img/travis-status.png
+[travis-status]: ../img/travis-status.png
 [pull-requests]: https://help.github.com/articles/using-pull-requests
 [tox]: http://tox.readthedocs.org/en/latest/
 [markdown]: http://daringfireball.net/projects/markdown/basics
 [docs]: https://github.com/tomchristie/django-rest-framework/tree/master/docs
 [mou]: http://mouapp.com/
-[django-reusable-app]: https://github.com/dabapps/django-reusable-app
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..2b97cc5
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,24 @@
+# License
+
+Copyright (c) 2011-2015, Tom Christie
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice, this
+list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/MANIFEST.in b/MANIFEST.in
index d202c86..66488aa 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,3 +1,5 @@
+include README.md
+include LICENSE.md
 recursive-include rest_framework/static *.js *.css *.png *.eot *.svg *.ttf *.woff
 recursive-include rest_framework/templates *.html
 recursive-exclude * __pycache__
diff --git a/README.md b/README.md
index 53140e5..784b54c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
 # [Django REST framework][docs]
 
 [![build-status-image]][travis]
+[![coverage-status-image]][codecov]
 [![pypi-version]][pypi]
 
 **Awesome web-browsable Web APIs.**
@@ -9,7 +10,9 @@ Full documentation for the project is available at [http://www.django-rest-frame
 
 ---
 
-**Note**: We have now released Django REST framework 3.0. For older codebases you may want to refer to the version 2.4.4 [source code](https://github.com/tomchristie/django-rest-framework/tree/version-2.4.x), and [documentation](http://tomchristie.github.io/rest-framework-2-docs/).
+**Note**: We have now released Django REST framework 3.2. For older codebases you may want to refer to the version 2.4.4 [source code][2.4-code], and [documentation][2.4-docs].
+
+For more details see the 3.2 [announcement][3.2-announcement] and [release notes][3.2-release-notes].
 
 ---
 
@@ -20,10 +23,10 @@ Django REST framework is a powerful and flexible toolkit for building Web APIs.
 Some reasons you might want to use REST framework:
 
 * The [Web browsable API][sandbox] is a huge usability win for your developers.
-* [Authentication policies][authentication] including [OAuth1a][oauth1-section] and [OAuth2][oauth2-section] out of the box.
+* [Authentication policies][authentication] including optional packages for [OAuth1a][oauth1-section] and [OAuth2][oauth2-section].
 * [Serialization][serializers] that supports both [ORM][modelserializer-section] and [non-ORM][serializer-section] data sources.
 * Customizable all the way down - just use [regular function-based views][functionview-section] if you don't need the [more][generic-views] [powerful][viewsets] [features][routers].
-* [Extensive documentation][index], and [great community support][group].
+* [Extensive documentation][docs], and [great community support][group].
 
 There is a live example API for testing purposes, [available here][sandbox].
 
@@ -34,7 +37,7 @@ There is a live example API for testing purposes, [available here][sandbox].
 # Requirements
 
 * Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
-* Django (1.4.11+, 1.5.6+, 1.6.3+, 1.7, 1.8-alpha)
+* Django (1.5.6+, 1.6.3+, 1.7, 1.8)
 
 # Installation
 
@@ -53,7 +56,7 @@ Add `'rest_framework'` to your `INSTALLED_APPS` setting.
 
 Let's take a look at a quick example of using REST framework to build a simple model-backed API for accessing users and groups.
 
-Startup up a new project like so... 
+Startup up a new project like so...
 
     pip install django
     pip install djangorestframework
@@ -79,7 +82,7 @@ class UserViewSet(viewsets.ModelViewSet):
     queryset = User.objects.all()
     serializer_class = UserSerializer
 
-    
+
 # Routers provide a way of automatically determining the URL conf.
 router = routers.DefaultRouter()
 router.register(r'users', UserViewSet)
@@ -100,7 +103,7 @@ Add the following to your `settings.py` module:
 ```python
 INSTALLED_APPS = (
     ...  # Make sure to include the default installed apps here.
-    'rest_framework',        
+    'rest_framework',
 )
 
 REST_FRAMEWORK = {
@@ -123,10 +126,10 @@ You can also interact with the API using command line tools such as [`curl`](htt
     $ curl -H 'Accept: application/json; indent=4' -u admin:password http://127.0.0.1:8000/users/
 	[
 	    {
-	        "url": "http://127.0.0.1:8000/users/1/", 
-	        "username": "admin", 
-	        "email": "admin at example.com", 
-	        "is_staff": true, 
+	        "url": "http://127.0.0.1:8000/users/1/",
+	        "username": "admin",
+	        "email": "admin at example.com",
+	        "is_staff": true,
 	    }
 	]
 
@@ -134,10 +137,10 @@ Or to create a new user:
 
     $ curl -X POST -d username=new -d email=new at example.com -d is_staff=false -H 'Accept: application/json; indent=4' -u admin:password http://127.0.0.1:8000/users/
     {
-        "url": "http://127.0.0.1:8000/users/2/", 
-        "username": "new", 
-        "email": "new at example.com", 
-        "is_staff": false, 
+        "url": "http://127.0.0.1:8000/users/2/",
+        "username": "new",
+        "email": "new at example.com",
+        "is_staff": false,
     }
 
 # Documentation & Support
@@ -154,44 +157,19 @@ If you believe you’ve found something in Django REST framework which has secur
 
 Send a description of the issue via email to [rest-framework-security at googlegroups.com][security-mail].  The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure.
 
-# License
-
-Copyright (c) 2011-2015, Tom Christie
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this 
-list of conditions and the following disclaimer.
-Redistributions in binary form must reproduce the above copyright notice, this 
-list of conditions and the following disclaimer in the documentation and/or 
-other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 
 [build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master
 [travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master
-[pypi-version]: https://pypip.in/version/djangorestframework/badge.svg
+[coverage-status-image]: https://img.shields.io/codecov/c/github/tomchristie/django-rest-framework/master.svg
+[codecov]: http://codecov.io/github/tomchristie/django-rest-framework?branch=master
+[pypi-version]: https://img.shields.io/pypi/v/djangorestframework.svg
 [pypi]: https://pypi.python.org/pypi/djangorestframework
 [twitter]: https://twitter.com/_tomchristie
 [group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
-[0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X
 [sandbox]: http://restframework.herokuapp.com/
 
-[index]: http://www.django-rest-framework.org/
-[oauth1-section]: http://www.django-rest-framework.org/api-guide/authentication/#oauthauthentication
-[oauth2-section]: http://www.django-rest-framework.org/api-guide/authentication/#oauth2authentication
+[oauth1-section]: http://www.django-rest-framework.org/api-guide/authentication/#django-rest-framework-oauth
+[oauth2-section]: http://www.django-rest-framework.org/api-guide/authentication/#django-oauth-toolkit
 [serializer-section]: http://www.django-rest-framework.org/api-guide/serializers/#serializers
 [modelserializer-section]: http://www.django-rest-framework.org/api-guide/serializers/#modelserializer
 [functionview-section]: http://www.django-rest-framework.org/api-guide/views/#function-based-views
@@ -200,21 +178,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 [routers]: http://www.django-rest-framework.org/api-guide/routers/
 [serializers]: http://www.django-rest-framework.org/api-guide/serializers/
 [authentication]: http://www.django-rest-framework.org/api-guide/authentication/
-
-[rest-framework-2-announcement]: http://www.django-rest-framework.org/topics/rest-framework-2-announcement
-[2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion
 [image]: http://www.django-rest-framework.org/img/quickstart.png
 
-[tox]: http://testrun.org/tox/latest/
-
-[tehjones]: https://twitter.com/tehjones/status/294986071979196416
-[wlonk]: https://twitter.com/wlonk/status/261689665952833536
-[laserllama]: https://twitter.com/laserllama/status/328688333750407168
-
 [docs]: http://www.django-rest-framework.org/
-[urlobject]: https://github.com/zacharyvoase/urlobject
-[markdown]: http://pypi.python.org/pypi/Markdown/
-[pyyaml]: http://pypi.python.org/pypi/PyYAML
-[defusedxml]: https://pypi.python.org/pypi/defusedxml
-[django-filter]: http://pypi.python.org/pypi/django-filter
 [security-mail]: mailto:rest-framework-security at googlegroups.com
+[2.4-code]: https://github.com/tomchristie/django-rest-framework/tree/version-2.4.x
+[2.4-docs]: http://tomchristie.github.io/rest-framework-2-docs/
+[3.2-announcement]: http://www.django-rest-framework.org/topics/3.2-announcement/
+[3.2-release-notes]: http://www.django-rest-framework.org/topics/release-notes/#32x-series
diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md
old mode 100755
new mode 100644
index 0d53de7..2ccf7d7
--- a/docs/api-guide/authentication.md
+++ b/docs/api-guide/authentication.md
@@ -126,7 +126,6 @@ To use the `TokenAuthentication` scheme you'll need to [configure the authentica
         'rest_framework.authtoken'
     )
 
-
 ---
 
 **Note:** Make sure to run `manage.py syncdb` after changing your settings. The `rest_framework.authtoken` app provides both Django (from v1.7) and South database migrations. See [Schema migrations](#schema-migrations) below.
@@ -169,7 +168,6 @@ The `curl` command line tool may be useful for testing token authenticated APIs.
 If you want every user to have an automatically generated Token, you can simply catch the User's `post_save` signal.
 
     from django.conf import settings
-    from django.contrib.auth import get_user_model
     from django.db.models.signals import post_save
     from django.dispatch import receiver
     from rest_framework.authtoken.models import Token
@@ -249,106 +247,9 @@ Unauthenticated responses that are denied permission will result in an `HTTP 403
 
 If you're using an AJAX style API with SessionAuthentication, you'll need to make sure you include a valid CSRF token for any "unsafe" HTTP method calls, such as `PUT`, `PATCH`, `POST` or `DELETE` requests.  See the [Django CSRF documentation][csrf-ajax] for more details.
 
-## OAuthAuthentication
-
-This authentication uses [OAuth 1.0a][oauth-1.0a] authentication scheme.  OAuth 1.0a provides signature validation which provides a reasonable level of security over plain non-HTTPS connections.  However, it may also be considered more complicated than OAuth2, as it requires clients to sign their requests.
-
-This authentication class depends on the optional `django-oauth-plus` and `oauth2` packages.  In order to make it work you must install these packages and add `oauth_provider` to your `INSTALLED_APPS`:
-
-    INSTALLED_APPS = (
-        ...
-        `oauth_provider`,
-    )
-
-Don't forget to run `syncdb` once you've added the package.
-
-    python manage.py syncdb
-
-#### Getting started with django-oauth-plus
-
-The OAuthAuthentication class only provides token verification and signature validation for requests.  It doesn't provide authorization flow for your clients.  You still need to implement your own views for accessing and authorizing tokens.
-
-The `django-oauth-plus` package provides simple foundation for classic 'three-legged' oauth flow.  Please refer to [the documentation][django-oauth-plus] for more details.
-
-## OAuth2Authentication
-
-This authentication uses [OAuth 2.0][rfc6749] authentication scheme.  OAuth2 is more simple to work with than OAuth1, and provides much better security than simple token authentication.  It is an unauthenticated scheme, and requires you to use an HTTPS connection.
-
-This authentication class depends on the optional [django-oauth2-provider][django-oauth2-provider] project.  In order to make it work you must install this package and add `provider` and `provider.oauth2` to your `INSTALLED_APPS`:
-
-    INSTALLED_APPS = (
-        ...
-        'provider',
-        'provider.oauth2',
-    )
-
-Then add `OAuth2Authentication` to your global `DEFAULT_AUTHENTICATION_CLASSES` setting:
-
-    'DEFAULT_AUTHENTICATION_CLASSES': (
-        'rest_framework.authentication.OAuth2Authentication',
-    ),
-
-You must also include the following in your root `urls.py` module:
-
-    url(r'^oauth2/', include('provider.oauth2.urls', namespace='oauth2')),
-
-Note that the `namespace='oauth2'` argument is required.
-
-Finally, sync your database.
-
-    python manage.py syncdb
-    python manage.py migrate
-
----
-
-**Note:** If you use `OAuth2Authentication` in production you must ensure that your API is only available over `https`.
-
----
-
-#### Getting started with django-oauth2-provider
-
-The `OAuth2Authentication` class only provides token verification for requests.  It doesn't provide authorization flow for your clients.
-
-The OAuth 2 authorization flow is taken care by the [django-oauth2-provider][django-oauth2-provider] dependency.  A walkthrough is given here, but for more details you should refer to [the documentation][django-oauth2-provider-docs].
-
-To get started:
-
-##### 1. Create a client
-
-You can create a client, either through the shell, or by using the Django admin.
-
-Go to the admin panel and create a new `Provider.Client` entry.  It will create the `client_id` and `client_secret` properties for you.
-
-##### 2. Request an access token
-
-To request an access token, submit a `POST` request to the url `/oauth2/access_token` with the following fields:
+**Warning**: Always use Django's standard login view when creating login pages. This will ensure your login views are properly protected.
 
-* `client_id` the client id you've just configured at the previous step.
-* `client_secret` again configured at the previous step.
-* `username` the username with which you want to log in.
-* `password` well, that speaks for itself.
-
-You can use the command line to test that your local configuration is working:
-
-    curl -X POST -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD" http://localhost:8000/oauth2/access_token/
-
-You should get a response that looks something like this:
-
-    {"access_token": "<your-access-token>", "scope": "read", "expires_in": 86399, "refresh_token": "<your-refresh-token>"}
-
-##### 3. Access the API
-
-The only thing needed to make the `OAuth2Authentication` class work is to insert the `access_token` you've received in the `Authorization` request header.
-
-The command line to test the authentication looks like:
-
-    curl -H "Authorization: Bearer <your-access-token>" http://localhost:8000/api/
-
-### Alternative OAuth 2 implementations
-
-Note that [Django OAuth Toolkit][django-oauth-toolkit] is an alternative external package that also includes OAuth 2.0 support for REST framework.
-
----
+CSRF validation in REST framework works slightly differently to standard Django due to the need to support both session and non-session based authentication to the same views. This means that only authenticated requests require CSRF tokens, and anonymous requests may be sent without CSRF tokens. This behaviour is not suitable for login views, which should always have CSRF validation applied.
 
 # Custom authentication
 
@@ -392,13 +293,48 @@ The following example will authenticate any incoming request as the user given b
 
 The following third party packages are also available.
 
-## Digest Authentication
+## Django OAuth Toolkit
 
-HTTP digest authentication is a widely implemented scheme that was intended to replace HTTP basic authentication, and which provides a simple encrypted authentication mechanism. [Juan Riaza][juanriaza] maintains the [djangorestframework-digestauth][djangorestframework-digestauth] package which provides HTTP digest authentication support for REST framework.
+The [Django OAuth Toolkit][django-oauth-toolkit] package provides OAuth 2.0 support, and works with Python 2.7 and Python 3.3+. The package is maintained by [Evonove][evonove] and uses the excellent [OAuthLib][oauthlib].  The package is well documented, and well supported and is currently our **recommended package for OAuth 2.0 support**.
 
-## Django OAuth Toolkit
+#### Installation & configuration
 
-The [Django OAuth Toolkit][django-oauth-toolkit] package provides OAuth 2.0 support, and works with Python 2.7 and Python 3.3+.  The package is maintained by [Evonove][evonove] and uses the excellent [OAuthLib][oauthlib].  The package is well documented, and comes as a recommended alternative for OAuth 2.0 support.
+Install using `pip`.
+
+    pip install django-oauth-toolkit
+
+Add the package to your `INSTALLED_APPS` and modify your REST framework settings.
+
+    INSTALLED_APPS = (
+        ...
+        'oauth2_provider',
+    )
+
+    REST_FRAMEWORK = {
+        'DEFAULT_AUTHENTICATION_CLASSES': (
+            'oauth2_provider.ext.rest_framework.OAuth2Authentication',
+        )
+    }
+
+For more details see the [Django REST framework - Getting started][django-oauth-toolkit-getting-started] documentation.
+
+## Django REST framework OAuth
+
+The [Django REST framework OAuth][django-rest-framework-oauth] package provides both OAuth1 and OAuth2 support for REST framework.
+
+This package was previously included directly in REST framework but is now supported and maintained as a third party package.
+
+#### Installation & configuration
+
+Install the package using `pip`.
+
+    pip install djangorestframework-oauth
+
+For details on configuration and usage see the Django REST framework OAuth documentation for [authentication][django-rest-framework-oauth-authentication] and [permissions][django-rest-framework-oauth-permissions].
+
+## Digest Authentication
+
+HTTP digest authentication is a widely implemented scheme that was intended to replace HTTP basic authentication, and which provides a simple encrypted authentication mechanism. [Juan Riaza][juanriaza] maintains the [djangorestframework-digestauth][djangorestframework-digestauth] package which provides HTTP digest authentication support for REST framework.
 
 ## Django OAuth2 Consumer
 
@@ -420,6 +356,10 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a
 
 [Djoser][djoser] library provides a set of views to handle basic actions such as registration, login, logout, password reset and account activation. The package works with a custom user model and it uses token based authentication. This is a ready to use REST implementation of Django authentication system.
 
+## django-rest-auth
+
+[Django-rest-auth][django-rest-auth] library provides a set of REST API endpoints for registration, authentication (including social media authentication), password reset, retrieve and update user details, etc. By having these API endpoints, your client apps such as AngularJS, iOS, Android, and others can communicate to your Django backend site independently via REST APIs for user management.
+
 [cite]: http://jacobian.org/writing/rest-worst-practices/
 [http401]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2
 [http403]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4
@@ -431,6 +371,10 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a
 [mod_wsgi_official]: http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIPassAuthorization
 [custom-user-model]: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#specifying-a-custom-user-model
 [south-dependencies]: http://south.readthedocs.org/en/latest/dependencies.html
+[django-oauth-toolkit-getting-started]: https://django-oauth-toolkit.readthedocs.org/en/latest/rest-framework/getting_started.html
+[django-rest-framework-oauth]: http://jpadilla.github.io/django-rest-framework-oauth/
+[django-rest-framework-oauth-authentication]: http://jpadilla.github.io/django-rest-framework-oauth/authentication/
+[django-rest-framework-oauth-permissions]: http://jpadilla.github.io/django-rest-framework-oauth/permissions/
 [juanriaza]: https://github.com/juanriaza
 [djangorestframework-digestauth]: https://github.com/juanriaza/django-rest-framework-digestauth
 [oauth-1.0a]: http://oauth.net/core/1.0a
@@ -455,3 +399,4 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a
 [mohawk]: http://mohawk.readthedocs.org/en/latest/
 [mac]: http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05
 [djoser]: https://github.com/sunscrapers/djoser
+[django-rest-auth]: https://github.com/Tivix/django-rest-auth
diff --git a/docs/api-guide/exceptions.md b/docs/api-guide/exceptions.md
index 993134f..3e4b3e8 100644
--- a/docs/api-guide/exceptions.md
+++ b/docs/api-guide/exceptions.md
@@ -47,7 +47,7 @@ Any example validation error might look like this:
 
 You can implement custom exception handling by creating a handler function that converts exceptions raised in your API views into response objects.  This allows you to control the style of error responses used by your API.
 
-The function must take a single argument, which is the exception to be handled, and should either return a `Response` object, or return `None` if the exception cannot be handled.  If the handler returns `None` then the exception will be re-raised and Django will return a standard HTTP 500 'server error' response.
+The function must take a pair of arguments, this first is the exception to be handled, and the second is a dictionary containing any extra context such as the view currently being handled. The exception handler function should either return a `Response` object, or return `None` if the exception cannot be handled.  If the handler returns `None` then the exception will be re-raised and Django will return a standard HTTP 500 'server error' response.
 
 For example, you might want to ensure that all error responses include the HTTP status code in the body of the response, like so:
 
@@ -61,10 +61,10 @@ In order to alter the style of the response, you could write the following custo
 
     from rest_framework.views import exception_handler
 
-    def custom_exception_handler(exc):
+    def custom_exception_handler(exc, context):
         # Call REST framework's default exception handler first,
         # to get the standard error response.
-        response = exception_handler(exc)
+        response = exception_handler(exc, context)
 
         # Now add the HTTP status code to the response.
         if response is not None:
@@ -72,6 +72,8 @@ In order to alter the style of the response, you could write the following custo
 
         return response
 
+The context argument is not used by the default handler, but can be useful if the exception handler needs further information such as the view currently being handled, which can be accessed as `context['view']`.
+
 The exception handler must also be configured in your settings, using the `EXCEPTION_HANDLER` setting key. For example:
 
     REST_FRAMEWORK = {
@@ -138,6 +140,14 @@ Raised when an authenticated request fails the permission checks.
 
 By default this exception results in a response with the HTTP status code "403 Forbidden".
 
+## NotFound
+
+**Signature:** `NotFound(detail=None)`
+
+Raised when a resource does not exists at the given URL. This exception is equivalent to the standard `Http404` Django exception.
... 33232 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/djangorestframework.git



More information about the Python-modules-commits mailing list