Skip to content

Commit dad6682

Browse files
committed
remote/client: separate ArgumentParser() definition
This is an idiomatic way of setting up argument parsers and allows the parser to be used for documentation generation. Signed-off-by: Jonas Rebmann <[email protected]>
1 parent e380181 commit dad6682

File tree

1 file changed

+46
-26
lines changed

1 file changed

+46
-26
lines changed

labgrid/remote/client.py

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1704,24 +1704,7 @@ class ExportFormat(enum.Enum):
17041704
def __str__(self):
17051705
return self.value
17061706

1707-
1708-
def main():
1709-
basicConfig(
1710-
level=logging.WARNING,
1711-
stream=sys.stderr,
1712-
)
1713-
1714-
StepLogger.start()
1715-
processwrapper.enable_logging()
1716-
1717-
# Support both legacy variables and properly namespaced ones
1718-
place = os.environ.get("PLACE", None)
1719-
place = os.environ.get("LG_PLACE", place)
1720-
state = os.environ.get("STATE", None)
1721-
state = os.environ.get("LG_STATE", state)
1722-
initial_state = os.environ.get("LG_INITIAL_STATE", None)
1723-
token = os.environ.get("LG_TOKEN", None)
1724-
1707+
def get_parser() -> argparse.ArgumentParser:
17251708
parser = argparse.ArgumentParser()
17261709
parser.add_argument(
17271710
"-x",
@@ -1734,24 +1717,19 @@ def main():
17341717
"-c",
17351718
"--config",
17361719
type=str,
1737-
default=os.environ.get("LG_ENV"),
17381720
help="env config file (default: value from env variable LG_ENV)",
17391721
)
1740-
parser.add_argument(
1741-
"-p", "--place", type=str, default=place, help="place name/alias (default: value from env variable LG_PLACE)"
1742-
)
1722+
parser.add_argument("-p", "--place", type=str, help="place name/alias (default: value from env variable LG_PLACE)")
17431723
parser.add_argument(
17441724
"-s",
17451725
"--state",
17461726
type=str,
1747-
default=state,
17481727
help="strategy state to switch into before command (default: value from env varibale LG_STATE)",
17491728
)
17501729
parser.add_argument(
17511730
"-i",
17521731
"--initial-state",
17531732
type=str,
1754-
default=initial_state,
17551733
help="strategy state to force into before switching to desired state",
17561734
)
17571735
parser.add_argument(
@@ -2065,11 +2043,11 @@ def main():
20652043
subparser.set_defaults(func=ClientSession.create_reservation)
20662044

20672045
subparser = subparsers.add_parser("cancel-reservation", help="cancel a reservation")
2068-
subparser.add_argument("token", type=str, default=token, nargs="?" if token else None)
2046+
subparser.add_argument("token", type=str, nargs="?")
20692047
subparser.set_defaults(func=ClientSession.cancel_reservation)
20702048

20712049
subparser = subparsers.add_parser("wait", help="wait for a reservation to be allocated")
2072-
subparser.add_argument("token", type=str, default=token, nargs="?" if token else None)
2050+
subparser.add_argument("token", type=str, nargs="?")
20732051
subparser.set_defaults(func=ClientSession.wait_reservation)
20742052

20752053
subparser = subparsers.add_parser("reservations", help="list current reservations")
@@ -2092,13 +2070,55 @@ def main():
20922070
subparser = subparsers.add_parser("version", help="show version")
20932071
subparser.set_defaults(func=ClientSession.print_version)
20942072

2073+
return parser
2074+
2075+
2076+
def main():
2077+
basicConfig(
2078+
level=logging.WARNING,
2079+
stream=sys.stderr,
2080+
)
2081+
2082+
StepLogger.start()
2083+
processwrapper.enable_logging()
2084+
2085+
# Support both legacy variables and properly namespaced ones
2086+
place = os.environ.get("PLACE", None)
2087+
place = os.environ.get("LG_PLACE", place)
2088+
state = os.environ.get("STATE", None)
2089+
state = os.environ.get("LG_STATE", state)
2090+
initial_state = os.environ.get("LG_INITIAL_STATE", None)
2091+
token = os.environ.get("LG_TOKEN", None)
2092+
2093+
parser = get_parser()
2094+
20952095
# make any leftover arguments available for some commands
20962096
args, leftover = parser.parse_known_args()
20972097
if args.command not in ["ssh", "rsync", "forward"]:
20982098
args = parser.parse_args()
20992099
else:
21002100
args.leftover = leftover
21012101

2102+
# handle dynamic defaults
2103+
if args.config is None:
2104+
args.config = os.environ.get("LG_ENV")
2105+
2106+
if args.place is None:
2107+
args.place = place
2108+
2109+
if args.state is None:
2110+
args.state = state
2111+
2112+
if args.initial_state is None:
2113+
args.initial_state = initial_state
2114+
2115+
if args.command in ["cancel-reservation", "wait"] and args.token is None:
2116+
if token:
2117+
args.token = token
2118+
else:
2119+
print("Please provide a token", file=sys.stderr)
2120+
exit(1)
2121+
21022122
if args.verbose:
21032123
logging.getLogger().setLevel(logging.INFO)
21042124
if args.verbose > 1:

0 commit comments

Comments
 (0)