Local Python¶
Status: Available. Process-local execution of a
PipelinePlanwith registered Python and dataframe implementations.
The local runtime executes validated Pipeline Plans in-process. It is the reference execution environment for development, testing, experimentation, and CI.
It is not a multi-tenant production orchestrator. Prefer an external
scheduler such as Airflow (etlantic-airflow compile target) when you need
durable scheduling, cross-process isolation, or fleet-scale coordination.
Known limitations¶
- Run reports and the default report store are process-scoped
- In-memory storage does not survive process restart
- No multi-tenant artifact isolation between concurrent apps in one process
- Alpha: APIs may change in 0.x releases
Goals¶
The local runtime should:
- Execute Pipeline Plans without external infrastructure
- Preserve DPCS semantics
- Support synchronous and asynchronous implementations
- Provide deterministic execution for a given plan and bindings
- Serve as the reference execution backend
- Enable rapid local development
Philosophy¶
Local execution should never bypass the ETLantic lifecycle.
Unlike orchestration platforms, Local Python requires no external scheduler. It executes the same Pipeline Plan while preserving identical pipeline semantics.
The only difference between local execution and orchestration is the execution plugin.
Why Local Execution?¶
Local execution is useful for:
- Unit testing
- Integration testing
- Interactive development
- Jupyter notebooks
- Command-line tools
- CI pipelines
Developers can validate pipeline behavior before deploying to larger execution platforms.
Execution Model¶
The Local Python plugin executes steps according to the dependency graph.
Execution preserves:
- Step ordering
- Parallel opportunities
- Failure semantics
- Retry policies
- Callback behavior
- Resource lifecycles
The implementation should never change observable pipeline behavior.
Sync and Async¶
The Local Python plugin supports both:
and
ETLantic automatically invokes the correct implementation style.
Developers should not manage event loops directly.
Concurrency¶
Where possible, the plugin may execute independent branches concurrently.
Concurrency should always respect:
- Dependency ordering
- Resource constraints
- Failure semantics
- Callback ordering
Optimization must never alter pipeline meaning.
Resources¶
The Local Python plugin coordinates:
- Resource plugins
- Storage plugins
- Dataframe plugins
- Callback execution
It acquires resources during execution and releases them when no longer needed.
Diagnostics¶
The plugin should emit structured execution events including:
- Pipeline started
- Step started
- Step completed
- Step failed
- Retry
- Pipeline completed
Events should reference stable pipeline and step identities.
Relationship to Other Plugins¶
Local execution is one orchestration backend among many.
The same Pipeline Plan may also execute using:
- Airflow (
etlantic-airflowcompile target) - Future orchestration plugins (Dagster, Prefect)
Observable pipeline semantics should remain identical.
Best Practices¶
- Use Local Python during development.
- Validate before execution.
- Test pipelines locally before deployment.
- Keep execution profiles environment-specific.
- Preserve deterministic behavior.
Anti-Patterns¶
Avoid:
- Executing Python pipeline definitions directly.
- Skipping validation or planning.
- Embedding local-only behavior into pipeline contracts.
- Treating Local Python as a separate execution model.
Key Principle¶
Local Python is the reference execution backend for ETLantic. It executes validated Pipeline Plans directly within Python while preserving the same portable semantics expected from every orchestration plugin.
Next Step¶
Continue with Compilation to compare direct local execution with generation of backend-specific artifacts.