Add t=mkdir-immutable to the webapi. Closes #607.

* change t=mkdir-with-children to not use multipart/form encoding. Instead,
  the request body is all JSON. t=mkdir-immutable uses this format too.
* make nodemaker.create_immutable_dirnode() get convergence from SecretHolder,
  but let callers override it
* raise NotDeepImmutableError instead of using assert()
* add mutable= argument to DirectoryNode.create_subdirectory(), default True
This commit is contained in:
Brian Warner
2009-11-17 23:09:00 -08:00
parent d2426ea3bd
commit f85690697a
13 changed files with 296 additions and 65 deletions

View File

@ -188,6 +188,8 @@ class DirectoryNode:
filenode_class = MutableFileNode
def __init__(self, filenode, nodemaker, uploader):
assert IFileNode.providedBy(filenode), filenode
assert not IDirectoryNode.providedBy(filenode), filenode
self._node = filenode
filenode_cap = filenode.get_cap()
self._uri = wrap_dirnode_cap(filenode_cap)
@ -491,11 +493,15 @@ class DirectoryNode:
d.addCallback(lambda res: deleter.old_child)
return d
def create_subdirectory(self, name, initial_children={}, overwrite=True):
def create_subdirectory(self, name, initial_children={}, overwrite=True,
mutable=True):
assert isinstance(name, unicode)
if self.is_readonly():
return defer.fail(NotMutableError())
d = self._nodemaker.create_new_mutable_directory(initial_children)
if mutable:
d = self._nodemaker.create_new_mutable_directory(initial_children)
else:
d = self._nodemaker.create_immutable_directory(initial_children)
def _created(child):
entries = {name: (child, None)}
a = Adder(self, entries, overwrite=overwrite)