import zipfile
import glob
import os.path
from os import path

class zip_backup:
    root_dir = ""
    
    ignore = []
    backup_list = []

    def ignore_list(self):
        gitignore = self.root_dir + "\\.gitignore"
        if not path.exists(gitignore):
            pass
        with open(gitignore, "r") as f:
            for l in f.readlines():
                line = l.strip().replace("/", "\\").lower()
                if line[:1] == "*": 
                    if line[-1] == "*":
                        line = line[1:-1]
                    else:
                        line = line[1:] + "\\"
                else:
                    line = "\\" + line + "\\"
                self.ignore.append(line)

    def ignored(self, filename):
        rel_filename = "\\" + filename.replace(self.root_dir, "").lower() + "\\"

        for e in self.ignore:
            if e in rel_filename:
                return True
        return False

    def check_dir(self, current_dir):
        if self.root_dir == "":
            self.root_dir = current_dir
            self.ignore_list()

        for entry in glob.glob(current_dir + "\\*"):
            if path.isdir(entry):
                self.check_dir(entry)
            elif not self.ignored(entry):
                self.backup_list.append(entry)

    def zip_to_file(self, zip_file):
        with zipfile.ZipFile(zip_file, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zip:
            for e in self.backup_list:
                zip.write(e)


z_backup = zip_backup()
z_backup.check_dir("C:\\GAPS_Autosys")
#print(backup_list[:10])
z_backup.zip_to_file("C:\\GAPS_Autosys\\Test.zip")