import os import argparse from photoapp.types import User from photoapp.common import pwhash from photoapp.dbutils import create_db_sessionmaker, get_db_engine from tabulate import tabulate def create_user(s, username, password): s.add(User(name=username, password=pwhash(password))) s.commit() def list_users(s): print(tabulate([[user.id, user.name] for user in s.query(User).order_by(User.name).all()], headers=["id", "username"])) def delete_user(s, username): u = s.query(User).filter(User.name == username).first() s.delete(u) s.commit() print("Deleted user {}".format(u.id)) def main(): parser = argparse.ArgumentParser(description="User manipulation tool") parser.add_argument('-s', '--database', help="sqlalchemy database connection uri", default=os.environ.get("DATABASE_URL")), p_mode = parser.add_subparsers(dest='action', help='action to take') p_create = p_mode.add_parser('create', help='create user') p_create.add_argument("-u", "--username", help="username", required=True) p_create.add_argument("-p", "--password", help="password", required=True) p_mode.add_parser('list', help='list users') p_delete = p_mode.add_parser('delete', help='delete users') p_delete.add_argument("-u", "--username", help="username", required=True) #TODO add mode to change password args = parser.parse_args() if not args.database: parser.error("--database or DATABASE_URL is required") session = create_db_sessionmaker(get_db_engine(args.database))() if args.action == "create": create_user(session, args.username, args.password) elif args.action == "list": list_users(session) elif args.action == "delete": delete_user(session, args.username) else: parser.print_help() if __name__ == '__main__': main()