Files
strukto-ai--mirage/docs/python/resource/supabase.mdx
T
wehub-resource-sync bcbd1bdb22
Integ / changes (push) Has been skipped
Pre-commit / pre-commit (push) Failing after 1s
CLI exit codes / changes (push) Has been skipped
Test (Install) / changes (push) Has been skipped
Test (Python) / changes (push) Has been skipped
Test (TypeScript) / changes (push) Has been skipped
CLI exit codes / cli-gate (push) Has been cancelled
Test (Install) / test-install-gate (push) Has been cancelled
Integ / integ-gate (push) Has been cancelled
Test (Python) / test-python-gate (push) Has been cancelled
Test (TypeScript) / test-typescript-gate (push) Has been cancelled
Test (Install) / python-minimal (3.12) (push) Has been cancelled
Test (Install) / python-minimal (3.11) (push) Has been cancelled
Test (Install) / python-extra (agno, mirage.agents.agno) (push) Has been cancelled
Test (Install) / python-extra (chroma, mirage.resource.chroma) (push) Has been cancelled
Test (Install) / python-extra (pdf, mirage.core.filetype.pdf) (push) Has been cancelled
Integ / integ (push) Has been cancelled
Integ / integ-database (push) Has been cancelled
Integ / integ-database-ts (push) Has been cancelled
Integ / integ-data (push) Has been cancelled
Integ / integ-ssh (push) Has been cancelled
Integ / integ-ssh-ts (push) Has been cancelled
Test (Python) / audit (push) Has been cancelled
Test (TypeScript) / test (push) Has been cancelled
Test (TypeScript) / python-fs-shim (push) Has been cancelled
CLI exit codes / Python CLI (push) Has been cancelled
CLI exit codes / TypeScript CLI (push) Has been cancelled
CLI exit codes / Cross-language snapshot interop (push) Has been cancelled
Test (Python) / test (push) Has been cancelled
Test (Python) / import-isolation (deepagents, openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Python) / import-isolation (deepagents, pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Integ / integ-ts (push) Has been cancelled
Integ / integ-fuse (push) Has been cancelled
Test (Install) / python-extra (databricks, mirage.resource.databricks_volume) (push) Has been cancelled
Test (Install) / python-extra (deepagents, mirage.agents.langchain) (push) Has been cancelled
Test (Install) / python-extra (email, mirage.resource.email) (push) Has been cancelled
Test (Install) / python-extra (fuse, mirage.fuse.mount) (push) Has been cancelled
Test (Install) / python-extra (hdf5, mirage.core.filetype.hdf5) (push) Has been cancelled
Test (Install) / python-extra (hf, mirage.resource.hf_buckets) (push) Has been cancelled
Test (Install) / python-extra (lancedb, mirage.resource.lancedb) (push) Has been cancelled
Test (Install) / python-extra (langfuse, mirage.resource.langfuse) (push) Has been cancelled
Test (Install) / python-extra (mongodb, mirage.resource.mongodb) (push) Has been cancelled
Test (Install) / python-extra (nextcloud, mirage.resource.nextcloud) (push) Has been cancelled
Test (Install) / python-extra (openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Install) / python-extra (openhands, mirage.agents.openhands, 3.12) (push) Has been cancelled
Test (Install) / python-extra (parquet, mirage.core.filetype.parquet) (push) Has been cancelled
Test (Install) / python-extra (postgres, mirage.resource.postgres) (push) Has been cancelled
Test (Install) / python-extra (pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Test (Install) / python-extra (qdrant, mirage.resource.qdrant) (push) Has been cancelled
Test (Install) / python-extra (redis, mirage.resource.redis) (push) Has been cancelled
Test (Install) / python-extra (s3, mirage.resource.s3) (push) Has been cancelled
Test (Install) / python-extra (ssh, mirage.resource.ssh) (push) Has been cancelled
Test (Install) / ts-minimal (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:44 +08:00

240 lines
8.4 KiB
Plaintext

---
title: Supabase Storage
icon: bolt
description: Mount Supabase Storage as a virtual filesystem.
---
The Supabase resource mounts a Supabase Storage bucket at some prefix
such as `/supabase/`. All operations involve network I/O to the remote
object store. Uses aioboto3 against Supabase's S3-compatible API.
For credential setup, see [Supabase Setup](/home/setup/supabase).
## Config
```python
import os
from mirage import MountMode, Workspace
from mirage.resource.supabase import SupabaseConfig, SupabaseResource
config = SupabaseConfig(
bucket=os.environ["SUPABASE_BUCKET"],
region=os.environ["SUPABASE_REGION"],
project_ref=os.environ["SUPABASE_PROJECT_REF"],
access_key_id=os.environ["SUPABASE_ACCESS_KEY_ID"],
secret_access_key=os.environ["SUPABASE_SECRET_ACCESS_KEY"],
# Optional:
# endpoint_url="https://{project_ref}.storage.supabase.co/storage/v1/s3",
# session_token="...",
# timeout=30,
# proxy="http://proxy:8080",
)
resource = SupabaseResource(config=config)
ws = Workspace({"/supabase": resource}, mode=MountMode.READ)
```
`SupabaseResource(config)` takes a `SupabaseConfig` object with the
bucket name, `region`, and either `project_ref` (endpoint is auto-built
as `https://{project_ref}.storage.supabase.co/storage/v1/s3`) or an
explicit `endpoint_url`. Both `READ` and `WRITE` modes are supported.
## Filesystem Layout
The Supabase resource maps object keys to virtual paths under the mount
prefix. Supabase "directories" are prefix-based — there are no real
directory objects.
For example, if bucket `my-bucket` contains:
```text
avatars/user-001.png
avatars/user-002.png
documents/report.pdf
documents/data.csv
```
Then mounting at `/supabase/` exposes:
```text
/supabase/
avatars/
user-001.png
user-002.png
documents/
report.pdf
data.csv
```
Path mapping: virtual `/supabase/avatars/user-001.png` maps to Supabase
key `avatars/user-001.png`.
## Cache
The Supabase resource uses `IndexCacheStore` with `index_ttl = 600`
(10 minutes). Directory listings are cached for up to 600 seconds before
being refreshed from Supabase.
## Example
```python
import asyncio
import os
from dotenv import load_dotenv
from mirage import MountMode, Workspace
from mirage.resource.supabase import SupabaseConfig, SupabaseResource
load_dotenv(".env.development")
config = SupabaseConfig(
bucket=os.environ["SUPABASE_BUCKET"],
region=os.environ["SUPABASE_REGION"],
project_ref=os.environ["SUPABASE_PROJECT_REF"],
access_key_id=os.environ["SUPABASE_ACCESS_KEY_ID"],
secret_access_key=os.environ["SUPABASE_SECRET_ACCESS_KEY"],
)
resource = SupabaseResource(config=config)
async def main() -> None:
ws = Workspace({"/supabase/": resource}, mode=MountMode.READ)
r = await ws.execute("ls /supabase/")
print(await r.stdout_str())
r = await ws.execute("cat /supabase/documents/data.csv | head -n 10")
print(await r.stdout_str())
r = await ws.execute("tree -L 2 /supabase/")
print(await r.stdout_str())
r = await ws.execute("find /supabase/ -name '*.pdf'")
print(await r.stdout_str())
r = await ws.execute("stat /supabase/avatars/user-001.png")
print(await r.stdout_str())
if __name__ == "__main__":
asyncio.run(main())
```
## Shell Commands
The Supabase resource supports the full set of shell commands since it operates
on real file content (text, binary, JSON, CSV, etc.). Large files benefit
from range reads to avoid downloading entire objects.
### Read Commands
| Command | Notes |
| --------------- | ------------------------------------------ |
| `cat` | Read file content |
| `head` / `tail` | First/last N lines |
| `grep` / `rg` | Pattern search (file or directory level) |
| `jq` | Query JSON fields |
| `wc` | Line/word/byte counts |
| `stat` | File metadata (name, size, type, modified) |
| `find` | Recursive search with `-name`, `-maxdepth` |
| `tree` | Directory tree view |
| `nl` | Number lines |
| `du` | Disk usage summary |
| `file` | Detect file type |
| `strings` | Extract printable strings from binary |
| `xxd` | Hex dump |
| `md5` | MD5 checksum |
| `sha256sum` | SHA-256 checksum |
### Text Processing
| Command | Notes |
| ---------- | ------------------------------------------- |
| `awk` | Pattern scanning and processing |
| `sed` | Stream editor |
| `tr` | Translate or delete characters |
| `sort` | Sort lines |
| `uniq` | Remove duplicate lines |
| `cut` | Extract fields/columns |
| `join` | Join lines on a common field |
| `paste` | Merge lines side by side |
| `column` | Columnate output |
| `fold` | Wrap lines to a specified width |
| `expand` | Convert tabs to spaces |
| `unexpand` | Convert spaces to tabs |
| `fmt` | Simple text formatter |
| `rev` | Reverse lines |
| `tac` | Concatenate and print in reverse |
| `look` | Display lines beginning with a given string |
| `shuf` | Shuffle lines |
| `tsort` | Topological sort |
| `comm` | Compare two sorted files |
| `cmp` | Compare two files byte by byte |
| `diff` | Compare files line by line |
| `patch` | Apply a diff patch |
| `iconv` | Character encoding conversion |
### File Operations
| Command | Notes |
| -------- | ------------------------------------- |
| `cp` | Copy files |
| `mv` | Move/rename files |
| `rm` | Remove files |
| `mkdir` | Create directories |
| `touch` | Create empty file or update timestamp |
| `ln` | Create symbolic links |
| `tee` | Write stdin to file and stdout |
| `mktemp` | Create temporary file |
| `split` | Split file into pieces |
| `csplit` | Split file by context |
### Path Utilities
| Command | Notes |
| ---------- | -------------------------- |
| `basename` | Strip directory from path |
| `dirname` | Strip filename from path |
| `realpath` | Resolve path |
| `readlink` | Print symbolic link target |
| `ls` | List directory contents |
### Compression
| Command | Notes |
| -------- | --------------------- |
| `gzip` | Compress files |
| `gunzip` | Decompress gzip files |
| `zip` | Create zip archives |
| `unzip` | Extract zip archives |
| `tar` | Archive files |
| `zcat` | Cat compressed files |
| `zgrep` | Grep compressed files |
### Encoding
| Command | Notes |
| -------- | -------------------- |
| `base64` | Base64 encode/decode |
### Data Format Support
Commands with format-specific variants for structured data files:
| Format | Extension | Variants |
| ------- | ---------- | ---------------------------------------------- |
| Parquet | `.parquet` | cat, head, tail, wc, stat, cut, grep, ls, file |
| Feather | `.feather` | cat, head, tail, wc, stat, cut, grep, ls, file |
| ORC | `.orc` | cat, head, tail, wc, stat, cut, grep, ls, file |
| HDF5 | `.hdf5` | cat, head, tail, wc, stat, cut, grep, ls, file |
These variants auto-detect the format by extension and convert to
tabular text (CSV) for processing.
## Use Cases
- **AI agents accessing Supabase data**: Mount Supabase buckets for agents to read and process datasets
- **Data pipelines**: Read and write Supabase objects with shell-like commands
- **FUSE mounting**: Expose Supabase buckets through a virtual FUSE mount for external tools