diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2012-03-25 17:37:20 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2012-03-25 17:37:20 (GMT) |
commit | 9298786ca91ce6d305bc8ea1d2d87a47d2189d94 (patch) | |
tree | 24a061247f2708aa9c5711e46bebf12e849de663 | |
parent | be90d61605bfad9fdaa289fd3dac7085b723e120 (diff) |
Simplify gettign blobs by returning file-like object
-rw-r--r-- | restful_document/document.py | 13 |
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 = {} |