import gzip import shutil import subprocess import os from django.conf import settings class MonolithError(Exception): pass # Monolith isn't used at the moment, as the local snapshot implementation # switched to single-file after the prototype. Keeping this around in case # it turns out to be useful in the future. def create_snapshot(url: str, filepath: str): monolith_path = settings.LD_MONOLITH_PATH monolith_options = settings.LD_MONOLITH_OPTIONS temp_filepath = filepath + ".tmp" try: command = f"{monolith_path} '{url}' {monolith_options} -o {temp_filepath}" subprocess.run(command, check=True, shell=True) with ( open(temp_filepath, "rb") as raw_file, gzip.open(filepath, "wb") as gz_file, ): shutil.copyfileobj(raw_file, gz_file) os.remove(temp_filepath) except subprocess.CalledProcessError as error: raise MonolithError(f"Failed to create snapshot: {error.stderr}")