diff --git a/scripts/ddrescue-tui.py b/scripts/ddrescue-tui.py index 8e273dda..70109ecc 100755 --- a/scripts/ddrescue-tui.py +++ b/scripts/ddrescue-tui.py @@ -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: diff --git a/scripts/hw-diags.py b/scripts/hw-diags.py index e2d00a41..72b66dd3 100755 --- a/scripts/hw-diags.py +++ b/scripts/hw-diags.py @@ -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: diff --git a/scripts/wk/clone/ddrescue.py b/scripts/wk/clone/ddrescue.py index c0bdd7a3..a771f96c 100644 --- a/scripts/wk/clone/ddrescue.py +++ b/scripts/wk/clone/ddrescue.py @@ -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) [ []] - 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, + '': args.source, + '': 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') diff --git a/scripts/wk/hw/diags.py b/scripts/wk/hw/diags.py index 19974363..2bfce27d 100644 --- a/scripts/wk/hw/diags.py +++ b/scripts/wk/hw/diags.py @@ -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