Implement some new methods on the storage engines.
This commit is contained in:
parent
4fa37a46d1
commit
398202e6fc
10 changed files with 211 additions and 98 deletions
|
@ -1,8 +1,14 @@
|
|||
from storage.basestorage import BaseStorage
|
||||
import cStringIO as StringIO
|
||||
import hashlib
|
||||
|
||||
_FAKE_STORAGE_MAP = {}
|
||||
from collections import defaultdict
|
||||
from uuid import uuid4
|
||||
|
||||
class FakeStorage(BaseStorage):
|
||||
from storage.basestorage import BaseStorageV2
|
||||
|
||||
_FAKE_STORAGE_MAP = defaultdict(StringIO.StringIO)
|
||||
|
||||
class FakeStorage(BaseStorageV2):
|
||||
def _init_path(self, path=None, create=False):
|
||||
return path
|
||||
|
||||
|
@ -10,16 +16,26 @@ class FakeStorage(BaseStorage):
|
|||
if not path in _FAKE_STORAGE_MAP:
|
||||
raise IOError('Fake file %s not found' % path)
|
||||
|
||||
return _FAKE_STORAGE_MAP.get(path)
|
||||
_FAKE_STORAGE_MAP.get(path).seek(0)
|
||||
return _FAKE_STORAGE_MAP.get(path).read()
|
||||
|
||||
def put_content(self, path, content):
|
||||
_FAKE_STORAGE_MAP[path] = content
|
||||
_FAKE_STORAGE_MAP.pop(path, None)
|
||||
_FAKE_STORAGE_MAP[path].write(content)
|
||||
|
||||
def stream_read(self, path):
|
||||
yield _FAKE_STORAGE_MAP[path]
|
||||
io_obj = _FAKE_STORAGE_MAP[path]
|
||||
io_obj.seek(0)
|
||||
while True:
|
||||
buf = io_obj.read(self.buffer_size)
|
||||
if not buf:
|
||||
break
|
||||
yield buf
|
||||
|
||||
def stream_write(self, path, fp, content_type=None, content_encoding=None):
|
||||
_FAKE_STORAGE_MAP[path] = fp.read()
|
||||
out_fp = _FAKE_STORAGE_MAP[path]
|
||||
out_fp.seek(0)
|
||||
self.stream_write_to_fp(fp, out_fp)
|
||||
|
||||
def remove(self, path):
|
||||
_FAKE_STORAGE_MAP.pop(path, None)
|
||||
|
@ -28,4 +44,21 @@ class FakeStorage(BaseStorage):
|
|||
return path in _FAKE_STORAGE_MAP
|
||||
|
||||
def get_checksum(self, path):
|
||||
return path
|
||||
return hashlib.sha256(_FAKE_STORAGE_MAP[path].read()).hexdigest()[:7]
|
||||
|
||||
def initiate_chunked_upload(self):
|
||||
new_uuid = str(uuid4())
|
||||
_FAKE_STORAGE_MAP[new_uuid].seek(0)
|
||||
return new_uuid, {}
|
||||
|
||||
def stream_upload_chunk(self, uuid, offset, length, in_fp, _):
|
||||
upload_storage = _FAKE_STORAGE_MAP[uuid]
|
||||
upload_storage.seek(offset)
|
||||
return self.stream_write_to_fp(in_fp, upload_storage, length)
|
||||
|
||||
def complete_chunked_upload(self, uuid, final_path, _):
|
||||
_FAKE_STORAGE_MAP[final_path] = _FAKE_STORAGE_MAP[uuid]
|
||||
_FAKE_STORAGE_MAP.pop(uuid, None)
|
||||
|
||||
def cancel_chunked_upload(self, uuid, _):
|
||||
_FAKE_STORAGE_MAP.pop(uuid, None)
|
||||
|
|
Reference in a new issue