aboutsummaryrefslogtreecommitdiffstats
path: root/examples/objectstore/views.py
diff options
context:
space:
mode:
authorTom Christie2012-02-25 18:45:17 +0000
committerTom Christie2012-02-25 18:45:17 +0000
commit1cde31c86d9423e9b7a7409c2ef2ba7c0500e47f (patch)
treeea24bce0f24507aa43f408776ccf7324f204256d /examples/objectstore/views.py
parent5fd4c639d7c64572dd07dc31dcd627bed9469b05 (diff)
downloaddjango-rest-framework-1cde31c86d9423e9b7a7409c2ef2ba7c0500e47f.tar.bz2
Massive merge
Diffstat (limited to 'examples/objectstore/views.py')
-rw-r--r--examples/objectstore/views.py52
1 files changed, 36 insertions, 16 deletions
diff --git a/examples/objectstore/views.py b/examples/objectstore/views.py
index b48bfac2..a8889cd8 100644
--- a/examples/objectstore/views.py
+++ b/examples/objectstore/views.py
@@ -28,6 +28,20 @@ def remove_oldest_files(dir, max_files):
[os.remove(path) for path in ctime_sorted_paths[max_files:]]
+def get_filename(key):
+ """
+ Given a stored object's key returns the file's path.
+ """
+ return os.path.join(OBJECT_STORE_DIR, key)
+
+
+def get_file_url(key, request):
+ """
+ Given a stored object's key returns the URL for the object.
+ """
+ return reverse('stored-object', kwargs={'key': key}, request=request)
+
+
class ObjectStoreRoot(View):
"""
Root of the Object Store API.
@@ -38,20 +52,25 @@ class ObjectStoreRoot(View):
"""
Return a list of all the stored object URLs. (Ordered by creation time, newest first)
"""
- filepaths = [os.path.join(OBJECT_STORE_DIR, file) for file in os.listdir(OBJECT_STORE_DIR) if not file.startswith('.')]
+ filepaths = [os.path.join(OBJECT_STORE_DIR, file)
+ for file in os.listdir(OBJECT_STORE_DIR)
+ if not file.startswith('.')]
ctime_sorted_basenames = [item[0] for item in sorted([(os.path.basename(path), os.path.getctime(path)) for path in filepaths],
key=operator.itemgetter(1), reverse=True)]
- return Response([reverse('stored-object', request, kwargs={'key':key}) for key in ctime_sorted_basenames])
+ content = [get_file_url(key, request)
+ for key in ctime_sorted_basenames]
+ return Response(content)
def post(self, request):
"""
Create a new stored object, with a unique key.
"""
key = str(uuid.uuid1())
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- pickle.dump(self.CONTENT, open(pathname, 'wb'))
+ filename = get_filename(key)
+ pickle.dump(self.CONTENT, open(filename, 'wb'))
+
remove_oldest_files(OBJECT_STORE_DIR, MAX_FILES)
- url = reverse('stored-object', request, kwargs={'key':key})
+ url = get_file_url(key, request)
return Response(self.CONTENT, status.HTTP_201_CREATED, {'Location': url})
@@ -60,30 +79,31 @@ class StoredObject(View):
Represents a stored object.
The object may be any picklable content.
"""
-
def get(self, request, key):
"""
- Return a stored object, by unpickling the contents of a locally stored file.
+ Return a stored object, by unpickling the contents of a locally
+ stored file.
"""
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- if not os.path.exists(pathname):
+ filename = get_filename(key)
+ if not os.path.exists(filename):
return Response(status=status.HTTP_404_NOT_FOUND)
- return Response(pickle.load(open(pathname, 'rb')))
+ return Response(pickle.load(open(filename, 'rb')))
def put(self, request, key):
"""
- Update/create a stored object, by pickling the request content to a locally stored file.
+ Update/create a stored object, by pickling the request content to a
+ locally stored file.
"""
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- pickle.dump(self.CONTENT, open(pathname, 'wb'))
+ filename = get_filename(key)
+ pickle.dump(self.CONTENT, open(filename, 'wb'))
return Response(self.CONTENT)
def delete(self, request, key):
"""
Delete a stored object, by removing it's pickled file.
"""
- pathname = os.path.join(OBJECT_STORE_DIR, key)
- if not os.path.exists(pathname):
+ filename = get_filename(key)
+ if not os.path.exists(filename):
return Response(status=status.HTTP_404_NOT_FOUND)
- os.remove(pathname)
+ os.remove(filename)
return Response()