From c72b737a8179f1ee40f183f6ae62d0981cf2fba9 Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Mon, 13 Apr 2026 16:30:27 +0200 Subject: [PATCH] add snapshot creation script for surfsense-sandbox --- .../scripts/create_sandbox_snapshot.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 surfsense_backend/scripts/create_sandbox_snapshot.py diff --git a/surfsense_backend/scripts/create_sandbox_snapshot.py b/surfsense_backend/scripts/create_sandbox_snapshot.py new file mode 100644 index 000000000..f1c1920db --- /dev/null +++ b/surfsense_backend/scripts/create_sandbox_snapshot.py @@ -0,0 +1,46 @@ +"""Create the Daytona snapshot used by SurfSense sandboxes. + +Usage: + uv run python scripts/create_sandbox_snapshot.py + +Requires DAYTONA_API_KEY (and optionally DAYTONA_API_URL / DAYTONA_TARGET) +to be set in the environment or in a .env file. +""" + +import os +import sys + +from daytona import CreateSnapshotParams, Daytona, DaytonaConfig, Image + +SNAPSHOT_NAME = "surfsense-sandbox" + +PACKAGES = [ + "pandas", + "numpy", + "matplotlib", + "scipy", + "scikit-learn", +] + + +def main() -> None: + config = DaytonaConfig( + api_key=os.environ.get("DAYTONA_API_KEY", ""), + api_url=os.environ.get("DAYTONA_API_URL", "https://app.daytona.io/api"), + target=os.environ.get("DAYTONA_TARGET", "us"), + ) + daytona = Daytona(config) + + image = Image.debian_slim("3.12").pip_install(*PACKAGES) + + print(f"Creating snapshot '{SNAPSHOT_NAME}' with packages: {', '.join(PACKAGES)}") + snapshot = daytona.snapshot.create( + CreateSnapshotParams(name=SNAPSHOT_NAME, image=image), + on_logs=lambda chunk: print(chunk, end=""), + ) + print(f"\nSnapshot created: {snapshot.name}") + print(f"Set DAYTONA_SNAPSHOT_ID={snapshot.name} in your .env") + + +if __name__ == "__main__": + sys.exit(main() or 0)