webish: implement delete (for files only, not directories)

This commit is contained in:
Brian Warner 2006-12-04 19:27:38 -07:00
parent c8e0024c41
commit 6f21b4248a
4 changed files with 42 additions and 2 deletions

View File

@ -90,6 +90,7 @@ class MutableDirectoryNode(Referenceable):
os.unlink(absname)
else:
raise BadFileError("Cannot delete non-existent file '%s'" % name)
remote_remove = remove
class GlobalVirtualDrive(service.MultiService):

View File

@ -106,8 +106,23 @@ class VDrive(service.MultiService):
d.addCallback(lambda parent: parent.callRemote("add_directory", name))
return d
def remove(self, something): # TODO
pass
def remove(self, parent, name):
assert not isinstance(parent, str)
log.msg("vdrive removing %s" % name)
# first find the verifierid
d = self.get_verifierid_from_parent(parent, name)
def _got_verifierid(vid):
# TODO: delete the file's shares using this
pass
d.addCallback(_got_verifierid)
def _delete_from_parent(res):
return parent.callRemote("remove", name)
d.addCallback(_delete_from_parent)
def _done(res):
log.msg("vdrive done removing %s" % name)
d.addCallback(_done)
return d
def get_file(self, dir_and_name_or_path, download_target):
"""Retrieve a file from the virtual drive and put it somewhere.

View File

@ -17,11 +17,13 @@
<td>Filename</td>
<td>Type</td>
<td>fileid</td>
<td></td>
</tr>
<tr n:pattern="item" n:render="row">
<td><n:slot name="filename"/></td>
<td><n:slot name="type"/></td>
<td><n:slot name="fileid"/></td>
<td><n:slot name="delete"/></td>
</tr>
<tr n:pattern="empty"><td>directory is empty!</td></tr>

View File

@ -86,11 +86,23 @@ class Directory(rend.Page):
ctx.fillSlots("filename", T.a(href=dlurl)[name])
ctx.fillSlots("type", "FILE")
ctx.fillSlots("fileid", idlib.b2a(target))
# this creates a button which will cause our child__delete method
# to be invoked, which deletes the file and then redirects the
# browser back to this directory
del_url = url.here.child("_delete")
#del_url = del_url.add("verifierid", idlib.b2a(target))
del_url = del_url.add("name", name)
delete = T.form(action=del_url, method="post")[
T.input(type='submit', value='del', name="del"),
]
ctx.fillSlots("delete", delete)
else:
# directory
ctx.fillSlots("filename", T.a(href=name)[name])
ctx.fillSlots("type", "DIR")
ctx.fillSlots("fileid", "-")
ctx.fillSlots("delete", "-")
return ctx.tag
child_webform_css = webform.defaultCSS
@ -153,6 +165,16 @@ class Directory(rend.Page):
d.addCallback(_done)
return d
def child__delete(self, ctx):
# perform the delete, then redirect back to the directory page
args = inevow.IRequest(ctx).args
vdrive = self._client.getServiceNamed("vdrive")
d = vdrive.remove(self._dirnode, args["name"][0])
def _deleted(res):
return url.here.up()
d.addCallback(_deleted)
return d
class WebDownloadTarget:
implements(IDownloadTarget)
def __init__(self, req):