diff --git a/projects/proquint/BUILD b/projects/proquint/BUILD index 6df8403..05257fc 100644 --- a/projects/proquint/BUILD +++ b/projects/proquint/BUILD @@ -4,3 +4,14 @@ py_project( py_requirement("hypothesis"), ], ) + +zapp_binary( + name = "qint", + main = "src/python/proquint/__main__.py", + imports = [ + "src/python", + ], + deps = [ + ":proquint", + ], +) diff --git a/projects/proquint/src/python/proquint.py b/projects/proquint/src/python/proquint/__init__.py similarity index 100% rename from projects/proquint/src/python/proquint.py rename to projects/proquint/src/python/proquint/__init__.py diff --git a/projects/proquint/src/python/proquint/__main__.py b/projects/proquint/src/python/proquint/__main__.py new file mode 100644 index 0000000..1599502 --- /dev/null +++ b/projects/proquint/src/python/proquint/__main__.py @@ -0,0 +1,33 @@ +"""A CLI program for interacting with proquints.""" + +import argparse +from secrets import randbits +import uuid + +from proquint import Proquint + + +parser = argparse.ArgumentParser() +g = parser.add_mutually_exclusive_group() +g.add_argument("-g", "--generate", dest="generate", default=False, action="store_true") +g.add_argument("-p", "--predictable", dest="predictable", default=False, action="store_true") +g.add_argument("-d", "--decode", dest="decode", default=False, action="store_true") +g.add_argument("-e", "--encode", dest="encode", default=False, action="store_true") +parser.add_argument("-w", "--width", dest="width", type=int, default=32) + + +def main(): + opts, args = parser.parse_known_args() + + if opts.generate: + print(Proquint.encode(randbits(opts.width), opts.width)) + elif opts.predictable: + print(Proquint.encode(uuid.getnode(), 32)) + elif opts.encode: + print(Proquint.encode(int(args[0]), opts.width)) + elif opts.decode: + print(Proquint.decode(args[0])) + + +if __name__ == "__main__": + main()