summaryrefslogtreecommitdiffstats
path: root/todolists
diff options
context:
space:
mode:
authorJelle van der Waa <jelle@vdwaa.nl>2018-05-19 21:56:04 +0200
committerJelle van der Waa <jelle@vdwaa.nl>2018-07-06 22:08:26 +0200
commit411e1c54797056bcb7a9650d12964d163611e8d9 (patch)
treea7f0a2ee35b31e5d203b44a961c031895e8db216 /todolists
parentbf3e96dc8ba54a813604cb2f29af52a93ce85ce2 (diff)
downloadarchweb-411e1c54797056bcb7a9650d12964d163611e8d9.tar.gz
archweb-411e1c54797056bcb7a9650d12964d163611e8d9.zip
todolists: Add json endpoint for todo detail view
Add a /todo/$name/json endpoint which returns the json for a todo list item.
Diffstat (limited to 'todolists')
-rw-r--r--todolists/tests/test_views.py6
-rw-r--r--todolists/urls.py3
-rw-r--r--todolists/views.py21
3 files changed, 28 insertions, 2 deletions
diff --git a/todolists/tests/test_views.py b/todolists/tests/test_views.py
index cb1a245b..c0d6cee0 100644
--- a/todolists/tests/test_views.py
+++ b/todolists/tests/test_views.py
@@ -27,3 +27,9 @@ class TestTodolist(TestCase):
response = self.client.get(self.todolist.get_absolute_url())
self.assertEqual(response.status_code, 200)
self.assertIn(self.todolist.name, response.content)
+
+ def test_todolist_json(self):
+ response = self.client.get(self.todolist.get_absolute_url() + 'json')
+ self.assertEqual(response.status_code, 200)
+ data = response.json()
+ self.assertEqual(data['name'], self.todolist.name)
diff --git a/todolists/urls.py b/todolists/urls.py
index 178cdc9a..37a8420c 100644
--- a/todolists/urls.py
+++ b/todolists/urls.py
@@ -1,7 +1,7 @@
from django.conf.urls import url
from django.contrib.auth.decorators import permission_required
-from .views import (view_redirect, view, add, edit, flag,
+from .views import (view_redirect, view, view_json, add, edit, flag,
list_pkgbases, DeleteTodolist, TodolistListView)
urlpatterns = [
@@ -13,6 +13,7 @@ urlpatterns = [
url(r'^add/$',
permission_required('todolists.add_todolist')(add)),
url(r'^(?P<slug>[-\w]+)/$', view),
+ url(r'^(?P<slug>[-\w]+)/json$', view_json),
url(r'^(?P<slug>[-\w]+)/edit/$',
permission_required('todolists.change_todolist')(edit)),
url(r'^(?P<slug>[-\w]+)/delete/$',
diff --git a/todolists/views.py b/todolists/views.py
index 40a767d1..cf84f156 100644
--- a/todolists/views.py
+++ b/todolists/views.py
@@ -14,7 +14,7 @@ from django.utils.timezone import now
from main.models import Package, Repo
from main.utils import find_unique_slug
-from packages.utils import attach_maintainers
+from packages.utils import attach_maintainers, PackageJSONEncoder
from .models import Todolist, TodolistPackage
from .utils import get_annotated_todolists, attach_staging
@@ -236,4 +236,23 @@ def send_todolist_emails(todo_list, new_packages):
[maint],
fail_silently=True)
+
+class TodoListJSONEncoder(PackageJSONEncoder):
+ def default(self, obj):
+ if isinstance(obj, Todolist):
+ return {
+ 'id': obj.pk,
+ 'name': obj.name,
+ 'description': obj.description,
+ 'packages': [pkg.pkg for pkg in obj.packages()],
+ }
+
+ return super(TodoListJSONEncoder, self).default(obj)
+
+
+def view_json(request, slug):
+ todolist = get_object_or_404(Todolist, slug=slug)
+ to_json = json.dumps(todolist, ensure_ascii=False, cls=TodoListJSONEncoder)
+ return HttpResponse(to_json, content_type='application/json')
+
# vim: set ts=4 sw=4 et: