Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-03-25 17:37:20 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-03-25 17:37:20 (GMT)
commit9298786ca91ce6d305bc8ea1d2d87a47d2189d94 (patch)
tree24a061247f2708aa9c5711e46bebf12e849de663
parentbe90d61605bfad9fdaa289fd3dac7085b723e120 (diff)
Simplify gettign blobs by returning file-like object
-rw-r--r--restful_document/document.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/restful_document/document.py b/restful_document/document.py
index 32fdc56..791c39d 100644
--- a/restful_document/document.py
+++ b/restful_document/document.py
@@ -25,6 +25,8 @@ from restful_document import env
LAYERS = ['public', 'deleted']
+_PAGE_SIZE = 4096
+
_logger = logging.getLogger('rd.document')
@@ -117,9 +119,16 @@ class Document(ad.Document):
def send_blob(self, prop):
stat = self.stat_blob(prop)
+ if stat and stat['size']:
+ env.responce['Content-Length'] = stat['size']
env.responce['Content-Type'] = self.metadata[prop].mime_type
- env.responce['Content-Length'] = stat['size'] if stat else 0
- return self.get_blob(prop)
+
+ stream = self.get_blob(prop)
+ while True:
+ chunk = stream.read(_PAGE_SIZE)
+ if not chunk:
+ break
+ yield chunk
def all_properties(self, reply):
result = {}