Define assets as functions, group them in sources, wire dependencies automatically, and materialize them with pluggable IO backends and runners.
uv add interloper-coreimport interloper as il
@il.source
class MySource:
@il.asset
def users(self) -> list:
return [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
@il.asset
def user_count(self, users: list) -> int:
return len(users)
source = MySource(io=il.FileIO("data"))
dag = il.DAG(source)
dag.materialize()| Package | Description |
|---|---|
interloper-core |
Core: assets, sources, DAG, runners, IO, partitioning |
interloper-sql |
SQL IO backends (Postgres, MySQL, SQLite) |
interloper-assets |
Pre-built source definitions and registry |
interloper-dbos |
DBOS durable execution |
interloper-docker |
Docker runner and backfiller |
interloper-k8s |
Kubernetes runner and backfiller |
uv sync --all-packages --all-extras
uv run pytest
uv run ruff check .
uv run pyright