[
{
"argv": [
"create",
"--source",
"/data"
],
"outcome": "success",
"expected_namespace": {
"command": "create",
"source": "/data",
"compress": false
}
},
{
"argv": [
"create",
"--source",
"/data",
"--compress"
],
"outcome": "success",
"expected_namespace": {
"command": "create",
"source": "/data",
"compress": true
}
},
{
"argv": [
"restore",
"--archive",
"a.tar"
],
"outcome": "success",
"expected_namespace": {
"command": "restore",
"archive": "a.tar",
"target": null
}
},
{
"argv": [
"restore",
"--archive",
"a.tar",
"--target",
"/restore"
],
"outcome": "success",
"expected_namespace": {
"command": "restore",
"archive": "a.tar",
"target": "/restore"
}
},
{
"argv": [],
"outcome": "failure",
"expected_exit_code": 2,
"expected_error_substring": "required"
},
{
"argv": [
"create"
],
"outcome": "failure",
"expected_exit_code": 2,
"expected_error_substring": "required"
},
{
"argv": [
"bogus"
],
"outcome": "failure",
"expected_exit_code": 2,
"expected_error_substring": "invalid choice"
}
]import argparse
def build_parser():
p = argparse.ArgumentParser(prog="backupctl")
sub = p.add_subparsers(dest="command", required=True)
create_p = sub.add_parser("create")
create_p.add_argument("--source", required=True)
create_p.add_argument("--compress", action="store_true", default=False)
restore_p = sub.add_parser("restore")
restore_p.add_argument("--archive", required=True)
restore_p.add_argument("--target", default=None)
return pA backup CLI tool "backupctl" with subcommands `create` and `restore` (use add_subparsers(dest="command", required=True)). The `create` subcommand takes --source (required string) and --compress (store_true flag, default False). The `restore` subcommand takes --archive (required string) and --target (optional string, default None).