Source code for flux_restful.cli
"""
The flux-restful command.
flux-restful serve start the server (run it under `flux start`, or
with FLUX_URI pointing at an instance)
flux-restful init create the database tables and the superuser
flux-restful add-user add a user
flux-restful list-users list users
"""
import argparse
import sys
from flux_restful.version import __version__
[docs]def serve(args) -> None:
import uvicorn
uvicorn.run(
"flux_restful.main:app",
host=args.host,
port=args.port,
workers=args.workers,
log_level=args.log_level,
)
[docs]def get_parser():
parser = argparse.ArgumentParser(
prog="flux-restful",
description="The Flux RESTful API server",
)
parser.add_argument(
"--version", action="version", version=f"flux-restful {__version__}"
)
sub = parser.add_subparsers(dest="command", title="commands")
run = sub.add_parser("serve", help="start the server (under flux start)")
run.add_argument("--host", default="0.0.0.0", help="bind address (0.0.0.0)")
run.add_argument("--port", type=int, default=5000, help="port (5000)")
run.add_argument(
"--workers",
type=int,
default=1,
help="uvicorn workers (1); all share FLUX_TOKEN_SIGNING_KEY",
)
run.add_argument("--log-level", default="info", help="uvicorn log level (info)")
sub.add_parser("init", help="create the database tables and the superuser")
add = sub.add_parser("add-user", help="add a user to the database")
add.add_argument("username")
add.add_argument("password")
add.add_argument(
"--superuser", action="store_true", help="make the user a superuser"
)
sub.add_parser("list-users", help="list users in the database")
return parser
[docs]def main(argv=None) -> None:
parser = get_parser()
args = parser.parse_args(argv)
if args.command == "serve":
serve(args)
elif args.command in ("init", "add-user", "list-users"):
# Imported here: it connects to the database on import
from flux_restful.db import init_db
if args.command == "init":
init_db.init_db()
elif args.command == "add-user":
init_db.add_user(args.username, args.password, superuser=args.superuser)
else:
init_db.list_users()
else:
parser.print_help()
sys.exit(2)
if __name__ == "__main__":
main()