from .base import BaseCommand import tarfile import logging import os.path import sys from pathlib import Path print_function = print logger = logging.getLogger(__name__) class Command(BaseCommand): help = "Unzip a zipped oTree project" def add_arguments(self, parser): parser.add_argument('zip_file', type=str, help="The .otreezip file") def handle(self, zip_file): output_folder = Path(zip_file).stem if Path(output_folder).exists(): sys.exit( f"Could not unzip the file; target folder '{output_folder}' already exists. " ) unzip(zip_file, output_folder) msg = f'Unzipped file. Enter this:\n' f'cd {esc_fn(output_folder)}\n' logger.info(msg) def esc_fn(fn): if ' ' in fn: return f'\"{fn}\"' return fn def unzip(zip_file: str, output_folder): if os.path.isfile('settings.py'): logger.error( 'You are trying to unzip a project but it seems you are ' 'already in a project folder (found settings.py).' ) sys.exit(-1) with tarfile.open(zip_file) as tar: tar.extractall(output_folder)