[snowy] More REST work. Still some code cleanliness issues I'm working through
- From: Brad Taylor <btaylor src gnome org>
- To: svn-commits-list gnome org
- Subject: [snowy] More REST work. Still some code cleanliness issues I'm working through
- Date: Thu, 14 May 2009 18:03:30 -0400 (EDT)
commit 973658e6462941023cca3264d636a9bd02bddf2b
Author: Brad Taylor <brad getcoded net>
Date: Thu May 14 18:03:02 2009 -0400
More REST work. Still some code cleanliness issues I'm working through
---
api/handlers.py | 58 ++++++++++++++++++++++++++++++++++++++++++++----------
api/urls.py | 10 +++++---
notes/urls.py | 2 +-
3 files changed, 54 insertions(+), 16 deletions(-)
diff --git a/api/handlers.py b/api/handlers.py
index 58ff140..3278f0d 100644
--- a/api/handlers.py
+++ b/api/handlers.py
@@ -15,27 +15,63 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
-from django.contrib.auth.models import User
+from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
-from piston.handler import AnonymousBaseHandler
-from piston.utils import rc
+from django.contrib.auth.models import User
+
+from piston.handler import AnonymousBaseHandler, BaseHandler
+from piston.utils import rc, HttpStatusCode
from snowy.notes.models import Note
+def get_user_or_not_here(username):
+ try:
+ return User.objects.get(username=username)
+ except ObjectDoesNotExist:
+ raise HttpStatusCode('Gone', code=410)
+
+def get_note_or_not_here(note_id):
+ try:
+ return Note.objects.get(pk=note_id)
+ except ObjectDoesNotExist:
+ raise HttpStatusCode('Gone', code=410)
+
class UserHandler(AnonymousBaseHandler):
allow_methods = ('GET',)
- model = User
def read(self, request, username):
- # TODO: abstract this out
- try:
- user = User.objects.get(username=username)
- except:
- return rc.NOT_HERE
-
+ user = get_user_or_not_here(username)
return {
'first name': user.first_name,
'last name': user.last_name,
'notes-ref': reverse('note_index', kwargs={'username': username}),
- #'notes-api-ref': reverse('note_api_index', kwargs={'username': username}),
+ 'notes-api-ref': reverse('note_api_index', kwargs={'username': username}),
+ }
+
+class ListNoteRefsHandler(BaseHandler):
+ allow_methods = ('GET',)
+
+ def read(self, request, username):
+ user = get_user_or_not_here(username)
+ return {'note-refs': [
+ {'guid': n.guid, 'href': n.get_absolute_url(), 'title': n.title }
+ for n in Note.objects.filter(author=user)
+ ]}
+
+class NoteHandler(BaseHandler):
+ allow_methods = ('GET',)
+ model = Note
+
+ def read(self, request, username, note_id, slug=None):
+ user = get_user_or_not_here(username)
+ note = get_note_or_not_here(note_id)
+ return {
+ 'guid': note.guid,
+ 'title': note.title,
+ 'note-content': note.content,
+ 'last-change-date': note.user_modified,
+ 'last-metadata-change-date': note.modified,
+ 'create-date': note.created,
+ 'open-on-startup': note.open_on_startup,
+ 'tags': [t.name for t in note.tags.all()],
}
diff --git a/api/urls.py b/api/urls.py
index 3f28c17..ccf33f7 100644
--- a/api/urls.py
+++ b/api/urls.py
@@ -18,12 +18,14 @@
from django.conf.urls.defaults import *
from piston.resource import Resource
-from snowy.api.handlers import UserHandler
+from snowy.api.handlers import *
user_handler = Resource(UserHandler)
+list_note_refs_handler = Resource(ListNoteRefsHandler)
+note_handler = Resource(NoteHandler)
-urlpatterns = patterns('',
+urlpatterns = patterns('1.0',
+ url(r'(?P<username>\w+)/notes/(?P<note_id>\d+)/(?P<slug>[^/]+)/$', note_handler, name='note_api_detail'),
+ url(r'(?P<username>\w+)/notes/$', list_note_refs_handler, name='note_api_index'),
url(r'(?P<username>\w+)/$', user_handler),
-# url(r'^(?P<username>\w+)/notes$', note_handler),
-# url(r'^(?P<username>\w+)/notes$', note_handler),
)
diff --git a/notes/urls.py b/notes/urls.py
index a31e3dd..523cfaa 100644
--- a/notes/urls.py
+++ b/notes/urls.py
@@ -21,5 +21,5 @@ from snowy.notes.models import Note
urlpatterns = patterns('',
url(r'^$', 'snowy.notes.views.note_index', name='note_index'),
url(r'^(?P<note_id>\d+)/$', 'snowy.notes.views.note_detail'),
- url(r'^(?P<note_id>\d+)/(?P<slug>[\w-]+)/$', 'snowy.notes.views.note_detail', name='note_detail'),
+ url(r'^(?P<note_id>\d+)/(?P<slug>[^/]+)/$', 'snowy.notes.views.note_detail', name='note_detail'),
)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]