ebook_homebrew.archive.MakeArchive.make_zip()   B
last analyzed

Complexity

Conditions 7

Size

Total Lines 46
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 23
CRAP Score 7

Importance

Changes 0
Metric Value
cc 7
eloc 28
nop 4
dl 0
loc 46
ccs 23
cts 23
cp 1
crap 7
rs 7.808
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2 1
"""Create archive file.
3
"""
4 1
import os
5 1
import re
6 1
import zipfile
7
8 1
from .core import Common
9 1
from .exceptions import ZipFileExistError
10 1
from .utils.logging import get_logger
11
12 1
_logger = get_logger("MakeArchive")
13
14
15 1
class MakeArchive(Common):
16
    """Make archive file.
17
18
    """
19
20 1
    def __init__(self, extension, directory_path=None):
21
        """Constructor
22
23
        Args:
24
            extension (str): Target file extension.
25
            directory_path (str): Target directory path.
26
        """
27 1
        super().__init__()
28 1
        self.__extension = self._convert_extension_with_dot(extension)
29 1
        self.__regex_ext = re.compile(self.__extension)
30 1
        if directory_path is not None:
31 1
            self.__directory_path = directory_path
32
        else:
33 1
            self.__directory_path = os.getcwd()
34 1
            _logger.debug("Current Directory: {cwd}".format(cwd=self.__directory_path))
35 1
        os.chdir(self.__directory_path)
36
37 1
    def make_zip(self, filename, remove_flag=False, overwrite=False):
38
        """Make zip file for adding specify extension files.
39
40
        Make zip file for files which you choose extension.
41
42
        Args:
43
            filename (str): Zip file name
44
            remove_flag (bool): If true, remove original files
45
            overwrite (bool): If true, overwrite zip file even if exist same name file
46
47
        Returns:
48
            bool: If success, return true.
49
50
        """
51 1
        count = 0
52 1
        files = self._make_file_list(self.__directory_path)
53 1
        if overwrite:
54 1
            file_mode = "w"
55
        else:
56 1
            file_mode = "x"
57 1
        for file in files:
58 1
            if not self.__regex_ext.search(file):
59 1
                _logger.debug(
60
                    "Skip(No target extension): {filename}".format(filename=file)
61
                )
62
            else:
63 1
                try:
64 1
                    with zipfile.ZipFile(
65
                        filename, file_mode, zipfile.ZIP_DEFLATED
66
                    ) as zip_file:
67 1
                        zip_file.write(file)
68 1
                        count += 1
69 1
                        _logger.debug(
70
                            "Add Zipfile n files: {count}. Filename: "
71
                            "{filename}".format(count=count, filename=file)
72
                        )
73 1
                        file_mode = "a"
74 1
                except FileExistsError as file_exists_error:
75 1
                    raise ZipFileExistError() from file_exists_error
76
77 1
                if remove_flag:
78 1
                    self._remove_file(file, assume_yes=True)
79 1
                    _logger.debug("File removed: {filename}".format(filename=file))
80 1
        _logger.info("-" * 55)
81 1
        _logger.info("Finished. Zipfile: {filename}".format(filename=filename))
82
        return True
83