Skip to content

Commit e53ef6d

Browse files
committed
Consolidating argument processing into standardized function
1 parent 23fa073 commit e53ef6d

File tree

4 files changed

+50
-75
lines changed

4 files changed

+50
-75
lines changed

netmiko/cli_tools/argument_handling.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import argparse
2+
from getpass import getpass
3+
from netmiko.utilities import load_devices, display_inventory
24

35

46
def common_args(parser):
@@ -96,3 +98,22 @@ def parse_arguments(args, command):
9698
parser.error("Grep pattern not specified.")
9799

98100
return cli_args
101+
102+
103+
def extract_cli_vars(cli_args, command, __version__):
104+
105+
return_vars = {}
106+
return_vars["cli_username"] = cli_args.username if cli_args.username else None
107+
return_vars["cli_password"] = getpass() if cli_args.password else None
108+
return_vars["cli_secret"] = getpass("Enable secret: ") if cli_args.secret else None
109+
version = cli_args.version
110+
if version:
111+
print(f"{command} v{__version__}")
112+
return 0
113+
list_devices = cli_args.list_devices
114+
if list_devices:
115+
my_devices = load_devices()
116+
display_inventory(my_devices)
117+
return 0
118+
119+
return return_vars

netmiko/cli_tools/netmiko_cfg.py

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22
"""Return output from single show cmd using Netmiko."""
33
import sys
44
from datetime import datetime
5-
from getpass import getpass
65
from concurrent.futures import ThreadPoolExecutor, as_completed
76

8-
from netmiko.utilities import load_devices, display_inventory
97
from netmiko.cli_tools import ERROR_PATTERN, MAX_WORKERS, __version__
108
from netmiko.cli_tools.helpers import obtain_devices, update_device_params, ssh_conn
119
from netmiko.cli_tools.outputters import output_dispatcher, output_failed_devices
12-
from netmiko.cli_tools.argument_handling import parse_arguments
10+
from netmiko.cli_tools.argument_handling import parse_arguments, extract_cli_vars
1311

1412

1513
COMMAND = "netmiko-cfg"
@@ -21,24 +19,14 @@ def main_ep():
2119

2220
def main(args):
2321
start_time = datetime.now()
22+
23+
# CLI ARGS #####
2424
cli_args = parse_arguments(args, COMMAND)
25+
cli_vars = extract_cli_vars(cli_args, command=COMMAND, __version__=__version__)
26+
device_or_group = cli_args.devices.strip()
27+
hide_failed = cli_args.hide_failed
2528

26-
cli_username = cli_args.username if cli_args.username else None
27-
cli_password = getpass() if cli_args.password else None
28-
cli_secret = getpass("Enable secret: ") if cli_args.secret else None
29-
30-
version = cli_args.version
31-
if version:
32-
print(f"{COMMAND} v{__version__}")
33-
return 0
34-
list_devices = cli_args.list_devices
35-
if list_devices:
36-
my_devices = load_devices()
37-
display_inventory(my_devices)
38-
return 0
39-
40-
output_json = cli_args.json
41-
output_raw = cli_args.raw
29+
# CFG COMMAND HANDLER #####
4230
cfg_command = cli_args.cmd
4331
if cfg_command:
4432
if r"\n" in cfg_command:
@@ -50,8 +38,6 @@ def main(args):
5038
cfg_command = command_data.splitlines()
5139
else:
5240
raise ValueError("No configuration commands provided.")
53-
device_or_group = cli_args.devices.strip()
54-
hide_failed = cli_args.hide_failed
5541

5642
# DEVICE LOADING #####
5743
devices = obtain_devices(device_or_group)
@@ -65,9 +51,9 @@ def main(args):
6551
for device_name, device_params in devices.items():
6652
update_device_params(
6753
device_params,
68-
username=cli_username,
69-
password=cli_password,
70-
secret=cli_secret,
54+
username=cli_vars["cli_username"],
55+
password=cli_vars["cli_password"],
56+
secret=cli_vars["cli_secret"],
7157
)
7258
device_tasks.append(
7359
{
@@ -97,11 +83,11 @@ def main(args):
9783

9884
# OUTPUT PROCESSING #####
9985
out_format = "text"
100-
if output_json and output_raw:
86+
if cli_args.json and cli_args.raw:
10187
out_format = "json_raw"
102-
elif output_json:
88+
elif cli_args.json:
10389
out_format = "json"
104-
elif output_raw:
90+
elif cli_args.raw:
10591
out_format = "raw"
10692
# elif output_yaml:
10793
# out_format = "yaml"

netmiko/cli_tools/netmiko_grep.py

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
import subprocess
66
from concurrent.futures import ThreadPoolExecutor, as_completed
77
from datetime import datetime
8-
from getpass import getpass
98

10-
from netmiko.utilities import load_devices, display_inventory
119
from netmiko.utilities import write_tmp_file, ensure_dir_exists
1210
from netmiko.utilities import find_netmiko_dir
1311
from netmiko.utilities import SHOW_RUN_MAPPER
1412
from netmiko.cli_tools import ERROR_PATTERN, GREP, MAX_WORKERS, __version__
1513
from netmiko.cli_tools.helpers import obtain_devices, update_device_params, ssh_conn
16-
from netmiko.cli_tools.argument_handling import parse_arguments
14+
from netmiko.cli_tools.argument_handling import parse_arguments, extract_cli_vars
1715

1816

1917
COMMAND = "netmiko-grep"
@@ -45,29 +43,17 @@ def main_ep():
4543

4644
def main(args):
4745
start_time = datetime.now()
48-
cli_args = parse_arguments(args, COMMAND)
49-
50-
cli_username = cli_args.username if cli_args.username else None
51-
cli_password = getpass() if cli_args.password else None
52-
cli_secret = getpass("Enable secret: ") if cli_args.secret else None
53-
54-
version = cli_args.version
55-
if version:
56-
print(f"{COMMAND} v{__version__}")
57-
return 0
58-
list_devices = cli_args.list_devices
59-
if list_devices:
60-
my_devices = load_devices()
61-
display_inventory(my_devices)
62-
return 0
6346

47+
# CLI ARGS #####
48+
cli_args = parse_arguments(args, COMMAND)
49+
cli_vars = extract_cli_vars(cli_args, command=COMMAND, __version__=__version__)
6450
cli_command = cli_args.cmd
6551
cmd_arg = False
6652
if cli_command:
6753
cmd_arg = True
6854
device_or_group = cli_args.devices.strip()
69-
pattern = cli_args.pattern
7055
hide_failed = cli_args.hide_failed
56+
pattern = cli_args.pattern
7157

7258
# DEVICE LOADING #####
7359
devices = obtain_devices(device_or_group)
@@ -82,9 +68,9 @@ def main(args):
8268
for device_name, device_params in devices.items():
8369
update_device_params(
8470
device_params,
85-
username=cli_username,
86-
password=cli_password,
87-
secret=cli_secret,
71+
username=cli_vars["cli_username"],
72+
password=cli_vars["cli_password"],
73+
secret=cli_vars["cli_secret"],
8874
)
8975
if not cmd_arg:
9076
device_type = device_params["device_type"]

netmiko/cli_tools/netmiko_show.py

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44
from concurrent.futures import ThreadPoolExecutor, as_completed
55

66
from datetime import datetime
7-
from getpass import getpass
87
from rich import print
98

10-
from netmiko.utilities import load_devices, display_inventory
119
from netmiko.utilities import SHOW_RUN_MAPPER
1210
from netmiko.cli_tools import ERROR_PATTERN, MAX_WORKERS, __version__
1311
from netmiko.cli_tools.helpers import obtain_devices, update_device_params, ssh_conn
1412
from netmiko.cli_tools.outputters import output_dispatcher, output_failed_devices
15-
from netmiko.cli_tools.argument_handling import parse_arguments
13+
from netmiko.cli_tools.argument_handling import parse_arguments, extract_cli_vars
1614

1715

1816
COMMAND = "netmiko-show"
@@ -27,23 +25,7 @@ def main(args):
2725

2826
# CLI ARGS #####
2927
cli_args = parse_arguments(args, COMMAND)
30-
31-
cli_username = cli_args.username if cli_args.username else None
32-
cli_password = getpass() if cli_args.password else None
33-
cli_secret = getpass("Enable secret: ") if cli_args.secret else None
34-
35-
version = cli_args.version
36-
if version:
37-
print(f"{COMMAND} v{__version__}")
38-
return 0
39-
list_devices = cli_args.list_devices
40-
if list_devices:
41-
my_devices = load_devices()
42-
display_inventory(my_devices)
43-
return 0
44-
45-
output_json = cli_args.json
46-
output_raw = cli_args.raw
28+
cli_vars = extract_cli_vars(cli_args, command=COMMAND, __version__=__version__)
4729
cli_command = cli_args.cmd
4830
cmd_arg = False
4931
if cli_command:
@@ -63,9 +45,9 @@ def main(args):
6345
for device_name, device_params in devices.items():
6446
update_device_params(
6547
device_params,
66-
username=cli_username,
67-
password=cli_password,
68-
secret=cli_secret,
48+
username=cli_vars["cli_username"],
49+
password=cli_vars["cli_password"],
50+
secret=cli_vars["cli_secret"],
6951
)
7052
if not cmd_arg:
7153
device_type = device_params["device_type"]
@@ -98,11 +80,11 @@ def main(args):
9880

9981
# OUTPUT PROCESSING #####
10082
out_format = "text"
101-
if output_json and output_raw:
83+
if cli_args.json and cli_args.raw:
10284
out_format = "json_raw"
103-
elif output_json:
85+
elif cli_args.json:
10486
out_format = "json"
105-
elif output_raw:
87+
elif cli_args.raw:
10688
out_format = "raw"
10789
# elif output_yaml:
10890
# out_format = "yaml"

0 commit comments

Comments
 (0)