]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/scripts/tahoe_rm.py
command-line: add "rm", and tidy-up variable names, and make it so "allmydata-tahoe...
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / scripts / tahoe_rm.py
1 #!/usr/bin/env python
2
3 import re, socket, sys
4
5 NODEURL_RE=re.compile("http://([^:]*)(:([1-9][0-9]*))?")
6
7 def rm(nodeurl, vdrive, vdrive_pathname, verbosity):
8     """
9     @param verbosity: 0, 1, or 2, meaning quiet, verbose, or very verbose
10
11     @return: a Deferred which eventually fires with the exit code
12     """
13     mo = NODEURL_RE.match(nodeurl)
14     host = mo.group(1)
15     port = int(mo.group(3))
16
17     url = "/vdrive/" + vdrive + "/"
18     if vdrive_pathname:
19         url += vdrive_pathname
20
21     so = socket.socket()
22     so.connect((host, port,))
23
24     CHUNKSIZE=2**16
25     data = "DELETE %s HTTP/1.1\r\nConnection: close\r\nHostname: %s\r\n\r\n" % (url, host,)
26     sent = so.send(data)
27
28     respbuf = []
29     data = so.recv(CHUNKSIZE)
30     while data:
31         respbuf.append(data)
32         data = so.recv(CHUNKSIZE)
33
34     so.shutdown(socket.SHUT_WR)
35
36     data = so.recv(CHUNKSIZE)
37     while data:
38         respbuf.append(data)
39         data = so.recv(CHUNKSIZE)
40
41     respstr = ''.join(respbuf)
42
43     headerend = respstr.find('\r\n\r\n')
44     if headerend == -1:
45         headerend = len(respstr)
46     header = respstr[:headerend]
47     RESP_RE=re.compile("^HTTP/[0-9]\.[0-9] ([0-9]*) *([A-Za-z_ ]*)")  # This regex is soooo ad hoc...  --Zooko 2007-08-16
48     mo = RESP_RE.match(header)
49     if mo:
50         code = int(mo.group(1))
51         word = mo.group(2)
52
53         if code == 200:
54             print "%s %s" % (code, word,)
55             return 0
56     
57     print respstr[headerend:]
58     return 1
59
60 def main():
61     import optparse, re
62     parser = optparse.OptionParser()
63     parser.add_option("-d", "--vdrive", dest="vdrive", default="global")
64     parser.add_option("-u", "--node-url", dest="nodeurl")
65
66     (options, args) = parser.parse_args()
67
68     NODEURL_RE=re.compile("http://([^:]*)(:([1-9][0-9]*))?")
69     if not isinstance(options.nodeurl, basestring) or not NODEURL_RE.match(options.nodeurl):
70         raise ValueError("--node-url is required to be a string and look like \"http://HOSTNAMEORADDR:PORT\", not: %r" % (options.nodeurl,))
71     
72     vdrive_pathname = args[0]
73
74     return put(options.nodeurl, options.vdrive, vdrive_pathname, local_file)
75
76 if __name__ == '__main__':
77     main()