# retoor import argparse import sys from molodetz.cli import commands def build_parser(): parser = argparse.ArgumentParser(prog="molodetz", description="Beheer-CLI voor Molodetz.") groups = parser.add_subparsers(dest="group", required=True) role = groups.add_parser("role", help="Rollen lezen en zetten").add_subparsers(dest="action", required=True) role_get = role.add_parser("get") role_get.add_argument("username") role_get.set_defaults(handler=commands.role_get) role_set = role.add_parser("set") role_set.add_argument("username") role_set.add_argument("role", choices=["Member", "Admin"]) role_set.set_defaults(handler=commands.role_set) apikey = groups.add_parser("apikey", help="API-sleutels").add_subparsers(dest="action", required=True) key_get = apikey.add_parser("get") key_get.add_argument("username") key_get.set_defaults(handler=commands.apikey_get) key_reset = apikey.add_parser("reset") key_reset.add_argument("username") key_reset.set_defaults(handler=commands.apikey_reset) apikey.add_parser("backfill").set_defaults(handler=commands.apikey_backfill) posts = groups.add_parser("posts", help="Berichten").add_subparsers(dest="action", required=True) posts.add_parser("list").set_defaults(handler=commands.posts_list) posts_import = posts.add_parser("import", help="Importeer .md of .pdf als concept") posts_import.add_argument("path") posts_import.add_argument("--topic", default="rol", choices=["rol", "standaard"]) posts_import.add_argument("--title") posts_import.add_argument("--publish", action="store_true") posts_import.set_defaults(handler=commands.posts_import) joins = groups.add_parser("joins", help="Aanmeldingen").add_subparsers(dest="action", required=True) joins.add_parser("list").set_defaults(handler=commands.joins_list) backups = groups.add_parser("backups", help="Back-ups").add_subparsers(dest="action", required=True) backups.add_parser("list").set_defaults(handler=commands.backups_list) backup_run = backups.add_parser("run") backup_run.add_argument("--target", default="database", choices=["database", "uploads", "keys", "full"]) backup_run.add_argument("--codec", default="zstd", choices=["zstd", "brotli"]) backup_run.set_defaults(handler=commands.backups_run) backup_prune = backups.add_parser("prune") backup_prune.add_argument("--keep", type=int, default=14) backup_prune.add_argument("--dry-run", action="store_true") backup_prune.set_defaults(handler=commands.backups_prune) backup_clear = backups.add_parser("clear") backup_clear.add_argument("--dry-run", action="store_true") backup_clear.set_defaults(handler=commands.backups_clear) sessions = groups.add_parser("sessions", help="Sessies").add_subparsers(dest="action", required=True) sessions_prune = sessions.add_parser("prune") sessions_prune.add_argument("--dry-run", action="store_true") sessions_prune.set_defaults(handler=commands.sessions_prune) audit = groups.add_parser("audit", help="Auditlog").add_subparsers(dest="action", required=True) audit_prune = audit.add_parser("prune") audit_prune.add_argument("--days", type=int, default=365) audit_prune.add_argument("--dry-run", action="store_true") audit_prune.set_defaults(handler=commands.audit_prune) system = groups.add_parser("system", help="Systeemonderhoud").add_subparsers(dest="action", required=True) system_prune = system.add_parser("prune", help="Verwijder wees-blobs") system_prune.add_argument("--dry-run", action="store_true") system_prune.set_defaults(handler=commands.system_prune) system.add_parser("sql-lint", help="Parse alle SQL-literals met sqlglot").set_defaults(handler=commands.system_sql_lint) emoji = groups.add_parser("emoji", help="Emoji-kaart").add_subparsers(dest="action", required=True) emoji.add_parser("regenerate").set_defaults(handler=commands.emoji_regenerate) return parser def main(argv=None): parser = build_parser() args = parser.parse_args(argv) commands.prepare() return args.handler(args) or 0 if __name__ == "__main__": sys.exit(main())