Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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