]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/scripts/tahoe_add_alias.py
fix flakes
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / scripts / tahoe_add_alias.py
1
2 import os.path
3 import codecs
4 from allmydata import uri
5 from allmydata.scripts.common_http import do_http, check_http_error
6 from allmydata.scripts.common import get_aliases
7 from allmydata.util.fileutil import move_into_place
8 from allmydata.util.stringutils import unicode_to_stdout
9
10
11 def add_line_to_aliasfile(aliasfile, alias, cap):
12     # we use os.path.exists, rather than catching EnvironmentError, to avoid
13     # clobbering the valuable alias file in case of spurious or transient
14     # filesystem errors.
15     if os.path.exists(aliasfile):
16         f = codecs.open(aliasfile, "r", "utf-8")
17         aliases = f.read()
18         f.close()
19         if not aliases.endswith("\n"):
20             aliases += "\n"
21     else:
22         aliases = ""
23     aliases += "%s: %s\n" % (alias, cap)
24     f = codecs.open(aliasfile+".tmp", "w", "utf-8")
25     f.write(aliases)
26     f.close()
27     move_into_place(aliasfile+".tmp", aliasfile)
28
29 def add_alias(options):
30     nodedir = options['node-directory']
31     alias = options.alias
32     cap = options.cap
33     stdout = options.stdout
34     stderr = options.stderr
35     assert ":" not in alias
36     assert " " not in alias
37
38     old_aliases = get_aliases(nodedir)
39     if alias in old_aliases:
40         print >>stderr, "Alias '%s' already exists!" % alias
41         return 1
42     aliasfile = os.path.join(nodedir, "private", "aliases")
43     cap = uri.from_string_dirnode(cap).to_string()
44
45     add_line_to_aliasfile(aliasfile, alias, cap)
46
47     print >>stdout, "Alias '%s' added" % (unicode_to_stdout(alias),)
48     return 0
49
50 def create_alias(options):
51     # mkdir+add_alias
52     nodedir = options['node-directory']
53     alias = options.alias
54     stdout = options.stdout
55     stderr = options.stderr
56     assert ":" not in alias
57     assert " " not in alias
58
59     old_aliases = get_aliases(nodedir)
60     if alias in old_aliases:
61         print >>stderr, "Alias '%s' already exists!" % alias
62         return 1
63
64     aliasfile = os.path.join(nodedir, "private", "aliases")
65
66     nodeurl = options['node-url']
67     if not nodeurl.endswith("/"):
68         nodeurl += "/"
69     url = nodeurl + "uri?t=mkdir"
70     resp = do_http("POST", url)
71     rc = check_http_error(resp, stderr)
72     if rc:
73         return rc
74     new_uri = resp.read().strip()
75
76     # probably check for others..
77
78     add_line_to_aliasfile(aliasfile, alias, new_uri)
79
80     print >>stdout, "Alias '%s' created" % (unicode_to_stdout(alias),)
81     return 0
82
83 def list_aliases(options):
84     nodedir = options['node-directory']
85     stdout = options.stdout
86     aliases = get_aliases(nodedir)
87     alias_names = sorted(aliases.keys())
88     max_width = max([len(name) for name in alias_names] + [0])
89     fmt = "%" + str(max_width) + "s: %s"
90     for name in alias_names:
91         print >>stdout, fmt % (name, aliases[name])
92