mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-20 17:52:50 +00:00
webish: implement 'PUT /uri?t=mkdir' (to create anonymous dirnodes)
This commit is contained in:
parent
db3f11648c
commit
76be4a582c
@ -1015,6 +1015,11 @@ class IVirtualDrive(Interface):
|
||||
This returns a Deferred that will fire with an instance that provides
|
||||
either IDirectoryNode or IFileNode, as appropriate."""
|
||||
|
||||
def create_directory():
|
||||
"""Return a new IDirectoryNode that is empty and not linked by
|
||||
anything."""
|
||||
|
||||
|
||||
class NotCapableError(Exception):
|
||||
"""You have tried to write to a read-only node."""
|
||||
|
||||
|
@ -142,8 +142,9 @@ class MyVirtualDrive(service.Service):
|
||||
name = "vdrive"
|
||||
public_root = None
|
||||
private_root = None
|
||||
def __init__(self, nodes):
|
||||
def __init__(self, nodes, files):
|
||||
self._my_nodes = nodes
|
||||
self._my_files = files
|
||||
def have_public_root(self):
|
||||
return bool(self.public_root)
|
||||
def have_private_root(self):
|
||||
@ -158,6 +159,12 @@ class MyVirtualDrive(service.Service):
|
||||
return self._my_nodes[uri]
|
||||
return defer.maybeDeferred(_try)
|
||||
|
||||
def create_directory(self):
|
||||
# the dirnode adds itself to self.nodes
|
||||
dirnode = MyDirectoryNode(self._my_nodes, self._my_files, self.parent)
|
||||
return defer.succeed(dirnode)
|
||||
|
||||
|
||||
class WebMixin(object):
|
||||
def setUp(self):
|
||||
self.s = MyClient()
|
||||
@ -171,7 +178,7 @@ class WebMixin(object):
|
||||
self.nodes = {} # maps URI to node
|
||||
self.files = {} # maps file URI to contents
|
||||
|
||||
v = MyVirtualDrive(self.nodes)
|
||||
v = MyVirtualDrive(self.nodes, self.files)
|
||||
v.setServiceParent(self.s)
|
||||
|
||||
dl = MyDownloader(self.files)
|
||||
@ -1406,6 +1413,16 @@ class Web(WebMixin, unittest.TestCase):
|
||||
d.addCallback(_check2)
|
||||
return d
|
||||
|
||||
def test_PUT_NEWDIR_URI(self):
|
||||
d = self.PUT("/uri?t=mkdir", "")
|
||||
def _check(uri):
|
||||
self.failUnless(uri in self.nodes)
|
||||
self.failUnless(isinstance(self.nodes[uri], MyDirectoryNode))
|
||||
return self.GET("/uri/%s?t=json" % uri.replace("/","!"))
|
||||
d.addCallback(_check)
|
||||
d.addCallback(self.failUnlessIsEmptyJSON)
|
||||
return d
|
||||
|
||||
def test_XMLRPC(self):
|
||||
raise unittest.SkipTest("not yet")
|
||||
pass
|
||||
|
@ -60,6 +60,7 @@ class VirtualDrive(service.MultiService):
|
||||
% furl_file)
|
||||
return
|
||||
|
||||
self.global_vdrive_furl = global_vdrive_furl
|
||||
tub.connectTo(global_vdrive_furl,
|
||||
self._got_vdrive_server, global_vdrive_furl)
|
||||
|
||||
@ -157,3 +158,9 @@ class VirtualDrive(service.MultiService):
|
||||
return d
|
||||
|
||||
return root
|
||||
|
||||
def create_directory(self):
|
||||
# return a new+empty+unlinked dirnode
|
||||
assert self.global_vdrive_furl
|
||||
d = dirnode.create_directory(self.parent, self.global_vdrive_furl)
|
||||
return d
|
||||
|
Loading…
x
Reference in New Issue
Block a user