get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/933970/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 933970,
    "url": "http://patchwork.ozlabs.org/api/patches/933970/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/patchwork/patch/20180624195557.19909-5-stephen@that.guru/",
    "project": {
        "id": 16,
        "url": "http://patchwork.ozlabs.org/api/projects/16/?format=api",
        "name": "Patchwork",
        "link_name": "patchwork",
        "list_id": "patchwork.lists.ozlabs.org",
        "list_email": "patchwork@lists.ozlabs.org",
        "web_url": "http://jk.ozlabs.org/projects/patchwork/",
        "scm_url": "git://github.com/getpatchwork/patchwork",
        "webscm_url": "https://github.com/getpatchwork/patchwork",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20180624195557.19909-5-stephen@that.guru>",
    "list_archive_url": null,
    "date": "2018-06-24T19:55:51",
    "name": "[05/11] Remove compat wrapper for Django < 1.11",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "aff7b38016e5a8aa0e32454d0a363b28a0bf0031",
    "submitter": {
        "id": 69991,
        "url": "http://patchwork.ozlabs.org/api/people/69991/?format=api",
        "name": "Stephen Finucane",
        "email": "stephen@that.guru"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/patchwork/patch/20180624195557.19909-5-stephen@that.guru/mbox/",
    "series": [
        {
            "id": 51752,
            "url": "http://patchwork.ozlabs.org/api/series/51752/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/patchwork/list/?series=51752",
            "date": "2018-06-24T19:55:49",
            "name": "[01/11] REST: Check.user is not read-only",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/51752/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/933970/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/933970/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<patchwork-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "patchwork@lists.ozlabs.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "patchwork@lists.ozlabs.org"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 41DNNj2rYNz9ry1\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 25 Jun 2018 05:56:37 +1000 (AEST)",
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 41DNNj1KhRzF1Cl\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 25 Jun 2018 05:56:37 +1000 (AEST)",
            "from coral.maple.relay.mailchannels.net\n\t(coral.maple.relay.mailchannels.net [23.83.214.39])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 41DNNG00g2zF14g\n\tfor <patchwork@lists.ozlabs.org>;\n\tMon, 25 Jun 2018 05:56:13 +1000 (AEST)",
            "from relay.mailchannels.net (localhost [127.0.0.1])\n\tby relay.mailchannels.net (Postfix) with ESMTP id CAC7F281C51\n\tfor <patchwork@lists.ozlabs.org>;\n\tSun, 24 Jun 2018 19:56:10 +0000 (UTC)",
            "from one.mxroute.com (unknown [100.96.31.16])\n\t(Authenticated sender: 5xi41l16bi)\n\tby relay.mailchannels.net (Postfix) with ESMTPA id D3175281AE2\n\tfor <patchwork@lists.ozlabs.org>;\n\tSun, 24 Jun 2018 19:56:08 +0000 (UTC)",
            "from one.mxroute.com (one-outgoing.mxroute.com [172.19.42.59])\n\t(using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384)\n\tby 0.0.0.0:2500 (trex/5.15.2); Sun, 24 Jun 2018 19:56:10 +0000"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tdmarc=none (p=none dis=none) header.from=that.guru",
            "ozlabs.org;\n\tdkim=fail reason=\"key not found in DNS\" (0-bit key;\n\tunprotected) header.d=that.guru header.i=@that.guru\n\theader.b=\"GSkD8Ezn\"; dkim-atps=neutral",
            "lists.ozlabs.org;\n\tdmarc=none (p=none dis=none) header.from=that.guru",
            "lists.ozlabs.org;\n\tdkim=fail reason=\"key not found in DNS\" (0-bit key;\n\tunprotected) header.d=that.guru header.i=@that.guru\n\theader.b=\"GSkD8Ezn\"; dkim-atps=neutral",
            "lists.ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=that.guru\n\t(client-ip=23.83.214.39; helo=coral.maple.relay.mailchannels.net;\n\tenvelope-from=stephen@that.guru; receiver=<UNKNOWN>)",
            "lists.ozlabs.org;\n\tdmarc=none (p=none dis=none) header.from=that.guru",
            "lists.ozlabs.org;\n\tdkim=fail reason=\"key not found in DNS\" (0-bit key;\n\tunprotected) header.d=that.guru header.i=@that.guru\n\theader.b=\"GSkD8Ezn\"; dkim-atps=neutral"
        ],
        "X-Sender-Id": [
            "5xi41l16bi|x-authuser|stephen@that.guru",
            "5xi41l16bi|x-authuser|stephen@that.guru"
        ],
        "X-MC-Relay": "Neutral",
        "X-MailChannels-SenderId": "5xi41l16bi|x-authuser|stephen@that.guru",
        "X-MailChannels-Auth-Id": "5xi41l16bi",
        "X-Dime-Sponge": "5b9cbe863d5082ed_1529870169232_1874239398",
        "X-MC-Loop-Signature": "1529870169232:3030210557",
        "X-MC-Ingress-Time": "1529870169232",
        "DKIM-Signature": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=that.guru;\n\ts=default;\n\th=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:\n\tSender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:\n\tContent-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:\n\tResent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:\n\tList-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=Aey/B7U24smchb+KnYpFtvvnS6phMv16AP2aaD4cpfw=;\n\tb=GSkD8Ezn0F33WUbdPCM7lHKJtZ\n\tozUA7slNxHOWF86f3rwliO66zNgS/TAfwGVdue7uSjl5eFy75dbduhtP5BbLkPExtr1mi5q8mYZxV\n\tY3guWTVAL2acX/VJY3naGDBpEGEzMrq+PZ+pCfK8t89i1ru87P3+1d5T6wiBUCMIUvDqxl1jMDtsI\n\t8+eKGk8LLxj6JzYu2r7zkY/E0ziZUBPsUZzf/xFli7MNdNXCwBp1TFtzFXUTlRDoTp1+KxQuP1w3H\n\t8qle8n17c8DEqcHMZ1/niyan4EgAWGi/4PQrwn+NWi0hCQ21qYg6y9kYelK/4bGNFB9NyhJFlUb3X\n\tlsDR60QA==;",
        "From": "Stephen Finucane <stephen@that.guru>",
        "To": "patchwork@lists.ozlabs.org",
        "Subject": "[PATCH 05/11] Remove compat wrapper for Django < 1.11",
        "Date": "Sun, 24 Jun 2018 20:55:51 +0100",
        "Message-Id": "<20180624195557.19909-5-stephen@that.guru>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20180624195557.19909-1-stephen@that.guru>",
        "References": "<20180624195557.19909-1-stephen@that.guru>",
        "X-AuthUser": "stephen@that.guru",
        "X-BeenThere": "patchwork@lists.ozlabs.org",
        "X-Mailman-Version": "2.1.26",
        "Precedence": "list",
        "List-Id": "Patchwork development <patchwork.lists.ozlabs.org>",
        "List-Unsubscribe": "<https://lists.ozlabs.org/options/patchwork>,\n\t<mailto:patchwork-request@lists.ozlabs.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.ozlabs.org/pipermail/patchwork/>",
        "List-Post": "<mailto:patchwork@lists.ozlabs.org>",
        "List-Help": "<mailto:patchwork-request@lists.ozlabs.org?subject=help>",
        "List-Subscribe": "<https://lists.ozlabs.org/listinfo/patchwork>,\n\t<mailto:patchwork-request@lists.ozlabs.org?subject=subscribe>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "patchwork-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org",
        "Sender": "\"Patchwork\"\n\t<patchwork-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org>"
    },
    "content": "Deleting code is fun. We no longer need to carry these so don't.\n\nSigned-off-by: Stephen Finucane <stephen@that.guru>\n---\n patchwork/api/bundle.py               |  3 +-\n patchwork/compat.py                   | 50 +--------------------------\n patchwork/models.py                   |  7 ++--\n patchwork/paginator.py                |  4 +--\n patchwork/settings/base.py            |  2 +-\n patchwork/templatetags/listurl.py     |  4 +--\n patchwork/templatetags/person.py      |  2 +-\n patchwork/tests/api/test_bundle.py    |  2 +-\n patchwork/tests/api/test_check.py     |  2 +-\n patchwork/tests/api/test_comment.py   |  4 +--\n patchwork/tests/api/test_cover.py     |  2 +-\n patchwork/tests/api/test_patch.py     |  2 +-\n patchwork/tests/api/test_person.py    |  2 +-\n patchwork/tests/api/test_project.py   |  2 +-\n patchwork/tests/api/test_series.py    |  2 +-\n patchwork/tests/api/test_user.py      |  2 +-\n patchwork/tests/test_about.py         |  3 +-\n patchwork/tests/test_bundles.py       |  2 +-\n patchwork/tests/test_completion.py    |  2 +-\n patchwork/tests/test_confirm.py       |  2 +-\n patchwork/tests/test_detail.py        |  2 +-\n patchwork/tests/test_encodings.py     |  2 +-\n patchwork/tests/test_filters.py       |  2 +-\n patchwork/tests/test_list.py          |  2 +-\n patchwork/tests/test_mail_settings.py |  2 +-\n patchwork/tests/test_mboxviews.py     |  2 +-\n patchwork/tests/test_paginator.py     |  2 +-\n patchwork/tests/test_projects.py      |  2 +-\n patchwork/tests/test_registration.py  |  2 +-\n patchwork/tests/test_updates.py       |  2 +-\n patchwork/tests/test_user.py          |  2 +-\n patchwork/tests/test_xmlrpc.py        |  2 +-\n patchwork/urls.py                     |  2 +-\n patchwork/views/__init__.py           |  3 +-\n patchwork/views/about.py              |  3 +-\n patchwork/views/bundle.py             |  2 +-\n patchwork/views/comment.py            |  2 +-\n patchwork/views/cover.py              |  2 +-\n patchwork/views/mail.py               |  2 +-\n patchwork/views/patch.py              |  9 +++--\n patchwork/views/project.py            |  2 +-\n patchwork/views/user.py               |  2 +-\n patchwork/views/xmlrpc.py             |  2 +-\n 43 files changed, 50 insertions(+), 106 deletions(-)",
    "diff": "diff --git a/patchwork/api/bundle.py b/patchwork/api/bundle.py\nindex b0005daa..7b147e1d 100644\n--- a/patchwork/api/bundle.py\n+++ b/patchwork/api/bundle.py\n@@ -28,7 +28,6 @@ from patchwork.api.filters import BundleFilterSet\n from patchwork.api.embedded import PatchSerializer\n from patchwork.api.embedded import ProjectSerializer\n from patchwork.api.embedded import UserSerializer\n-from patchwork.compat import is_authenticated\n from patchwork.models import Bundle\n \n \n@@ -67,7 +66,7 @@ class BundleMixin(object):\n     serializer_class = BundleSerializer\n \n     def get_queryset(self):\n-        if is_authenticated(self.request.user):\n+        if self.request.user.is_authenticated:\n             bundle_filter = Q(owner=self.request.user) | Q(public=True)\n         else:\n             bundle_filter = Q(public=True)\ndiff --git a/patchwork/compat.py b/patchwork/compat.py\nindex e74e9264..9383143c 100644\n--- a/patchwork/compat.py\n+++ b/patchwork/compat.py\n@@ -17,30 +17,11 @@\n # along with Patchwork; if not, write to the Free Software\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n-\"\"\"Compatibility wrappers for various Django versions.\"\"\"\n+\"\"\"Compatibility wrappers for various library versions.\"\"\"\n \n-import django\n from django.conf import settings\n \n \n-# DjangoFilterBackend\n-#\n-# The DjangoFilterBackend was provided in Django REST Framework from 3.0 to\n-# 3.4, was marked as pending deprecation in 3.5, was deprecated in 3.6 and will\n-# be removed in 3.7. However, the equivalent DjangoFilterBackend found in\n-# django-filter is only available since 1.0 of that package.\n-#\n-# http://www.django-rest-framework.org/topics/3.6-announcement/\n-\n-if settings.ENABLE_REST_API:\n-    import rest_framework  # noqa\n-\n-    if rest_framework.VERSION >= '3.5':\n-        from django_filters.rest_framework import DjangoFilterBackend  # noqa\n-    else:\n-        from rest_framework.filters import DjangoFilterBackend  # noqa\n-\n-\n # NAME_FIELD\n #\n # The django-filter library renamed 'Filter.name' to 'Filter.field_name' in\n@@ -56,32 +37,3 @@ if settings.ENABLE_REST_API:\n         NAME_FIELD = 'field_name'\n     else:\n         NAME_FIELD = 'name'\n-\n-\n-# reverse, reverse_lazy\n-#\n-# The reverse and reverse_lazy functions have been moved to django.urls in\n-# Django 1.10 and backwards compatible imports will be removed in Django 2.0\n-\n-if django.VERSION >= (1, 10):\n-    from django.urls import NoReverseMatch  # noqa\n-    from django.urls import reverse  # noqa\n-    from django.urls import reverse_lazy  # noqa\n-else:\n-    from django.core.urlresolvers import NoReverseMatch  # noqa\n-    from django.core.urlresolvers import reverse  # noqa\n-    from django.core.urlresolvers import reverse_lazy  # noqa\n-\n-\n-# is_authenticated\n-#\n-# models.User.is_authenticated is now an attribute in Django 1.10 instead of a\n-# function\n-#\n-# https://docs.djangoproject.com/en/dev/releases/1.10/\n-\n-def is_authenticated(user):\n-    if django.VERSION >= (1, 10):\n-        return user.is_authenticated\n-    else:\n-        return user.is_authenticated()\ndiff --git a/patchwork/models.py b/patchwork/models.py\nindex 71a07c94..0409d4bf 100644\n--- a/patchwork/models.py\n+++ b/patchwork/models.py\n@@ -30,11 +30,10 @@ from django.conf import settings\n from django.contrib.auth.models import User\n from django.core.exceptions import ValidationError\n from django.db import models\n+from django.urls import reverse\n from django.utils.encoding import python_2_unicode_compatible\n from django.utils.functional import cached_property\n \n-from patchwork.compat import is_authenticated\n-from patchwork.compat import reverse\n from patchwork.fields import HashField\n from patchwork.hasher import hash_diff\n \n@@ -101,7 +100,7 @@ class Project(models.Model):\n     use_tags = models.BooleanField(default=True)\n \n     def is_editable(self, user):\n-        if not is_authenticated(user):\n+        if not user.is_authenticated:\n             return False\n         return self in user.profile.maintainer_projects.all()\n \n@@ -481,7 +480,7 @@ class Patch(SeriesMixin, Submission):\n         self.refresh_tag_counts()\n \n     def is_editable(self, user):\n-        if not is_authenticated(user):\n+        if not user.is_authenticated:\n             return False\n \n         if user in [self.submitter.user, self.delegate]:\ndiff --git a/patchwork/paginator.py b/patchwork/paginator.py\nindex 359ec867..f565c420 100644\n--- a/patchwork/paginator.py\n+++ b/patchwork/paginator.py\n@@ -22,8 +22,6 @@ from __future__ import absolute_import\n from django.conf import settings\n from django.core import paginator\n \n-from patchwork.compat import is_authenticated\n-\n \n DEFAULT_ITEMS_PER_PAGE = 100\n LONG_PAGE_THRESHOLD = 30\n@@ -44,7 +42,7 @@ class Paginator(paginator.Paginator):\n \n         items_per_page = settings.DEFAULT_ITEMS_PER_PAGE\n \n-        if is_authenticated(request.user):\n+        if request.user.is_authenticated:\n             items_per_page = request.user.profile.items_per_page\n \n         super(Paginator, self).__init__(objects, items_per_page)\ndiff --git a/patchwork/settings/base.py b/patchwork/settings/base.py\nindex f96f3694..99eb3c06 100644\n--- a/patchwork/settings/base.py\n+++ b/patchwork/settings/base.py\n@@ -128,7 +128,7 @@ REST_FRAMEWORK = {\n         'rest_framework.versioning.URLPathVersioning',\n     'DEFAULT_PAGINATION_CLASS': 'patchwork.api.base.LinkHeaderPagination',\n     'DEFAULT_FILTER_BACKENDS': (\n-        'patchwork.compat.DjangoFilterBackend',\n+        'django_filters.rest_framework.DjangoFilterBackend',\n         'rest_framework.filters.SearchFilter',\n         'rest_framework.filters.OrderingFilter',\n     ),\ndiff --git a/patchwork/templatetags/listurl.py b/patchwork/templatetags/listurl.py\nindex 6b9106e9..76dae797 100644\n--- a/patchwork/templatetags/listurl.py\n+++ b/patchwork/templatetags/listurl.py\n@@ -21,11 +21,11 @@ from __future__ import absolute_import\n \n from django.conf import settings\n from django import template\n+from django.urls import reverse\n+from django.urls import NoReverseMatch\n from django.utils.encoding import smart_str\n from django.utils.html import escape\n \n-from patchwork.compat import reverse\n-from patchwork.compat import NoReverseMatch\n from patchwork.filters import filterclasses\n \n \ndiff --git a/patchwork/templatetags/person.py b/patchwork/templatetags/person.py\nindex a6f23e91..09c8d103 100644\n--- a/patchwork/templatetags/person.py\n+++ b/patchwork/templatetags/person.py\n@@ -20,10 +20,10 @@\n from __future__ import absolute_import\n \n from django import template\n+from django.urls import reverse\n from django.utils.html import escape\n from django.utils.safestring import mark_safe\n \n-from patchwork.compat import reverse\n from patchwork.filters import SubmitterFilter\n \n \ndiff --git a/patchwork/tests/api/test_bundle.py b/patchwork/tests/api/test_bundle.py\nindex 7c48d344..e0dd8098 100644\n--- a/patchwork/tests/api/test_bundle.py\n+++ b/patchwork/tests/api/test_bundle.py\n@@ -20,8 +20,8 @@\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_bundle\n from patchwork.tests.utils import create_maintainer\n from patchwork.tests.utils import create_project\ndiff --git a/patchwork/tests/api/test_check.py b/patchwork/tests/api/test_check.py\nindex 0e7e0cfc..6f4aa5de 100644\n--- a/patchwork/tests/api/test_check.py\n+++ b/patchwork/tests/api/test_check.py\n@@ -20,8 +20,8 @@\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import Check\n from patchwork.tests.utils import create_check\n from patchwork.tests.utils import create_patch\ndiff --git a/patchwork/tests/api/test_comment.py b/patchwork/tests/api/test_comment.py\nindex f79ea469..f82c881a 100644\n--- a/patchwork/tests/api/test_comment.py\n+++ b/patchwork/tests/api/test_comment.py\n@@ -20,9 +20,9 @@\n import unittest\n \n from django.conf import settings\n+from django.urls import NoReverseMatch\n+from django.urls import reverse\n \n-from patchwork.compat import NoReverseMatch\n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_comment\n from patchwork.tests.utils import create_cover\n from patchwork.tests.utils import create_patch\ndiff --git a/patchwork/tests/api/test_cover.py b/patchwork/tests/api/test_cover.py\nindex e4d814e4..5061d651 100644\n--- a/patchwork/tests/api/test_cover.py\n+++ b/patchwork/tests/api/test_cover.py\n@@ -21,8 +21,8 @@ import email.parser\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_cover\n from patchwork.tests.utils import create_maintainer\n from patchwork.tests.utils import create_person\ndiff --git a/patchwork/tests/api/test_patch.py b/patchwork/tests/api/test_patch.py\nindex 27b99248..104f7c8a 100644\n--- a/patchwork/tests/api/test_patch.py\n+++ b/patchwork/tests/api/test_patch.py\n@@ -22,8 +22,8 @@ from email.utils import make_msgid\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import Patch\n from patchwork.tests.utils import create_maintainer\n from patchwork.tests.utils import create_patch\ndiff --git a/patchwork/tests/api/test_person.py b/patchwork/tests/api/test_person.py\nindex 22b12813..688a00e9 100644\n--- a/patchwork/tests/api/test_person.py\n+++ b/patchwork/tests/api/test_person.py\n@@ -20,8 +20,8 @@\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_maintainer\n from patchwork.tests.utils import create_person\n from patchwork.tests.utils import create_user\ndiff --git a/patchwork/tests/api/test_project.py b/patchwork/tests/api/test_project.py\nindex 129cedb7..6c5c9c6d 100644\n--- a/patchwork/tests/api/test_project.py\n+++ b/patchwork/tests/api/test_project.py\n@@ -20,8 +20,8 @@\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import Project\n from patchwork.tests.utils import create_maintainer\n from patchwork.tests.utils import create_project\ndiff --git a/patchwork/tests/api/test_series.py b/patchwork/tests/api/test_series.py\nindex 11324bc3..13872575 100644\n--- a/patchwork/tests/api/test_series.py\n+++ b/patchwork/tests/api/test_series.py\n@@ -20,8 +20,8 @@\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_cover\n from patchwork.tests.utils import create_maintainer\n from patchwork.tests.utils import create_project\ndiff --git a/patchwork/tests/api/test_user.py b/patchwork/tests/api/test_user.py\nindex 873312df..4b4171ea 100644\n--- a/patchwork/tests/api/test_user.py\n+++ b/patchwork/tests/api/test_user.py\n@@ -20,8 +20,8 @@\n import unittest\n \n from django.conf import settings\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_maintainer\n from patchwork.tests.utils import create_user\n \ndiff --git a/patchwork/tests/test_about.py b/patchwork/tests/test_about.py\nindex f4059682..956d0324 100644\n--- a/patchwork/tests/test_about.py\n+++ b/patchwork/tests/test_about.py\n@@ -18,8 +18,7 @@\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n from django.test import TestCase\n-\n-from patchwork.compat import reverse\n+from django.urls import reverse\n \n \n class AboutViewTest(TestCase):\ndiff --git a/patchwork/tests/test_bundles.py b/patchwork/tests/test_bundles.py\nindex 4461e32f..3fa556b0 100644\n--- a/patchwork/tests/test_bundles.py\n+++ b/patchwork/tests/test_bundles.py\n@@ -25,12 +25,12 @@ import unittest\n \n from django.conf import settings\n from django.test import TestCase\n+from django.urls import reverse\n from django.utils.http import urlencode\n from django.utils import six\n from django.utils.six.moves import range\n from django.utils.six.moves import zip\n \n-from patchwork.compat import reverse\n from patchwork.models import Bundle\n from patchwork.models import BundlePatch\n from patchwork.tests.utils import create_bundle\ndiff --git a/patchwork/tests/test_completion.py b/patchwork/tests/test_completion.py\nindex 8297e571..8e769d4b 100644\n--- a/patchwork/tests/test_completion.py\n+++ b/patchwork/tests/test_completion.py\n@@ -22,9 +22,9 @@ from __future__ import absolute_import\n import json\n \n from django.test import TestCase\n+from django.urls import reverse\n from django.utils.six.moves import range\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_person\n \n \ndiff --git a/patchwork/tests/test_confirm.py b/patchwork/tests/test_confirm.py\nindex ed264313..7d805300 100644\n--- a/patchwork/tests/test_confirm.py\n+++ b/patchwork/tests/test_confirm.py\n@@ -18,8 +18,8 @@\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import EmailConfirmation\n from patchwork.tests.utils import create_user\n \ndiff --git a/patchwork/tests/test_detail.py b/patchwork/tests/test_detail.py\nindex 5d8534ea..f119da05 100644\n--- a/patchwork/tests/test_detail.py\n+++ b/patchwork/tests/test_detail.py\n@@ -20,8 +20,8 @@\n from __future__ import absolute_import\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_comment\n from patchwork.tests.utils import create_cover\n from patchwork.tests.utils import create_patch\ndiff --git a/patchwork/tests/test_encodings.py b/patchwork/tests/test_encodings.py\nindex 794d67ac..5a56d4b1 100644\n--- a/patchwork/tests/test_encodings.py\n+++ b/patchwork/tests/test_encodings.py\n@@ -18,8 +18,8 @@\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_person\n from patchwork.tests.utils import create_patch\n from patchwork.tests.utils import read_patch\ndiff --git a/patchwork/tests/test_filters.py b/patchwork/tests/test_filters.py\nindex 23cf0ff0..44180f90 100644\n--- a/patchwork/tests/test_filters.py\n+++ b/patchwork/tests/test_filters.py\n@@ -18,8 +18,8 @@\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_project\n \n \ndiff --git a/patchwork/tests/test_list.py b/patchwork/tests/test_list.py\nindex 2a023ac6..867d77f6 100644\n--- a/patchwork/tests/test_list.py\n+++ b/patchwork/tests/test_list.py\n@@ -23,9 +23,9 @@ from datetime import datetime as dt\n import re\n \n from django.test import TestCase\n+from django.urls import reverse\n from django.utils.six.moves import zip\n \n-from patchwork.compat import reverse\n from patchwork.models import Patch\n from patchwork.tests.utils import create_patch\n from patchwork.tests.utils import create_person\ndiff --git a/patchwork/tests/test_mail_settings.py b/patchwork/tests/test_mail_settings.py\nindex d38149d8..a6f49645 100644\n--- a/patchwork/tests/test_mail_settings.py\n+++ b/patchwork/tests/test_mail_settings.py\n@@ -21,8 +21,8 @@ import re\n \n from django.core import mail\n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import EmailOptout\n from patchwork.models import EmailConfirmation\n from patchwork.tests.utils import create_person\ndiff --git a/patchwork/tests/test_mboxviews.py b/patchwork/tests/test_mboxviews.py\nindex 8eb3581a..b7af746b 100644\n--- a/patchwork/tests/test_mboxviews.py\n+++ b/patchwork/tests/test_mboxviews.py\n@@ -25,8 +25,8 @@ import dateutil.tz\n import email\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_comment\n from patchwork.tests.utils import create_patch\n from patchwork.tests.utils import create_project\ndiff --git a/patchwork/tests/test_paginator.py b/patchwork/tests/test_paginator.py\nindex b2191bbb..2f2b6e13 100644\n--- a/patchwork/tests/test_paginator.py\n+++ b/patchwork/tests/test_paginator.py\n@@ -18,8 +18,8 @@\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests.utils import create_patches\n from patchwork.tests.utils import create_project\n from patchwork.tests.utils import create_user\ndiff --git a/patchwork/tests/test_projects.py b/patchwork/tests/test_projects.py\nindex 804bdda2..67ac1250 100644\n--- a/patchwork/tests/test_projects.py\n+++ b/patchwork/tests/test_projects.py\n@@ -18,8 +18,8 @@\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.tests import utils\n \n \ndiff --git a/patchwork/tests/test_registration.py b/patchwork/tests/test_registration.py\nindex 28581eb5..2158dcf5 100644\n--- a/patchwork/tests/test_registration.py\n+++ b/patchwork/tests/test_registration.py\n@@ -21,8 +21,8 @@ from django.contrib.auth.models import User\n from django.core import mail\n from django.test.client import Client\n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import EmailConfirmation, Person\n from patchwork.tests.utils import create_user\n \ndiff --git a/patchwork/tests/test_updates.py b/patchwork/tests/test_updates.py\nindex 80367f45..89f2091a 100644\n--- a/patchwork/tests/test_updates.py\n+++ b/patchwork/tests/test_updates.py\n@@ -18,8 +18,8 @@\n # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n \n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import Patch\n from patchwork.models import State\n from patchwork.tests.utils import create_patches\ndiff --git a/patchwork/tests/test_user.py b/patchwork/tests/test_user.py\nindex 6dd41e1f..05fe6d5e 100644\n--- a/patchwork/tests/test_user.py\n+++ b/patchwork/tests/test_user.py\n@@ -20,8 +20,8 @@\n from django.contrib.auth.models import User\n from django.core import mail\n from django.test import TestCase\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import EmailConfirmation\n from patchwork.models import Person\n from patchwork.models import UserProfile\ndiff --git a/patchwork/tests/test_xmlrpc.py b/patchwork/tests/test_xmlrpc.py\nindex 8edc07ac..a31cdde0 100644\n--- a/patchwork/tests/test_xmlrpc.py\n+++ b/patchwork/tests/test_xmlrpc.py\n@@ -21,9 +21,9 @@ import unittest\n \n from django.conf import settings\n from django.test import LiveServerTestCase\n+from django.urls import reverse\n from django.utils.six.moves import xmlrpc_client\n \n-from patchwork.compat import reverse\n from patchwork.tests import utils\n \n \ndiff --git a/patchwork/urls.py b/patchwork/urls.py\nindex e90de6b2..6b1ef511 100644\n--- a/patchwork/urls.py\n+++ b/patchwork/urls.py\n@@ -22,8 +22,8 @@ from django.conf import settings\n from django.conf.urls import url, include\n from django.contrib import admin\n from django.contrib.auth import views as auth_views\n+from django.urls import reverse_lazy\n \n-from patchwork.compat import reverse_lazy\n from patchwork.views import about as about_views\n from patchwork.views import api as api_views\n from patchwork.views import bundle as bundle_views\ndiff --git a/patchwork/views/__init__.py b/patchwork/views/__init__.py\nindex f8d23a38..a30b3a61 100644\n--- a/patchwork/views/__init__.py\n+++ b/patchwork/views/__init__.py\n@@ -20,7 +20,6 @@\n from django.contrib import messages\n from django.shortcuts import get_object_or_404\n \n-from patchwork.compat import is_authenticated\n from patchwork.filters import Filters\n from patchwork.forms import MultiplePatchForm\n from patchwork.models import Bundle\n@@ -230,7 +229,7 @@ def generic_list(request, project, view, view_args=None, filter_settings=None,\n     user = request.user\n     properties_form = None\n \n-    if is_authenticated(user):\n+    if user.is_authenticated:\n         # we only pass the post data to the MultiplePatchForm if that was\n         # the actual form submitted\n         data_tmp = None\ndiff --git a/patchwork/views/about.py b/patchwork/views/about.py\nindex 24a0845e..508dec37 100644\n--- a/patchwork/views/about.py\n+++ b/patchwork/views/about.py\n@@ -21,8 +21,7 @@\n from django.conf import settings\n from django.http import HttpResponsePermanentRedirect\n from django.shortcuts import render\n-\n-from patchwork.compat import reverse\n+from django.urls import reverse\n \n \n def about(request):\ndiff --git a/patchwork/views/bundle.py b/patchwork/views/bundle.py\nindex 5aa63fba..714062c3 100644\n--- a/patchwork/views/bundle.py\n+++ b/patchwork/views/bundle.py\n@@ -24,8 +24,8 @@ from django.http import HttpResponseRedirect\n from django.http import HttpResponseNotFound\n from django.shortcuts import get_object_or_404\n from django.shortcuts import render\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.filters import DelegateFilter\n from patchwork.forms import BundleForm\n from patchwork.forms import DeleteBundleForm\ndiff --git a/patchwork/views/comment.py b/patchwork/views/comment.py\nindex 987f76c5..c9763227 100644\n--- a/patchwork/views/comment.py\n+++ b/patchwork/views/comment.py\n@@ -19,8 +19,8 @@\n \n from django import http\n from django import shortcuts\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork import models\n \n \ndiff --git a/patchwork/views/cover.py b/patchwork/views/cover.py\nindex 73f83cb9..f18a262f 100644\n--- a/patchwork/views/cover.py\n+++ b/patchwork/views/cover.py\n@@ -22,8 +22,8 @@ from django.http import HttpResponse\n from django.http import HttpResponseRedirect\n from django.shortcuts import get_object_or_404\n from django.shortcuts import render_to_response\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import CoverLetter\n from patchwork.models import Submission\n from patchwork.views.utils import cover_to_mbox\ndiff --git a/patchwork/views/mail.py b/patchwork/views/mail.py\nindex 8afd83b3..aca7ab15 100644\n--- a/patchwork/views/mail.py\n+++ b/patchwork/views/mail.py\n@@ -24,8 +24,8 @@ from django.core.mail import send_mail\n from django.http import HttpResponseRedirect\n from django.shortcuts import render\n from django.template.loader import render_to_string\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.forms import EmailForm\n from patchwork.models import EmailConfirmation\n from patchwork.models import EmailOptout\ndiff --git a/patchwork/views/patch.py b/patchwork/views/patch.py\nindex cbd4ec39..6921882e 100644\n--- a/patchwork/views/patch.py\n+++ b/patchwork/views/patch.py\n@@ -24,9 +24,8 @@ from django.http import HttpResponseForbidden\n from django.http import HttpResponseRedirect\n from django.shortcuts import get_object_or_404\n from django.shortcuts import render\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n-from patchwork.compat import is_authenticated\n from patchwork.forms import CreateBundleForm\n from patchwork.forms import PatchForm\n from patchwork.models import Bundle\n@@ -43,7 +42,7 @@ def patch_list(request, project_id):\n     context = generic_list(request, project, 'patch-list',\n                            view_args={'project_id': project.linkname})\n \n-    if is_authenticated(request.user):\n+    if request.user.is_authenticated:\n         context['bundles'] = request.user.bundles.all()\n \n     return render(request, 'patchwork/list.html', context)\n@@ -70,7 +69,7 @@ def patch_detail(request, patch_id):\n \n     if editable:\n         form = PatchForm(instance=patch)\n-    if is_authenticated(request.user):\n+    if request.user.is_authenticated:\n         createbundleform = CreateBundleForm()\n \n     if request.method == 'POST':\n@@ -111,7 +110,7 @@ def patch_detail(request, patch_id):\n                 form.save()\n                 messages.success(request, 'Patch updated')\n \n-    if is_authenticated(request.user):\n+    if request.user.is_authenticated:\n         context['bundles'] = request.user.bundles.all()\n \n     context['submission'] = patch\ndiff --git a/patchwork/views/project.py b/patchwork/views/project.py\nindex 484455c0..a2e5b2da 100644\n--- a/patchwork/views/project.py\n+++ b/patchwork/views/project.py\n@@ -22,8 +22,8 @@ from django.contrib.auth.models import User\n from django.http import HttpResponseRedirect\n from django.shortcuts import get_object_or_404\n from django.shortcuts import render\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.models import Patch\n from patchwork.models import Project\n \ndiff --git a/patchwork/views/user.py b/patchwork/views/user.py\nindex 4a4958ab..8dcb407b 100644\n--- a/patchwork/views/user.py\n+++ b/patchwork/views/user.py\n@@ -28,8 +28,8 @@ from django.http import HttpResponseRedirect\n from django.shortcuts import get_object_or_404\n from django.shortcuts import render\n from django.template.loader import render_to_string\n+from django.urls import reverse\n \n-from patchwork.compat import reverse\n from patchwork.filters import DelegateFilter\n from patchwork.forms import EmailForm\n from patchwork.forms import RegistrationForm\ndiff --git a/patchwork/views/xmlrpc.py b/patchwork/views/xmlrpc.py\nindex 93f6035e..b02a65b6 100644\n--- a/patchwork/views/xmlrpc.py\n+++ b/patchwork/views/xmlrpc.py\n@@ -35,11 +35,11 @@ from django.http import HttpResponse\n from django.http import HttpResponseRedirect\n from django.http import HttpResponseServerError\n from django.views.decorators.csrf import csrf_exempt\n+from django.urls import reverse\n from django.utils import six\n from django.utils.six.moves import xmlrpc_client\n from django.utils.six.moves.xmlrpc_server import SimpleXMLRPCDispatcher\n \n-from patchwork.compat import reverse\n from patchwork.models import Check\n from patchwork.models import Patch\n from patchwork.models import Person\n",
    "prefixes": [
        "05/11"
    ]
}