Skip to main content

Engine-agnostic medallion pipelines built on ETLantic.

Project description

Medallantic

Engine-agnostic medallion pipelines built on ETLantic.

Medallantic owns bronze/silver/gold authoring and conventions. ETLantic owns the portable contracts, graph, validation, planning, execution lifecycle, and plugin coordination underneath it. ETLantic core never gains medallion types.

The current release is the renamed SparkForge migration adapter. It maps SparkForge IR onto ordinary ETLantic Extract / Step / Load, Profile, RunSelection / RunIntent, and PipelineRunReport surfaces. A native engine-agnostic builder and live Spark/SQL parity are planned; see the roadmap.

Documentation:

Install

pip install 'etlantic==0.27.0' 'medallantic==0.27.0'
# or
pip install 'etlantic[medallantic]'

The shipped adapter is IR-only: feed SparkForgePipelineSpec (JSON/YAML fixtures or hand-built dataclasses). There is no live pipeline_builder / SparkForge Python API bridge in this release.

The adapter is registered explicitly by importing medallantic and calling its conversion helpers. The adapted result supplies an ordinary ETLantic pipeline and profile; select execution plugins such as Profile.spark_engine="pyspark" separately. Production profiles must allowlist every trusted execution plugin.

Quick start (IR → Pipeline)

from medallantic import (
    SparkForgePipelineSpec,
    SparkForgeStepSpec,
    StepKind,
    LayerKind,
    adapt_pipeline,
    debug_request_from_sparkforge,
    enrich_plan,
)
from etlantic.plan import plan_pipeline

spec = SparkForgePipelineSpec(
    name="ecommerce",
    schema="demo",
    steps=(
        SparkForgeStepSpec(
            name="orders",
            kind=StepKind.BRONZE_RULES,
            layer=LayerKind.BRONZE,
            table_name="bronze_orders",
        ),
        SparkForgeStepSpec(
            name="clean_orders",
            kind=StepKind.SILVER_TRANSFORM,
            layer=LayerKind.SILVER,
            source="orders",
            table_name="silver_orders",
            write_mode="overwrite",
        ),
    ),
)
adapted = adapt_pipeline(spec)
adapted.pipeline_cls.validate(profile=adapted.profile)
plan = enrich_plan(
    plan_pipeline(adapted.pipeline_cls, profile=adapted.profile),
    adapted,
)
request = debug_request_from_sparkforge(mode="incremental", skip_writes=True)

Delivery direction

  1. Plan-only — generate/inspect ETLantic plans from SparkForge IR (strict_delta=False to warn instead of fail when Delta caps are unknown)
  2. Dual reportingadapt_run_resultPipelineRunReport
  3. ETLantic planning — selections/intents via debug_request_from_sparkforge
  4. Plugin executionProfile.spark_engine="pyspark" / SQL plugins
  5. Native facade — Medallantic owns medallion authoring and retires the duplicated legacy engine-specific builders

transform_ref / bronze rules emit PMSF411 warnings: the adapter builds passthrough transforms for planning parity; it does not execute SparkForge callables. Write intents (including MERGE) are attached via enrich_plan for orchestration; the local runtime still gates materialization with RunRequest.no_write.

See docs/11_DEVELOPMENT/MIGRATION_0_9_TO_0_10.md.

Boundary

Concern Owner
bronze / silver / gold APIs Medallantic
portable graph, plan, reports ETLantic
legacy mapping + parity fixtures Medallantic migration layer
physical execution ETLantic engine and storage plugins

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

medallantic-0.27.0.tar.gz (26.8 kB view details)

Uploaded Source

Built Distribution

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

medallantic-0.27.0-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file medallantic-0.27.0.tar.gz.

File metadata

  • Download URL: medallantic-0.27.0.tar.gz
  • Upload date:
  • Size: 26.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for medallantic-0.27.0.tar.gz
Algorithm Hash digest
SHA256 d7413b741e9958fe45f45e451d390fa5422a707dac175a5f23c9e510d295b157
MD5 5c7fc34a13631f1eee2899db8325b723
BLAKE2b-256 acb82faf607992070f129092ca288b01094056831f4836cfcaff46169d9a2636

See more details on using hashes here.

File details

Details for the file medallantic-0.27.0-py3-none-any.whl.

File metadata

  • Download URL: medallantic-0.27.0-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for medallantic-0.27.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5ecddc8f5175cc4cd199e4ab7d30cc5f464138961b1e55821097762e7b3b6c9f
MD5 dac27a2d0b7ffa959825ea68b3a4e5cc
BLAKE2b-256 bf39756c331e343e3d1dae62e913a390f82550145f5fc7430fc24760d9c9d37d

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