Skip to main content

Local, folder-driven Dagster CSV transformation engine with hot-folder sensors, AI-assisted pipeline creation, and Tkinter configuration UI.

Project description

ETLai

A local, AI-assisted data transformation engine built on Dagster. Install it, scaffold a project, and let Claude Code create new pipelines — from CSV transformations to API ingestion.

Install

pip install ETLai

Requires Python 3.10+ and Tkinter (ships with most Python installations).

Quick start

etlai init ~/my-etl
cd ~/my-etl
etlai sync
etlai run

This starts a Dagster dev server at http://localhost:3000. Enable sensors in the UI, then drop CSV files into pipelines/<name>/inbox/.

Commands

Command Purpose
etlai init <dir> Scaffold a new project with example pipelines
etlai sync Validate manifests, create folders, prompt for path: ask, check env files
etlai run Start the Dagster dev server
etlai list Show all registered pipelines

How it works

Each pipeline is defined by a manifest (pipelines/<name>/manifest.yaml) that wires together:

  • Atom — a reusable, single-unit-of-work transformation
  • Form — first-run Tkinter UI that collects config (or passthrough for no-UI)
  • Trigger — what causes the pipeline to run (file sensor, cron schedule, or both)
Trigger fires → load files (if any) → configure (form/config.json) → execute atom
                                        ├→ processed/ + output/     (success)
                                        └→ rejected/ + *.error.txt  (failure)

Pipeline types

File-based (CSV transformation)

Drop files into inbox/. Sensor detects stable files and triggers the pipeline.

name: vlookup_rollnumber
atom: vlookup
form: vlookup_column_picker
min_files: 2

API-based (data ingestion)

Fetch data from REST APIs on a schedule. No inbox files needed.

name: fetch_hr_data
atom: hr_api_fetch
form: passthrough
min_files: 0
env_file: ~/.etlai/secrets.env
requires_env:
  - HR_API_TOKEN
trigger:
  rules:
    - type: schedule
      cron: "0 8 * * *"

Composite (multi-step chains)

Chain multiple atoms. Output of each step feeds into the next.

name: vlookup_then_groupby
min_files: 2
steps:
  - atom: vlookup
    form: vlookup_column_picker
  - atom: groupby
    form: groupby_picker

Shipped atoms

Atom Description
vlookup Left join two CSVs on specified columns with dtype validation
groupby Group by column with count, sorted descending
mock_generate Generate synthetic data from file headers using Faker
api_fetch Generic REST API fetcher (JSON/XML/CSV, field mapping, env-based auth)

Shipped forms

Form Description
vlookup_column_picker Join + output column multi-select with dtype validation
groupby_picker Single column selection
passthrough No UI — reads config.json and passes to atom

Key concepts

Reference folder

reference/ holds permanent data used across runs (lookup tables, previous API snapshots). The framework passes reference file paths to atoms automatically.

Custom data paths

path: ask in a manifest prompts the user (via folder picker) during etlai sync to choose where data folders live. Each pipeline can have its own location.

Credentials

API credentials live in env files outside the project (e.g. ~/.etlai/secrets.env). The framework loads them before atom execution. etlai sync validates required vars are present without printing values.

Adding pipelines with Claude Code

Open your project in Claude Code. The scaffolded CLAUDE.md teaches it to:

  1. Create atoms (or reuse shipped ones)
  2. Create forms (or use passthrough with pre-written config.json)
  3. Write manifest.yaml
  4. Run etlai sync

Resolution order

  • Atoms: ./atoms/<name>.pyetlai.atoms.<name> (package)
  • Forms: ./forms/<name>.pyetlai.forms.<name> (package)

User files take precedence over shipped ones.

Development

git clone <repo>
pip install -e .
etlai init /tmp/test-project
cd /tmp/test-project
etlai run

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

etlai-0.3.4.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

etlai-0.3.4-py3-none-any.whl (34.0 kB view details)

Uploaded Python 3

File details

Details for the file etlai-0.3.4.tar.gz.

File metadata

  • Download URL: etlai-0.3.4.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for etlai-0.3.4.tar.gz
Algorithm Hash digest
SHA256 6b1ad3edd1a0fc94b1d884d14e3f87de29eedc6bcf1e96939fcd780ad510ad74
MD5 9768516492489ca57ff16992c499efbb
BLAKE2b-256 8f11a058fcf11cb5b3fe85fb529c52194b144b3e7c6d2c5e388b65b3ef88ffd0

See more details on using hashes here.

File details

Details for the file etlai-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: etlai-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 34.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for etlai-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 868d06d7ea524b748af0c358d208184ca211abc299652e0617d35a5ecfe49a38
MD5 050edddf7eabcf25eea0d7f461e042ac
BLAKE2b-256 08f943075b1e4a1aadf360a3dbe401a5977ea8e94fd45c1a6cd52baa19e5a9db

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page