Feat v0.8.0 files module (#67)
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-frontend (push) Has been skipped
CI/CD / test-runners (push) Has been skipped
CI/CD / e2e-smoke (push) Has been skipped
CI/CD / test-go-pg (push) Successful in 2m45s
CI/CD / test-sqlite (push) Successful in 2m52s
CI/CD / build-and-deploy (push) Successful in 1m20s
All checks were successful
CI/CD / detect-changes (push) Successful in 4s
CI/CD / test-frontend (push) Has been skipped
CI/CD / test-runners (push) Has been skipped
CI/CD / e2e-smoke (push) Has been skipped
CI/CD / test-go-pg (push) Successful in 2m45s
CI/CD / test-sqlite (push) Successful in 2m52s
CI/CD / build-and-deploy (push) Successful in 1m20s
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #67.
This commit is contained in:
@@ -275,6 +275,48 @@ results, errors = batch.exec([
|
||||
|
||||
---
|
||||
|
||||
### files
|
||||
|
||||
**Permissions:** `files.read`, `files.write`
|
||||
|
||||
Store and retrieve files via the kernel ObjectStore (PVC or S3).
|
||||
All keys are scoped to `ext/{packageID}/` — extensions cannot access
|
||||
each other's files.
|
||||
|
||||
```python
|
||||
# Store a file with optional metadata
|
||||
files.put("reports/q1.pdf", pdf_bytes,
|
||||
content_type="application/pdf",
|
||||
metadata={"quarter": "Q1", "year": 2026})
|
||||
|
||||
# Read a file
|
||||
result = files.get("reports/q1.pdf")
|
||||
# result = {"content": b"...", "content_type": "application/pdf",
|
||||
# "size": 12345, "metadata": {"quarter": "Q1", "year": 2026}}
|
||||
|
||||
# Metadata only (no content transfer)
|
||||
meta = files.meta("reports/q1.pdf")
|
||||
|
||||
# List files by prefix
|
||||
entries = files.list(prefix="reports/", limit=50)
|
||||
# entries = [{"name": "reports/q1.pdf", "size": 12345, "content_type": "..."}]
|
||||
|
||||
# Check existence
|
||||
if files.exists("reports/q1.pdf"):
|
||||
files.delete("reports/q1.pdf")
|
||||
|
||||
# Bulk delete
|
||||
files.delete_prefix("temp/")
|
||||
```
|
||||
|
||||
**Notes:**
|
||||
- `content` accepts string or bytes; `get()` returns bytes.
|
||||
- Maximum file size: 50 MB (configurable via `EXT_FILES_MAX_SIZE`).
|
||||
- Metadata is stored as a companion JSON object, not in the file itself.
|
||||
- `files.list()` automatically filters out internal metadata companions.
|
||||
|
||||
---
|
||||
|
||||
## Example: automated stage hook
|
||||
|
||||
A simple hook that reads a setting, queries data, and advances:
|
||||
|
||||
Reference in New Issue
Block a user