diff --git a/zipExercise.py b/zipExercise.py new file mode 100644 index 0000000..ea9baf1 --- /dev/null +++ b/zipExercise.py @@ -0,0 +1,98 @@ +from os import path, mkdir, makedirs, walk +from shutil import copytree, copyfile, move, rmtree, make_archive, Error +import sys + + +class zipper: + def __init__(self, exerciseDir): + self.exerciseDir = exerciseDir + self.exerciseName = path.basename(path.abspath(self.exerciseDir)) + self.zipRootDir = path.join('/tmp/pythonExercises', self.exerciseName) + + + def __str__(self): + return f"""exerciseDir: {self.exerciseDir} +zipRootDir: {self.zipRootDir} +exerciseName:{self.exerciseName}""" + + + def copyToTemp(self): + makedirs(self.zipRootDir, exist_ok=True) + copytree(self.exerciseDir, path.join(self.zipRootDir, self.exerciseName)) + + + def removePycache(self): + print('Removing pycaches') + + directories = list() + for (dirpath, dirnames, *_) in walk(self.zipRootDir): + directories += [path.join(dirpath, directory) for directory in dirnames] + + for directory in directories: + if path.basename(directory) == '__pycache__': + rmtree(directory) + + + def importLibs(self): + print('Adding files from common') + copytree( + path.join(self.exerciseDir, '../common'), + path.join(self.zipRootDir, 'common') + ) + + + def addReadme(self): + print('Adding readme') + readme = path.join(self.exerciseDir, '../README.md') + copyfile(readme, path.join(self.zipRootDir, 'README.md')) + + + def pauseToMakeChanges(self): + input('Make your changes now and then press any key...') + + + def zipToCWD(self,cwd): + print('Moving zipfile back to current directory') + archive = make_archive( + base_name=path.join(cwd ,self.exerciseName), + format='zip', + root_dir=path.dirname(self.zipRootDir), + base_dir=path.basename(self.zipRootDir) + ) + + + # try: + # move(archive, cwd) + # except Error: + # print(f'Error: {path.abspath(cwd)}/{archive} already exists') + + + def cleanTemp(self): + print('Cleaning...') + try: + rmtree(self.zipRootDir) + except FileNotFoundError: + print('No existing folder at', self.zipRootDir) + + + def makeZip(self): + print(f'Making zip archive from{self.exerciseDir}\n') + + self.cleanTemp() + self.copyToTemp() + self.importLibs() + self.removePycache() + self.addReadme() + self.pauseToMakeChanges() + self.zipToCWD(path.join(self.exerciseDir, '..')) + + +if __name__ == "__main__": + try: + exerciseDir = sys.argv[1] + except IndexError: + print(f'Example of usage:\n\tpython {path.basename(__file__)} "Exercise 3"') + exit(1) + + myZipper = zipper(exerciseDir) + myZipper.makeZip() \ No newline at end of file