diff options
author | Jelle van der Waa <jelle@vdwaa.nl> | 2018-05-19 21:56:04 +0200 |
---|---|---|
committer | Jelle van der Waa <jelle@vdwaa.nl> | 2018-07-06 22:08:26 +0200 |
commit | 411e1c54797056bcb7a9650d12964d163611e8d9 (patch) | |
tree | a7f0a2ee35b31e5d203b44a961c031895e8db216 /todolists | |
parent | bf3e96dc8ba54a813604cb2f29af52a93ce85ce2 (diff) | |
download | archweb-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.py | 6 | ||||
-rw-r--r-- | todolists/urls.py | 3 | ||||
-rw-r--r-- | todolists/views.py | 21 |
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: |