Move to argparse for ddrescue-tui and hw-diags
This commit is contained in:
parent
d00d625142
commit
50033f42f6
4 changed files with 80 additions and 49 deletions
|
|
@ -2,19 +2,10 @@
|
|||
"""WizardKit: ddrescue TUI"""
|
||||
# vim: sts=2 sw=2 ts=2
|
||||
|
||||
from docopt import docopt
|
||||
|
||||
import wk
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
docopt(wk.clone.ddrescue.DOCSTRING)
|
||||
except SystemExit:
|
||||
print('')
|
||||
wk.ui.cli.pause('Press Enter to exit...')
|
||||
raise
|
||||
|
||||
try:
|
||||
wk.clone.ddrescue.main()
|
||||
except SystemExit:
|
||||
|
|
|
|||
|
|
@ -2,19 +2,10 @@
|
|||
"""WizardKit: Hardware Diagnostics"""
|
||||
# vim: sts=2 sw=2 ts=2
|
||||
|
||||
from docopt import docopt
|
||||
|
||||
import wk
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
docopt(wk.hw.diags.DOCSTRING)
|
||||
except SystemExit:
|
||||
print('')
|
||||
wk.ui.cli.pause('Press Enter to exit...')
|
||||
raise
|
||||
|
||||
try:
|
||||
wk.hw.diags.main()
|
||||
except SystemExit:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
"""WizardKit: ddrescue TUI"""
|
||||
# vim: sts=2 sw=2 ts=2
|
||||
|
||||
import argparse
|
||||
import atexit
|
||||
import datetime
|
||||
import logging
|
||||
|
|
@ -12,8 +13,6 @@ from random import randint
|
|||
|
||||
import pytz
|
||||
|
||||
from docopt import docopt
|
||||
|
||||
from wk import cfg, exe, io, log, std
|
||||
from wk.cfg.ddrescue import DDRESCUE_SPECIFIC_PASS_SETTINGS
|
||||
from wk.clone import menus
|
||||
|
|
@ -29,19 +28,6 @@ from wk.ui import ansi, cli
|
|||
|
||||
# STATIC VARIABLES
|
||||
LOG = logging.getLogger(__name__)
|
||||
DOCSTRING = f'''{cfg.main.KIT_NAME_FULL}: ddrescue TUI
|
||||
|
||||
Usage:
|
||||
ddrescue-tui
|
||||
ddrescue-tui [options] (clone|image) [<source> [<destination>]]
|
||||
ddrescue-tui (-h | --help)
|
||||
|
||||
Options:
|
||||
-h --help Show this page
|
||||
-s --dry-run Print commands to be used instead of running them
|
||||
--force-local-map Skip mounting shares and save map to local drive
|
||||
--start-fresh Ignore previous runs and start new recovery
|
||||
'''
|
||||
DETECT_DRIVES_NOTICE = '''
|
||||
This option will force the drive controllers to rescan for devices.
|
||||
The method used is not 100% reliable and may cause issues. If you see
|
||||
|
|
@ -55,6 +41,42 @@ TIMEZONE = pytz.timezone(cfg.main.LINUX_TIME_ZONE)
|
|||
|
||||
|
||||
# Functions
|
||||
def argparse_helper() -> dict[str, None|bool|str]:
|
||||
"""Helper function to setup and return args, returns dict.
|
||||
|
||||
NOTE: A dict is used to match the legacy code.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='ddrescue-tui',
|
||||
description=f'{cfg.main.KIT_NAME_FULL}: ddrescue TUI',
|
||||
)
|
||||
parser.add_argument('mode', choices=('clone', 'image'), nargs='?')
|
||||
parser.add_argument('source', nargs='?')
|
||||
parser.add_argument('destination', nargs='?')
|
||||
parser.add_argument(
|
||||
'-s', '--dry-run', action='store_true',
|
||||
help='Print commands to be used instead of running them',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--force-local-map', action='store_true',
|
||||
help='Skip mounting shares and save map to local drive',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--start-fresh', action='store_true',
|
||||
help='Ignore previous runs and start new recovery',
|
||||
)
|
||||
args = parser.parse_args()
|
||||
legacy_args = {
|
||||
'clone': False if args.clone is None else args.clone,
|
||||
'image': False if args.image is None else args.image,
|
||||
'<source>': args.source,
|
||||
'<destination>': args.destination,
|
||||
'--dry-run': args.dry_run,
|
||||
'--force-local-map': args.force_local_map,
|
||||
'--start-fresh': args.start_fresh,
|
||||
}
|
||||
return legacy_args
|
||||
|
||||
def build_ddrescue_cmd(block_pair, pass_name, settings_menu) -> list[str]:
|
||||
"""Build ddrescue cmd using passed details, returns list."""
|
||||
cmd = ['sudo', 'ddrescue']
|
||||
|
|
@ -273,7 +295,12 @@ def is_missing_source_or_destination(state) -> bool:
|
|||
|
||||
def main() -> None:
|
||||
"""Main function for ddrescue TUI."""
|
||||
args = docopt(DOCSTRING)
|
||||
try:
|
||||
args = argparse_helper()
|
||||
except SystemExit:
|
||||
print('')
|
||||
cli.pause('Press Enter to exit...')
|
||||
raise
|
||||
|
||||
# Log setup
|
||||
log_path = log.format_log_path(log_name='main', sub_dir='ddrescue-TUI')
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
"""WizardKit: Hardware diagnostics"""
|
||||
# vim: sts=2 sw=2 ts=2
|
||||
|
||||
import argparse
|
||||
import atexit
|
||||
import logging
|
||||
import os
|
||||
import pathlib
|
||||
import subprocess
|
||||
|
||||
from docopt import docopt
|
||||
|
||||
from wk import cfg, debug, exe, log, std
|
||||
from wk.cfg.hw import STATUS_COLORS
|
||||
from wk.hw import benchmark as hw_benchmark
|
||||
|
|
@ -28,18 +27,6 @@ from wk.ui import ansi, cli, tui
|
|||
|
||||
|
||||
# STATIC VARIABLES
|
||||
DOCSTRING = f'''{cfg.main.KIT_NAME_FULL}: Hardware Diagnostics
|
||||
|
||||
Usage:
|
||||
hw-diags [options]
|
||||
hw-diags (-h | --help)
|
||||
|
||||
Options:
|
||||
-c --cli Force CLI mode
|
||||
-h --help Show this page
|
||||
-q --quick Skip menu and perform a quick check
|
||||
-t --test-mode Run diags in test mode
|
||||
'''
|
||||
LOG = logging.getLogger(__name__)
|
||||
TEST_GROUPS = {
|
||||
# Also used to build the menu options
|
||||
|
|
@ -264,6 +251,36 @@ class State():
|
|||
|
||||
|
||||
# Functions
|
||||
def argparse_helper() -> dict[str, bool]:
|
||||
"""Helper function to setup and return args, returns dict.
|
||||
|
||||
NOTE: A dict is used to match the legacy code.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='hw-diags',
|
||||
description=f'{cfg.main.KIT_NAME_FULL}: Hardware Diagnostics',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-c', '--cli', action='store_true',
|
||||
help='Force CLI mode',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-q', '--quick', action='store_true',
|
||||
help='Skip menu and perform a quick check',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-t', '--test-mode', action='store_true',
|
||||
help='Run diags in test mode',
|
||||
)
|
||||
args = parser.parse_args()
|
||||
legacy_args = {
|
||||
'--cli': args.cli,
|
||||
'--quick': args.quick,
|
||||
'--test-mode': args.test_mode,
|
||||
}
|
||||
return legacy_args
|
||||
|
||||
|
||||
def build_menu(cli_mode=False, quick_mode=False) -> cli.Menu:
|
||||
"""Build main menu, returns wk.ui.cli.Menu."""
|
||||
menu = cli.Menu(title='')
|
||||
|
|
@ -748,7 +765,12 @@ def disk_surface_scan(state: State, test_objects, test_mode=False) -> None:
|
|||
|
||||
def main() -> None:
|
||||
"""Main function for hardware diagnostics."""
|
||||
args = docopt(DOCSTRING)
|
||||
try:
|
||||
args = argparse_helper()
|
||||
except SystemExit:
|
||||
print('')
|
||||
cli.pause('Press Enter to exit...')
|
||||
raise
|
||||
log.update_log_path(dest_name='Hardware-Diagnostics', timestamp=True)
|
||||
|
||||
# Safety check
|
||||
|
|
|
|||
Loading…
Reference in a new issue