Skip to main content
Use sandbox.files.write() to create or update files. Parent directories are created automatically.

Write Text

from moru import Sandbox

sandbox = Sandbox.create()

# Write a text file
sandbox.files.write("/home/user/hello.txt", "Hello, World!")

# Write multi-line content
sandbox.files.write("/home/user/script.py", """
import sys
print(f"Python {sys.version}")
""")

Write Binary Data

# Write bytes
binary_data = bytes([0x89, 0x50, 0x4E, 0x47])  # PNG header
sandbox.files.write("/home/user/image.png", binary_data)

# Write from local file
with open("local_image.png", "rb") as f:
    sandbox.files.write("/home/user/uploaded.png", f.read())

Write Multiple Files

Write multiple files in a single operation:
# Batch write multiple files
files = [
    {"path": "/home/user/file1.txt", "data": "Content 1"},
    {"path": "/home/user/file2.txt", "data": "Content 2"},
    {"path": "/home/user/config.json", "data": '{"key": "value"}'},
]

results = sandbox.files.write_files(files)
for result in results:
    print(f"Wrote {result.path}: {result.size} bytes")

Automatic Directory Creation

Parent directories are created automatically:
# This creates /home/user/deep/nested/path/ automatically
sandbox.files.write("/home/user/deep/nested/path/file.txt", "content")

Write Response

The write operation returns information about the created file:
result = sandbox.files.write("/home/user/data.txt", "Hello!")

print(f"Path: {result.path}")
print(f"Size: {result.size} bytes")
print(f"Mode: {result.mode}")
print(f"Permissions: {result.permissions}")
print(f"Owner: {result.owner}")
print(f"Group: {result.group}")
print(f"Modified: {result.modified_time}")

Write as Different User

# Write as root
sandbox.files.write("/etc/myconfig.conf", "config data", user="root")

# Write as specific user
sandbox.files.write("/home/alice/file.txt", "data", user="alice")

Upload URL

Get a URL to upload files directly:
# Get upload URL for a specific path
url = sandbox.upload_url("/home/user/large_file.zip")

# Upload using any HTTP client
import requests
with open("large_file.zip", "rb") as f:
    requests.put(url, data=f)

Error Handling

from moru.exceptions import NotEnoughSpaceException

try:
    # Write a large file
    sandbox.files.write("/home/user/huge.bin", large_data)
except NotEnoughSpaceException:
    print("Not enough disk space in sandbox")

Options Reference

OptionTypeDescription
userstringUser context for writing
request_timeout / requestTimeoutMsnumberOperation timeout

Next Steps