diff options
author | Lars Wirzenius <liw@liw.fi> | 2018-03-24 17:41:45 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-03-24 19:09:18 +0200 |
commit | a3ef8c3ddfb24d78431172f84015d02422fa9f99 (patch) | |
tree | ff954dfdcaf368e23c9526cf8093262780fc9930 /ick2/blob_store.py | |
parent | 78d9c80226c52bcd70e27e7ee2a3a7754f644b53 (diff) | |
download | ick2-a3ef8c3ddfb24d78431172f84015d02422fa9f99.tar.gz |
Change: handle up/downloads of large blobs
Diffstat (limited to 'ick2/blob_store.py')
-rw-r--r-- | ick2/blob_store.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/ick2/blob_store.py b/ick2/blob_store.py index 7d02cbf..343b018 100644 --- a/ick2/blob_store.py +++ b/ick2/blob_store.py @@ -1,4 +1,4 @@ -# Copyright (C) 2017 Lars Wirzenius +# Copyright (C) 2017-2018 Lars Wirzenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -34,18 +34,27 @@ class BlobStore: os.makedirs(self._blobdir) def store_blob(self, name, blob): - filename = self._blob_filename(name) + filename = self.blob_filename(name) ick2.log.log( 'trace', msg_text='store_blob', name=name, filename=filename) with open(filename, 'wb') as f: f.write(blob) + def store_blob_from_reader(self, name, func): + max_size = 1024**2 + filename = self.blob_filename(name) + ick2.log.log( + 'trace', msg_text='store_blob', name=name, filename=filename) + with open(filename, 'wb') as f: + for data in func(max_size): + f.write(data) + def get_blob(self, name): - filename = self._blob_filename(name) + filename = self.blob_filename(name) ick2.log.log( 'trace', msg_text='get_blob', name=name, filename=filename) with open(filename, 'rb') as f: return f.read() - def _blob_filename(self, name): - return os.path.join(self._blobdir, name) + def blob_filename(self, name): + return os.path.abspath(os.path.join(self._blobdir, name)) |