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
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
15 if os.path.exists(aliasfile):
16 f = codecs.open(aliasfile, "r", "utf-8")
19 if not aliases.endswith("\n"):
23 aliases += "%s: %s\n" % (alias, cap)
24 f = codecs.open(aliasfile+".tmp", "w", "utf-8")
27 move_into_place(aliasfile+".tmp", aliasfile)
29 def add_alias(options):
30 nodedir = options['node-directory']
33 stdout = options.stdout
34 stderr = options.stderr
35 assert ":" not in alias
36 assert " " not in alias
38 old_aliases = get_aliases(nodedir)
39 if alias in old_aliases:
40 print >>stderr, "Alias '%s' already exists!" % alias
42 aliasfile = os.path.join(nodedir, "private", "aliases")
43 cap = uri.from_string_dirnode(cap).to_string()
45 add_line_to_aliasfile(aliasfile, alias, cap)
47 print >>stdout, "Alias '%s' added" % (unicode_to_stdout(alias),)
50 def create_alias(options):
52 nodedir = options['node-directory']
54 stdout = options.stdout
55 stderr = options.stderr
56 assert ":" not in alias
57 assert " " not in alias
59 old_aliases = get_aliases(nodedir)
60 if alias in old_aliases:
61 print >>stderr, "Alias '%s' already exists!" % alias
64 aliasfile = os.path.join(nodedir, "private", "aliases")
66 nodeurl = options['node-url']
67 if not nodeurl.endswith("/"):
69 url = nodeurl + "uri?t=mkdir"
70 resp = do_http("POST", url)
71 rc = check_http_error(resp, stderr)
74 new_uri = resp.read().strip()
76 # probably check for others..
78 add_line_to_aliasfile(aliasfile, alias, new_uri)
80 print >>stdout, "Alias '%s' created" % (unicode_to_stdout(alias),)
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])