frontends/sftpd: Resolve incompatibilities between SFTP frontend and MDMF changes

This commit is contained in:
Kevan Carstensen 2011-08-01 19:12:07 -07:00
parent b1b77d3b89
commit a87fc8ffab
2 changed files with 15 additions and 19 deletions

View File

@ -30,6 +30,7 @@ from allmydata.util.consumer import download_to_data
from allmydata.interfaces import IFileNode, IDirectoryNode, ExistingChildError, \
NoSuchChildError, ChildOfWrongTypeError
from allmydata.mutable.common import NotWriteableError
from allmydata.mutable.publish import MutableFileHandle
from allmydata.immutable.upload import FileHandle
from allmydata.dirnode import update_metadata
from allmydata.util.fileutil import EncryptedTemporaryFile
@ -663,22 +664,17 @@ class GeneralSFTPFile(PrefixingLogMixin):
else:
assert IFileNode.providedBy(filenode), filenode
if filenode.is_mutable():
self.async.addCallback(lambda ign: filenode.download_best_version())
def _downloaded(data):
self.consumer = OverwriteableFileConsumer(len(data), tempfile_maker)
self.consumer.write(data)
self.consumer.finish()
return None
self.async.addCallback(_downloaded)
else:
download_size = filenode.get_size()
assert download_size is not None, "download_size is None"
self.async.addCallback(lambda ignored: filenode.get_best_readable_version())
def _read(version):
if noisy: self.log("_read", level=NOISY)
download_size = version.get_size()
assert download_size is not None
self.consumer = OverwriteableFileConsumer(download_size, tempfile_maker)
def _read(ign):
if noisy: self.log("_read immutable", level=NOISY)
filenode.read(self.consumer, 0, None)
self.async.addCallback(_read)
version.read(self.consumer, 0, None)
self.async.addCallback(_read)
eventually(self.async.callback, None)
@ -822,9 +818,7 @@ class GeneralSFTPFile(PrefixingLogMixin):
assert parent and childname, (parent, childname, self.metadata)
d2.addCallback(lambda ign: parent.set_metadata_for(childname, self.metadata))
d2.addCallback(lambda ign: self.consumer.get_current_size())
d2.addCallback(lambda size: self.consumer.read(0, size))
d2.addCallback(lambda new_contents: self.filenode.overwrite(new_contents))
d2.addCallback(lambda ign: self.filenode.overwrite(MutableFileHandle(self.consumer.get_file())))
else:
def _add_file(ign):
self.log("_add_file childname=%r" % (childname,), level=OPERATIONAL)

View File

@ -29,6 +29,7 @@ from allmydata.mutable.common import NotWriteableError
from allmydata.util.consumer import download_to_data
from allmydata.immutable import upload
from allmydata.mutable import publish
from allmydata.test.no_network import GridTestMixin
from allmydata.test.common import ShouldFailMixin
from allmydata.test.common_util import ReallyEqualMixin
@ -76,7 +77,8 @@ class Handler(GridTestMixin, ShouldFailMixin, ReallyEqualMixin, unittest.TestCas
return d
def _set_up_tree(self):
d = self.client.create_mutable_file("mutable file contents")
u = publish.MutableData("mutable file contents")
d = self.client.create_mutable_file(u)
d.addCallback(lambda node: self.root.set_node(u"mutable", node))
def _created_mutable(n):
self.mutable = n