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}")