mstuttgart/pynocchio

View on GitHub
pynocchio/comic_file_loader_factory.py

Summary

Maintainability
A
1 hr
Test Coverage
import logging

from .comic_file_loader_image import ComicImageLoader
from .comic_file_loader_dir import ComicDirLoader, is_directory
from .comic_file_loader_rar import ComicRarLoader, is_rarfile
from .comic_file_loader_tar import ComicTarLoader, is_tarfile
from .comic_file_loader_zip import ComicZipLoader, is_zipfile
from .exception import InvalidTypeFileException
from .utility import IMAGE_FILE_FORMATS, SUPPORTED_FILES, get_file_extension

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)


class ComicLoaderFactory():

    @staticmethod
    def create_loader(filename):
        if is_directory(dirname=filename):
            logger.info("Creating dir loader")
            return ComicDirLoader()

        file_extension = get_file_extension(filename=filename)
        if file_extension not in SUPPORTED_FILES:
            message = 'File format is not supported: %s' % file_extension
            logger.exception(message)
            raise InvalidTypeFileException(message)

        if file_extension in IMAGE_FILE_FORMATS:
            logger.info("Creating image loader")
            return ComicImageLoader()

        elif is_zipfile(filename=filename):
            logger.info("Creating zip loader")
            return ComicZipLoader()
        elif is_rarfile(filename=filename):
            logger.info("Creating rar loader")
            return ComicRarLoader()
        elif is_tarfile(filename=filename):
            logger.info("Creating tar loader")
            return ComicTarLoader()
        else:
            message = 'File is not suported: %s' % file_extension
            logger.exception(message)
            raise InvalidTypeFileException(message)