[RFC 02/11] REST: Add base configuration hooks for a REST API

Andy Doan andy.doan at linaro.org
Sat Apr 16 04:23:58 AEST 2016


This adds the ability to expose a REST API based on the Django REST
framework project. Since this project isn't packaged in most current
distributions, we ensure that its both installed and enabled before
trying to use it.

Signed-off-by: Andy Doan <andy.doan at linaro.org>
Inspired-by: Damien Lespiau <damien.lespiau at intel.com>
---
 patchwork/settings/base.py  | 11 +++++++++++
 patchwork/urls.py           |  7 +++++++
 patchwork/views/rest_api.py | 28 ++++++++++++++++++++++++++++
 requirements-test.txt       |  1 +
 4 files changed, 47 insertions(+)
 create mode 100644 patchwork/views/rest_api.py

diff --git a/patchwork/settings/base.py b/patchwork/settings/base.py
index 2f81d4b..909ae4b 100644
--- a/patchwork/settings/base.py
+++ b/patchwork/settings/base.py
@@ -28,6 +28,14 @@ INSTALLED_APPS = [
     'patchwork',
 ]
 
+try:
+    # django rest framework isn't a standard package in most distros, so
+    # don't make it cumpulsory
+    import rest_framework  # NOQA
+    INSTALLED_APPS.append('rest_framework')
+except ImportError:
+    pass
+
 # HTTP
 
 MIDDLEWARE_CLASSES = [
@@ -148,6 +156,9 @@ NOTIFICATION_FROM_EMAIL = DEFAULT_FROM_EMAIL
 # Set to True to enable the Patchwork XML-RPC interface
 ENABLE_XMLRPC = False
 
+# Set to True to enable the Patchwork REST API
+ENABLE_REST_API = False
+
 # Set to True to enable redirections or URLs from previous versions
 # of patchwork
 COMPAT_REDIR = True
diff --git a/patchwork/urls.py b/patchwork/urls.py
index f3fdc5b..c5cabe5 100644
--- a/patchwork/urls.py
+++ b/patchwork/urls.py
@@ -138,6 +138,13 @@ if settings.ENABLE_XMLRPC:
             name='pwclientrc'),
     ]
 
+if settings.ENABLE_REST_API:
+    if 'rest_framework' not in settings.INSTALLED_APPS:
+        raise RuntimeError(
+            'djangorestframework must be installed to enable the REST API.')
+    import patchwork.views.rest_api
+    urlpatterns += patchwork.views.rest_api.urlpatterns
+
 # redirect from old urls
 if settings.COMPAT_REDIR:
     urlpatterns += [
diff --git a/patchwork/views/rest_api.py b/patchwork/views/rest_api.py
new file mode 100644
index 0000000..e451770
--- /dev/null
+++ b/patchwork/views/rest_api.py
@@ -0,0 +1,28 @@
+# Patchwork - automated patch tracking system
+# Copyright (C) 2016 Linaro Corporation
+#
+# This file is part of the Patchwork package.
+#
+# Patchwork is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Patchwork is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Patchwork; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+from django.conf.urls import url, include
+
+from rest_framework import routers
+
+router = routers.DefaultRouter()
+
+urlpatterns = [
+    url(r'^api/1.0/', include(router.urls)),
+]
diff --git a/requirements-test.txt b/requirements-test.txt
index 2d0b32c..fb6a8c8 100644
--- a/requirements-test.txt
+++ b/requirements-test.txt
@@ -2,3 +2,4 @@ mysqlclient==1.3.7  # replace this with psycopg2 for a PostgreSQL backend
 django-debug-toolbar==1.4
 python-dateutil>2.0,<3.0
 selenium>2.0,<3.0
+djangorestframework==3.3.3
-- 
2.7.4



More information about the Patchwork mailing list