yuru-yuri/manga-py

View on GitHub
manga_py/cli/args.py

Summary

Maintainability
A
1 hr
Test Coverage
"""
manga-py module for CLI and its options.
"""

import os
from argparse import ArgumentParser, MetavarTypeHelpFormatter

from manga_py.meta import version
from ._args_debug import _args_debug
from ._args_downloading import _args_downloading
from ._args_general import _args_general
from ._args_image import _args_image
from ._args_reader import _args_reader


class Formatter(MetavarTypeHelpFormatter):
    def __init__(self, prog, indent_increment=2, max_help_position=30, width=None):
        if width is None:
            try:
                width = int(os.environ['COLUMNS'])
            except (KeyError, ValueError):
                width = 100
        super().__init__(prog, indent_increment, max_help_position, width)

    def _format_action_invocation(self, action):
        if not action.option_strings:
            default = self._get_default_metavar_for_positional(action)
            metavar, = self._metavar_formatter(action, default)(1)
            return metavar
        else:
            parts = []
            if action.nargs == 0:
                parts.extend(action.option_strings)
            else:
                default = self._get_default_metavar_for_optional(action)
                args_string = self._format_args(action, default)
                args_len = len(action.option_strings) - 1
                for i, option_string in enumerate(action.option_strings):
                    if i == args_len:
                        parts.append('%s %s' % (option_string, args_string))
                    else:
                        parts.append(option_string)
            return ', '.join(parts)


def get_cli_arguments() -> ArgumentParser:  # pragma: no cover
    """
    Method to generate manga-py CLI with its options.
    """
    args_parser = ArgumentParser(
        add_help=False,
        formatter_class=Formatter,
        prog="manga-py",
        description=(
            '%(prog)s is the universal manga downloader (for your offline reading).\n  '
            'Site: https://manga-py.com/manga-py/\n  '
            'Source-code: https://github.com/manga-py/manga-py\n  '
            'Version: ' + version
        ),
        epilog=(
            'So, that is how %(prog)s can be executed to download yours favourite mangas.\n'
            'Enjoy! 😉'
        )
    )

    _args_general(args_parser, version)
    _args_downloading(args_parser)
    _args_reader(args_parser)
    _args_image(args_parser)
    _args_debug(args_parser)

    return args_parser