1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
"""
Name server control tool.
Pyro - Python Remote Objects. Copyright by Irmen de Jong (irmen@razorvine.net).
"""
from . import errors, core
def handle_command(namesrv, cmd, args):
def print_list_result(resultdict, title=""):
print("--------START LIST %s" % title)
for name, (uri, metadata) in sorted(resultdict.items()):
print("%s --> %s" % (name, uri))
if metadata:
print(" metadata:", metadata)
print("--------END LIST %s" % title)
def cmd_ping():
namesrv.ping()
print("Name server ping ok.")
def cmd_listprefix():
if len(args) == 0:
print_list_result(namesrv.list(return_metadata=True))
else:
print_list_result(namesrv.list(prefix=args[0], return_metadata=True), "- prefix '%s'" % args[0])
def cmd_listregex():
if len(args) != 1:
raise SystemExit("requires one argument: pattern")
print_list_result(namesrv.list(regex=args[0], return_metadata=True), "- regex '%s'" % args[0])
def cmd_lookup():
if len(args) != 1:
raise SystemExit("requires one argument: name")
uri, metadata = namesrv.lookup(args[0], return_metadata=True)
print(uri)
if metadata:
print("metadata:", metadata)
def cmd_register():
if len(args) != 2:
raise SystemExit("requires two arguments: name uri")
namesrv.register(args[0], args[1], safe=True)
print("Registered %s" % args[0])
def cmd_remove():
if len(args) != 1:
raise SystemExit("requires one argument: name")
count = namesrv.remove(args[0])
if count > 0:
print("Removed %s" % args[0])
else:
print("Nothing removed")
def cmd_removeregex():
if len(args) != 1:
raise SystemExit("requires one argument: pattern")
sure = input("Potentially removing lots of items from the Name server. Are you sure (y/n)?").strip()
if sure in ('y', 'Y'):
count = namesrv.remove(regex=args[0])
print("%d items removed." % count)
def cmd_setmeta():
if len(args) < 1:
raise SystemExit("requires arguments: uri and zero or more meta tags")
metadata = set(args[1:])
namesrv.set_metadata(args[0], metadata)
if metadata:
print("Metadata updated")
else:
print("Metadata cleared")
def cmd_yplookup_all():
if len(args) < 1:
raise SystemExit("requires at least one metadata tag argument")
print_list_result(namesrv.yplookup(meta_all=args, return_metadata=True), " - searched by metadata")
def cmd_yplookup_any():
if len(args) < 1:
raise SystemExit("requires at least one metadata tag argument")
print_list_result(namesrv.yplookup(meta_any=args, return_metadata=True), " - searched by metadata")
commands = {
"ping": cmd_ping,
"list": cmd_listprefix,
"listmatching": cmd_listregex,
"yplookup_all": cmd_yplookup_all,
"yplookup_any": cmd_yplookup_any,
"lookup": cmd_lookup,
"register": cmd_register,
"remove": cmd_remove,
"removematching": cmd_removeregex,
"setmeta": cmd_setmeta
}
try:
commands[cmd]()
except Exception as x:
print("Error: %s - %s" % (type(x).__name__, x))
raise
def main(args=None):
from argparse import ArgumentParser
parser = ArgumentParser(description="Pyro name server control utility.")
parser.add_argument("-n", "--host", dest="host", help="hostname of the NS", default="")
parser.add_argument("-p", "--port", dest="port", type=int, help="port of the NS (or bc-port if host isn't specified)")
parser.add_argument("-u", "--unixsocket", help="Unix domain socket name of the NS")
parser.add_argument("-v", "--verbose", action="store_true", dest="verbose", help="verbose output")
parser.add_argument("command", choices=("list", "lookup", "register", "remove", "removematching", "listmatching",
"yplookup_all", "yplookup_any", "setmeta", "ping"))
options, unknown_args = parser.parse_known_args(args)
if options.verbose:
print("Locating name server...")
if options.unixsocket:
options.host = "./u:" + options.unixsocket
try:
namesrv = core.locate_ns(options.host, options.port)
except errors.PyroError as x:
print("Error:", x)
return
if options.verbose:
print("Name server found:", namesrv._pyroUri)
handle_command(namesrv, options.command, unknown_args)
if options.verbose:
print("Done.")
if __name__ == "__main__":
main()
|