mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-06-23 01:08:53 +00:00
update many dirnode interfaces to accept dict-of-nodes instead of dict-of-caps
interfaces.py: define INodeMaker, document argument values, change create_new_mutable_directory() to take dict-of-nodes. Change dirnode.set_nodes() and dirnode.create_subdirectory() too. nodemaker.py: use INodeMaker, update create_new_mutable_directory() client.py: have create_dirnode() delegate initial_children= to nodemaker dirnode.py (Adder): take dict-of-nodes instead of list-of-nodes, which updates set_nodes() and create_subdirectory() web/common.py (convert_initial_children_json): create dict-of-nodes web/directory.py: same web/unlinked.py: same test_dirnode.py: update tests to match
This commit is contained in:
@ -16,7 +16,7 @@ from allmydata.check_results import DeepCheckResults, \
|
||||
DeepCheckAndRepairResults
|
||||
from allmydata.monitor import Monitor
|
||||
from allmydata.util import hashutil, mathutil, base32, log
|
||||
from allmydata.util.assertutil import _assert, precondition
|
||||
from allmydata.util.assertutil import precondition
|
||||
from allmydata.util.netstring import netstring, split_netstring
|
||||
from allmydata.uri import DirectoryURI, ReadonlyDirectoryURI, \
|
||||
LiteralFileURI, from_string
|
||||
@ -59,27 +59,22 @@ class Adder:
|
||||
def __init__(self, node, entries=None, overwrite=True):
|
||||
self.node = node
|
||||
if entries is None:
|
||||
entries = []
|
||||
entries = {}
|
||||
precondition(isinstance(entries, dict), entries)
|
||||
self.entries = entries
|
||||
self.overwrite = overwrite
|
||||
|
||||
def set_node(self, name, node, metadata):
|
||||
precondition(isinstance(name, unicode), name)
|
||||
precondition(IFilesystemNode.providedBy(node), node)
|
||||
self.entries.append( [name, node, metadata] )
|
||||
self.entries[name] = (node, metadata)
|
||||
|
||||
def modify(self, old_contents, servermap, first_time):
|
||||
children = self.node._unpack_contents(old_contents)
|
||||
now = time.time()
|
||||
for e in self.entries:
|
||||
if len(e) == 2:
|
||||
name, child = e
|
||||
new_metadata = None
|
||||
else:
|
||||
assert len(e) == 3
|
||||
name, child, new_metadata = e
|
||||
assert _assert(IFilesystemNode.providedBy(child), child)
|
||||
assert isinstance(name, unicode)
|
||||
for (name, (child, new_metadata)) in self.entries.iteritems():
|
||||
precondition(isinstance(name, unicode), name)
|
||||
precondition(IFilesystemNode.providedBy(child), child)
|
||||
if name in children:
|
||||
if not self.overwrite:
|
||||
raise ExistingChildError("child '%s' already exists" % name)
|
||||
@ -437,6 +432,7 @@ class DirectoryNode:
|
||||
return d
|
||||
|
||||
def set_nodes(self, entries, overwrite=True):
|
||||
precondition(isinstance(entries, dict), entries)
|
||||
if self.is_readonly():
|
||||
return defer.fail(NotMutableError())
|
||||
a = Adder(self, entries, overwrite=overwrite)
|
||||
@ -477,7 +473,7 @@ class DirectoryNode:
|
||||
return defer.fail(NotMutableError())
|
||||
d = self._nodemaker.create_new_mutable_directory(initial_children)
|
||||
def _created(child):
|
||||
entries = [(name, child, None)]
|
||||
entries = {name: (child, None)}
|
||||
a = Adder(self, entries, overwrite=overwrite)
|
||||
d = self._node.modify(a.modify)
|
||||
d.addCallback(lambda res: child)
|
||||
|
Reference in New Issue
Block a user