def PUTUnlinkedSSK(req, client, version): # SDMF: files are small, and we can only upload data req.content.seek(0) data = MutableFileHandle(req.content) d = client.create_mutable_file(data, version=version) d.addCallback(lambda n: n.get_uri()) return d
def replace_me_with_a_child(self, req, client, replace): # a new file is being uploaded in our place. file_format = get_format(req, "CHK") mutable_type = get_mutable_type(file_format) if mutable_type is not None: data = MutableFileHandle(req.content) d = client.create_mutable_file(data, version=mutable_type) def _uploaded(newnode): d2 = self.parentnode.set_node(self.name, newnode, overwrite=replace) d2.addCallback(lambda res: newnode) return d2 d.addCallback(_uploaded) else: assert file_format == "CHK" uploadable = FileHandle(req.content, convergence=client.convergence) d = self.parentnode.add_file(self.name, uploadable, overwrite=replace) def _done(filenode): log.msg("webish upload complete", facility="tahoe.webish", level=log.NOISY, umid="TCjBGQ") if self.node: # we've replaced an existing file (or modified a mutable # file), so the response code is 200 req.setResponseCode(http.OK) else: # we've created a new file, so the code is 201 req.setResponseCode(http.CREATED) return filenode.get_uri() d.addCallback(_done) return d
def update_my_contents(self, req, offset): req.content.seek(0) added_contents = MutableFileHandle(req.content) d = self.node.get_best_mutable_version() d.addCallback(lambda mv: mv.update(added_contents, offset)) d.addCallback(lambda ignored: self.node.get_uri()) return d
def POSTUnlinkedSSK(req, client, version): # "POST /uri", to create an unlinked file. # SDMF: files are small, and we can only upload data contents = req.fields["file"].file data = MutableFileHandle(contents) d = client.create_mutable_file(data, version=version) d.addCallback(lambda n: n.get_uri()) return d
def replace_my_contents_with_a_formpost(self, req): # we have a mutable file. Get the data from the formpost, and replace # the mutable file's contents with it. new_contents = req.fields['file'] new_contents = MutableFileHandle(new_contents.file) d = self.node.overwrite(new_contents) d.addCallback(lambda res: self.node.get_uri()) return d
def test_filehandle_file(self): # Make sure that the MutableFileHandle works on a file as well # as a BytesIO object, since in some cases it will be asked to # deal with files. self.basedir = self.mktemp() # necessary? What am I doing wrong here? os.mkdir(self.basedir) f_path = os.path.join(self.basedir, "test_file") f = open(f_path, "wb") f.write(self.test_data) f.close() f = open(f_path, "rb") uploadable = MutableFileHandle(f) data = uploadable.read(len(self.test_data)) self.failUnlessEqual(b"".join(data), self.test_data) size = uploadable.get_size() self.failUnlessEqual(size, len(self.test_data))
def test_filehandle_file(self): # Make sure that the MutableFileHandle works on a file as well # as a StringIO object, since in some cases it will be asked to # deal with files. self.basedir = self.mktemp() # necessary? What am I doing wrong here? os.mkdir(self.basedir) f_path = os.path.join(self.basedir, "test_file") f = open(f_path, "w") f.write(self.test_data) f.close() f = open(f_path, "r") uploadable = MutableFileHandle(f) data = uploadable.read(len(self.test_data)) self.failUnlessEqual("".join(data), self.test_data) size = uploadable.get_size() self.failUnlessEqual(size, len(self.test_data))
def replace_me_with_a_formpost(self, req, client, replace): # create a new file, maybe mutable, maybe immutable file_format = get_format(req, "CHK") contents = req.fields["file"] if file_format in ("SDMF", "MDMF"): mutable_type = get_mutable_type(file_format) uploadable = MutableFileHandle(contents.file) d = client.create_mutable_file(uploadable, version=mutable_type) def _uploaded(newnode): d2 = self.parentnode.set_node(self.name, newnode, overwrite=replace) d2.addCallback(lambda res: newnode.get_uri()) return d2 d.addCallback(_uploaded) return d uploadable = FileHandle(contents.file, convergence=client.convergence) d = self.parentnode.add_file(self.name, uploadable, overwrite=replace) d.addCallback(lambda newnode: newnode.get_uri()) return d
def replace_my_contents(self, req): req.content.seek(0) new_contents = MutableFileHandle(req.content) d = self.node.overwrite(new_contents) d.addCallback(lambda res: self.node.get_uri()) return d
def setUp(self): self.test_data = b"Test Data" * 50000 self.sio = BytesIO(self.test_data) self.uploadable = MutableFileHandle(self.sio)
class FileHandle(unittest.TestCase): def setUp(self): self.test_data = b"Test Data" * 50000 self.sio = BytesIO(self.test_data) self.uploadable = MutableFileHandle(self.sio) def test_filehandle_read(self): self.basedir = "mutable/FileHandle/test_filehandle_read" chunk_size = 10 for i in range(0, len(self.test_data), chunk_size): data = self.uploadable.read(chunk_size) data = b"".join(data) start = i end = i + chunk_size self.failUnlessEqual(data, self.test_data[start:end]) def test_filehandle_get_size(self): self.basedir = "mutable/FileHandle/test_filehandle_get_size" actual_size = len(self.test_data) size = self.uploadable.get_size() self.failUnlessEqual(size, actual_size) def test_filehandle_get_size_out_of_order(self): # We should be able to call get_size whenever we want without # disturbing the location of the seek pointer. chunk_size = 100 data = self.uploadable.read(chunk_size) self.failUnlessEqual(b"".join(data), self.test_data[:chunk_size]) # Now get the size. size = self.uploadable.get_size() self.failUnlessEqual(size, len(self.test_data)) # Now get more data. We should be right where we left off. more_data = self.uploadable.read(chunk_size) start = chunk_size end = chunk_size * 2 self.failUnlessEqual(b"".join(more_data), self.test_data[start:end]) def test_filehandle_file(self): # Make sure that the MutableFileHandle works on a file as well # as a BytesIO object, since in some cases it will be asked to # deal with files. self.basedir = self.mktemp() # necessary? What am I doing wrong here? os.mkdir(self.basedir) f_path = os.path.join(self.basedir, "test_file") f = open(f_path, "wb") f.write(self.test_data) f.close() f = open(f_path, "rb") uploadable = MutableFileHandle(f) data = uploadable.read(len(self.test_data)) self.failUnlessEqual(b"".join(data), self.test_data) size = uploadable.get_size() self.failUnlessEqual(size, len(self.test_data)) def test_close(self): # Make sure that the MutableFileHandle closes its handle when # told to do so. self.uploadable.close() self.failUnless(self.sio.closed)
def setUp(self): self.test_data = "Test Data" * 50000 self.sio = StringIO(self.test_data) self.uploadable = MutableFileHandle(self.sio)
class FileHandle(unittest.TestCase): def setUp(self): self.test_data = "Test Data" * 50000 self.sio = StringIO(self.test_data) self.uploadable = MutableFileHandle(self.sio) def test_filehandle_read(self): self.basedir = "mutable/FileHandle/test_filehandle_read" chunk_size = 10 for i in xrange(0, len(self.test_data), chunk_size): data = self.uploadable.read(chunk_size) data = "".join(data) start = i end = i + chunk_size self.failUnlessEqual(data, self.test_data[start:end]) def test_filehandle_get_size(self): self.basedir = "mutable/FileHandle/test_filehandle_get_size" actual_size = len(self.test_data) size = self.uploadable.get_size() self.failUnlessEqual(size, actual_size) def test_filehandle_get_size_out_of_order(self): # We should be able to call get_size whenever we want without # disturbing the location of the seek pointer. chunk_size = 100 data = self.uploadable.read(chunk_size) self.failUnlessEqual("".join(data), self.test_data[:chunk_size]) # Now get the size. size = self.uploadable.get_size() self.failUnlessEqual(size, len(self.test_data)) # Now get more data. We should be right where we left off. more_data = self.uploadable.read(chunk_size) start = chunk_size end = chunk_size * 2 self.failUnlessEqual("".join(more_data), self.test_data[start:end]) def test_filehandle_file(self): # Make sure that the MutableFileHandle works on a file as well # as a StringIO object, since in some cases it will be asked to # deal with files. self.basedir = self.mktemp() # necessary? What am I doing wrong here? os.mkdir(self.basedir) f_path = os.path.join(self.basedir, "test_file") f = open(f_path, "w") f.write(self.test_data) f.close() f = open(f_path, "r") uploadable = MutableFileHandle(f) data = uploadable.read(len(self.test_data)) self.failUnlessEqual("".join(data), self.test_data) size = uploadable.get_size() self.failUnlessEqual(size, len(self.test_data)) def test_close(self): # Make sure that the MutableFileHandle closes its handle when # told to do so. self.uploadable.close() self.failUnless(self.sio.closed)