[snowy] More REST work. Still some code cleanliness issues I'm working through



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]