Migration 0.15 → 0.16¶
Status: required for ETLantic 0.16 Gate A (authoring vocabulary cleanup).
Summary¶
ETLantic 0.16 removes the public 0.15 compatibility aliases for pipeline authoring. Prefer these names immediately:
| Removed in 0.16 | Use instead |
|---|---|
Source[T] |
Extract[T] |
Sink[T] |
Load[T] |
binding= on Extract/Load |
asset= |
.binding property |
.asset |
Profile(bindings=...) |
Profile(assets=...) |
Mirrored profile JSON "bindings" |
Prefer "assets" (writes emit assets only) |
RunRequest(binding_overrides=...) |
RunRequest(asset_overrides=...) |
Constructing or importing the removed authoring surfaces fails with a clear
TypeError / ImportError pointing at this guide.
Wire names that stay¶
Plan, DPCS, and plugin protocols keep these names:
NodeKindvalues"source"/"sink"- Plan node field
bindingand plan mapbindings - Profile plan snapshot shape still uses
"bindings"(fingerprint-stable) - DPCS
etlantic:binding - Storage plugin APIs
read/write(binding=...) - Port wiring
Step.bindings/SubpipelineInstance.bindings
Do not rename those when migrating application code.
Before / after¶
# 0.15 (removed)
from etlantic import Pipeline, Sink, Source
class CustomerPipeline(Pipeline):
raw: Source[RawCustomer] = Source(binding="customer_source")
curated: Sink[Customer] = Sink(input=normalized.result, binding="customer_sink")
profile = Profile(name="dev", bindings={"customer_source": "memory"})
# 0.16
from etlantic import Extract, Load, Pipeline
class CustomerPipeline(Pipeline):
raw: Extract[RawCustomer] = Extract(asset="customer_source")
curated: Load[Customer] = Load(input=normalized.result, asset="customer_sink")
profile = Profile(name="dev", assets={"customer_source": "memory"})
Profile JSON¶
Profile.to_dict() / write_profile emit "assets" only. Loading still accepts
legacy "bindings" keys so saved 0.15 profile files continue to open; rewrite
them with assets when convenient.
Plan fingerprints still serialize profile_snapshot.bindings only.
Prefect (Gate B)¶
Optional etlantic-prefect is independent of this vocabulary cleanup. See
ROADMAP §0.16
and the
Local Scheduler and Prefect Integration Plan.
Checklist¶
-
Source/Sinkpublic classes and exports -
binding=constructor kwargs on Extract/Load - Public
.bindingproperty on Extract/Load -
Profile(bindings=...)authoring path and mirrored JSONbindingsemission -
RunRequest.binding_overridesauthoring path - Compatibility helpers in
_compat.py - Docs and examples use
Extract/Load/asset=