def cli(args): """Entrypoint to the command-line interface (CLI) of browser-history. It parses arguments from sys.argv and performs the appropriate actions. """ args = parser.parse_args(args) outputs = None fetch_map = { "history": get_history, "bookmarks": get_bookmarks, } if args.type not in fetch_map: utils.logger.error( "Type %s is unavailable." " Check --help for available types", args.type) sys.exit(1) if args.browser == "all": outputs = fetch_map[args.type]() else: try: # gets browser class by name (string). selected_browser = args.browser if selected_browser == "default": default = utils.default_browser() if default is None: sys.exit(1) else: selected_browser = default.__name__ else: for browser in utils.get_browsers(): if browser.__name__.lower() == args.browser.lower(): selected_browser = browser.__name__ break browser_class = getattr(browsers, selected_browser) except AttributeError: utils.logger.error( "Browser %s is unavailable." " Check --help for available browsers", args.browser, ) sys.exit(1) if args.type == "history": outputs = browser_class().fetch_history() elif args.type == "bookmarks": outputs = browser_class().fetch_bookmarks() try: if args.output is None: if args.format == "infer": args.format = "csv" print(outputs.formatted(args.format)) elif args.output is not None: outputs.save(args.output, args.format) except ValueError as e: utils.logger.error(e) sys.exit(1)
def _get_browser_available_on_system(): """Find a browser that is supported and installed on the test system.""" for browser in get_browsers(): try: # filter out unsupported browsers history = browser().fetch_history() except AssertionError: # anything caught here is unsupported continue # Has non-empty history so must be installed as well as supported if json.loads(history.to_json())["history"]: # Return string name which corresponds to a VALID_BROWSER_ARGS entry return browser.name return # None indicating no browsers available on system
command line interface of browser-history.""" import argparse import sys from argparse import RawDescriptionHelpFormatter from browser_history import ( generic, get_bookmarks, get_history, utils, __version__, ) # get list of all implemented browser by finding subclasses of generic.Browser AVAILABLE_BROWSERS = ", ".join(b.__name__ for b in utils.get_browsers()) AVAILABLE_FORMATS = ", ".join( generic.Outputs(fetch_type=None).format_map.keys()) AVAILABLE_TYPES = ", ".join(generic.Outputs(fetch_type=None).field_map.keys()) def make_parser(): """Creates an ArgumentParser, configures and returns it. This was made into a separate function to be used with sphinx-argparse :rtype: :py:class:`argparse.ArgumentParser` """ parser_ = argparse.ArgumentParser( description=""" A tool to retrieve history from