aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/cli/parser.py
blob: c1f15be8a127eab2109fd92f017f69b5d76fc8a1 (plain) (blame)
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
"""The argument parser: every verb, flag and help line `meshbay-node --help`
prints."""

import argparse
from pathlib import Path


def build_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(description="MeshBay Node daemon")
    parser.add_argument("command", nargs="?",
                        choices=["init", "reset", "status", "gek-init",
                                 "gek", "operator", "member", "group", "root",
                                 "file", "video", "chat", "denylist", "stun",
                                 "transfers",
                                 "reload",
                                 "restart-daemon", "autostart", "service",
                                 "calibrate-argon2"],
                        help="init: provision config + keystore | reset: erase all "
                             "node state | status: node state and keys "
                             "| operator pair: pair a "
                             "browser with this node | member list|invite|cancel|revoke|unpin "
                             "| group list|add|remove "
                             "| root list|add|remove|set|eject|plug "
                             "| gek init|rotate | file list|rm "
                             "| video rematch: re-resolve TMDB matches for a group's "
                             "videos "
                             "| chat status|rotate|encrypt-history|prune "
                             "| denylist show|clear "
                             "| stun list|add|remove|reset "
                             "| transfers show|set|max-size|per-member: live "
                             "transfer slots, the node-wide caps, the largest "
                             "single upload, and how many one member may run "
                             "at once in a group "
                             "| reload: re-read node.toml (hot; systemd or the "
                             "loopback API) | restart-daemon: restart the node "
                             "(systemd unit, the Windows autostart launcher, or the "
                             "service task, whichever applies) "
                             "| autostart install|remove|start|stop|status "
                             "(Windows: run meshbay-node at each sign-in, no admin) "
                             "| service install|remove|start|stop|status "
                             "(Windows: run at boot, before sign-in, needs admin "
                             "once to install) "
                             "| calibrate-argon2: benchmark")
    parser.add_argument("subcommand", nargs="?",
                        help="'pair' for operator; list|invite|revoke|unpin for "
                             "member; list|add|remove for group; "
                             "list|add|remove|set|eject|plug for root; "
                             "init|rotate for gek; "
                             "list|rm for file; rematch for video; show|clear for "
                             "denylist; list|add|remove|reset for stun; "
                             "show|set|max-size|per-member for transfers; "
                             "install|remove|start|stop|status for autostart and "
                             "for service")
    parser.add_argument("target", nargs="?",
                        help="username for member invite|revoke|unpin (an e-mail address with "
                             "--link, a link id for member cancel); group name "
                             "for group add; file id for file rm; identifier for "
                             "denylist clear; download cap for transfers set; "
                             "size in GB for transfers max-size")
    parser.add_argument("value", nargs="?",
                        help="the second value where a verb takes two: the "
                             "upload cap for transfers set")
    parser.add_argument("--hub-url", default=None,
                        help="hub URL, for init (e.g. https://meshbay.org)")
    parser.add_argument("--username", default=None,
                        help="hub username, for init")
    parser.add_argument("--dir", default=None,
                        help="shared directory, for group add")
    parser.add_argument("--yes", action="store_true",
                        help="skip the confirmation for destructive commands")
    parser.add_argument("--config", type=Path, default=None,
                        help="Config file path")
    parser.add_argument("--group", default=None,
                        help="group id (optional if only one is configured)")
    parser.add_argument("--link", action="store_true",
                        help="member invite: an invitation link for this e-mail "
                             "address, for someone who may have no account yet")
    parser.add_argument("--writable", action="store_true", default=None,
                        dest="writable",
                        help="root accepts member uploads (root add/set)")
    parser.add_argument("--no-writable", action="store_false",
                        dest="writable",
                        help="root is read-only (root add/set, group add)")
    parser.add_argument("--removable", action="store_true", default=None,
                        dest="removable",
                        help="mark root as removable (root set/add)")
    parser.add_argument("--no-removable", action="store_false",
                        dest="removable",
                        help="mark root as not removable (root set)")
    parser.add_argument("--name", default=None,
                        help="root name (root add; defaults to directory basename)")
    parser.add_argument("--log-level", default="INFO",
                        choices=["DEBUG", "INFO", "WARNING", "ERROR"])
    return parser