Source code for compressor.cli
"""
Compressor CLI (command-line interface) module.
Exposes the entry point to the program for executing as command line.
"""
import argparse
import sys
from compressor.constants import VERSION
from compressor.lib import compress_file, extract_file
[docs]def argument_parser() -> argparse.ArgumentParser:
"""Create the argument parser object to be used for parsing the arguments
from sys.argv
"""
parser = argparse.ArgumentParser(
prog='PyCompress',
description="Compress text files.",
)
parser.add_argument(
'filename',
type=str,
help="Name of the file to process"
)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument(
'-c', '--compress',
action='store_true',
help="Compress the file"
)
group.add_argument(
'-x', '--extract',
action='store_true',
help="Extract the file"
)
parser.add_argument(
'-d', '--dest-file',
type=str,
default=None,
help="Destination File Name"
)
parser.add_argument(
'-v', '--version',
action='version',
version='%(prog)s {version}'.format(version=VERSION)
)
return parser
[docs]def parse_arguments(args=None) -> dict:
"""Parse the command-line (cli) provided arguments, and return a mapping of
the options selected by the user with their values.
:return: dict with the kwargs provided in cli
"""
parser = argument_parser()
args = parser.parse_args(args)
return vars(args)
[docs]def main_engine(filename: str, extract: bool = False,
compress: bool = True, dest_file=None) -> int:
"""
Main functionality for the program cli or call as library.
`extract` & `compress` must have opposite values.
:param filename: Path to the source file to process.
:param extract: If True, sets the program for a extraction.
:param compress: If True, the program should compress a file.
:param dest_file: Optional name of the target file.
:return: 0 if executed without problems.
"""
if compress:
compress_file(filename, dest_file)
if extract:
extract_file(filename, dest_file)
return 0
[docs]def main() -> int: # pragma: nocover
"""Program cli
:return: Status code of the program.
:rtype: int
"""
return main_engine(**parse_arguments())
if __name__ == '__main__': # pragma: nocover
sys.exit(main())