#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Main module for tcmpr application used to run program
and parse arguments.
"""
import os
import sys
import logging
from .argument_parser import parse_args
__author__ = "Konrad Poreba"
__copyright__ = "Konrad Poreba"
__license__ = "mit"
_logger = logging.getLogger(__name__)
[docs]def compress(file_name, algorithm):
"""Pick proper algorithm chosen by the user
and compress input file
"""
if algorithm == 'huffman':
from tcmpr.algorithms.huffman.compressor import compress_huffman
compress_huffman(file_name)
elif algorithm == 'lzss':
from tcmpr.algorithms.lzss.compressor import compress_lzss
compress_lzss(file_name)
elif algorithm == 'lzw':
from tcmpr.algorithms.lzw.compressor import compress_lzw
compress_lzw(file_name)
elif algorithm == 'shannon':
pass
else:
_logger.error("No such algorithm implemented!")
sys.exit()
[docs]def decompress(file_name):
"""Pick proper algorithm to decompress file
based on coding extension attached to
compressed file like:
.huffman
.lzw
.lzss
.shannon
"""
coding_extension = os.path.splitext(os.path.basename(file_name))[1]
if coding_extension == '.huffman':
from tcmpr.algorithms.huffman.decompressor import decompress_huffman
decompress_huffman(file_name)
elif coding_extension == '.lzss':
pass
elif coding_extension == '.lzw':
from tcmpr.algorithms.lzw.decompressor import decompress_lzw
decompress_lzw(file_name)
elif coding_extension == '.shannon':
pass
else:
_logger.error("Unsupported file format!")
sys.exit()
[docs]def setup_logging(loglevel):
"""Setup basic logging
Args:
loglevel (int): minimum loglevel for emitting messages
"""
logformat = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s"
logging.basicConfig(level=loglevel, stream=sys.stdout,
format=logformat, datefmt="%Y-%m-%d %H:%M:%S")
[docs]def main(args):
"""Main entry point allowing external calls
Args:
args ([str]): command line parameter list
"""
args = parse_args(args)
setup_logging(args.loglevel)
if args.mode == 'compress':
_logger.debug("Compression started")
compress(args.file, args.algorithm)
_logger.info("Compression complete")
if args.mode == 'decompress':
_logger.debug("Decompression started")
decompress(args.file)
_logger.info("Decompression complete")
[docs]def run():
"""Entry point for console_scripts
"""
main(sys.argv[1:])
if __name__ == "__main__":
run()