# 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 # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import os import ick2 class BlobStore: def __init__(self): self._blobdir = None def get_blob_directory(self): return self._blobdir def set_blob_directory(self, dirname): self._blobdir = dirname if not os.path.exists(self._blobdir): os.makedirs(self._blobdir) def store_blob(self, name, blob): 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) 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.abspath(os.path.join(self._blobdir, name))