serverless-data-mesh 0.2.0__tar.gz → 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/.gitignore +5 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/CHANGELOG.md +26 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/PKG-INFO +6 -3
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/PYPI.md +2 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/README.md +86 -14
- serverless_data_mesh-1.0.0/VERSION +1 -0
- serverless_data_mesh-1.0.0/docs/metadata-driven-pipeline.md +817 -0
- serverless_data_mesh-1.0.0/examples/contracts/payments.mesh.pipeline.yaml +48 -0
- serverless_data_mesh-1.0.0/examples/medallion-e2e/README.md +181 -0
- serverless_data_mesh-1.0.0/examples/medallion-e2e/northstar.mesh.yaml +135 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/README.md +274 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/compile_all.py +44 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/customers.mesh.pipeline.yaml +32 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/inventory.mesh.pipeline.yaml +34 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/orders.mesh.pipeline.yaml +58 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/payments.mesh.pipeline.yaml +36 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/contracts/shipping.mesh.pipeline.yaml +33 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/mesh-registry.yaml +63 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/mesh-transactions/daily-close.yaml +26 -0
- serverless_data_mesh-1.0.0/examples/retail-mesh/spark/orders_readers.example.py +67 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/README.md +34 -1
- serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/main.tf +115 -0
- serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/outputs.tf +28 -0
- serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/terraform.tfvars.example +21 -0
- serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/variables.tf +100 -0
- serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion/versions.tf +10 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/main.tf +20 -5
- serverless_data_mesh-1.0.0/infrastructure/terraform/environments/prod/providers.tf +13 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/terraform.tfvars.example +4 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/variables.tf +18 -0
- serverless_data_mesh-1.0.0/infrastructure/terraform/modules/medallion-mesh/main.tf +85 -0
- serverless_data_mesh-1.0.0/infrastructure/terraform/modules/medallion-mesh/outputs.tf +7 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/pyproject.toml +6 -1
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/cli.py +411 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/__init__.py +16 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/contract.py +255 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/emit.py +458 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/from_init.py +35 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/loader.py +60 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/medallion.py +270 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/medallion_emit.py +303 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/medallion_validate.py +54 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/runtime.py +137 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/validate.py +42 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/compile/wizard.py +269 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/scaffold/init_domain.py +25 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/templates/medallion-starter.mesh.yaml +46 -0
- serverless_data_mesh-1.0.0/src/serverless_data_mesh/templates/single-pipeline.mesh.yaml +34 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_cli_scaffold.py +4 -2
- serverless_data_mesh-1.0.0/tests/unit/test_compile.py +73 -0
- serverless_data_mesh-1.0.0/tests/unit/test_medallion.py +50 -0
- serverless_data_mesh-1.0.0/tests/unit/test_wizard.py +50 -0
- serverless_data_mesh-0.2.0/VERSION +0 -1
- serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/orders/handler.py +0 -22
- serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/payments/handler.py +0 -22
- serverless_data_mesh-0.2.0/src/serverless_data_mesh/cli.py +0 -165
- serverless_data_mesh-0.2.0/src/serverless_data_mesh/scaffold/init_domain.py +0 -210
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/LICENSE +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/README.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/results/2026-06-baseline.json +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/run_benchmark.sh +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/run_cost_estimate.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/workloads/100k_rows.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/workloads/10m_rows.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/benchmarks/workloads/1m_rows.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/architecture.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/blog-the-vaquar-pattern.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/data-mesh-end-to-end.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/data-mesh-patterns.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/deployment.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/domain-contracts.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/getting-started.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/glue-connector.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/lambda-execution-flow.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/serverless-data-mesh-hero.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/three-account-data-mesh.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/vaquar-pattern-blog-hero.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/vaquar-pattern-e2e-journey.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/vaquar-pattern-invariant.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/why-sdm-four-phase-connectivity.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/why-sdm-hero-connectivity.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/images/why-sdm-trust-gap.png +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/mesh-trust-dashboard.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/pypi.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/sparkrules-connector.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/terraform-guide.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/vaquar-pattern.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/docs/why-serverless-data-mesh.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/README.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/handler.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/io.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/rules_io.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/spark_io.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/domain_writer/workload.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/multi-domain-orders-payments/README.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/multi-domain-orders-payments/coordinator_config.yaml +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/multi-domain-orders-payments/test_atomicity.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/tutorials/README.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/tutorials/verification_gate_demo.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/examples/tutorials/walkthrough.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/grafana/mesh-trust-dashboard.json +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/sam/README.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/sam/template.yaml +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/dev/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/dev/terraform.tfvars.example +0 -0
- {serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod → serverless_data_mesh-1.0.0/infrastructure/terraform/environments/medallion}/providers.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/README.md +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/producer/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/producer/terraform.tfvars.example +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/publisher/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/publisher/terraform.tfvars.example +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/steward/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/multi-account/steward/terraform.tfvars.example +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/environments/prod/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/variables.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/eventbridge/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/governance/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/governance/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/variables.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/iam/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/variables.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/lambda/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/variables.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/messaging/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/dashboard.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/variables.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/monitoring/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/state_machine.asl.json.tpl +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/variables.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/stepfunctions/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/main.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/outputs.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/variables.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/modules/storage/versions.tf +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/scripts/package_lambda.ps1 +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/infrastructure/terraform/scripts/package_lambda.sh +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/catalog/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/catalog/glue_connector.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/catalog/glue_rest.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/config.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/dashboard/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/dashboard/cloudwatch.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/dashboard/trust.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/exceptions.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/governance/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/governance/consumer_sla.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/lineage/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/lineage/openlineage.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/local/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/local/runtime.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/metrics/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/metrics/mesh_trust.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/canary.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/coordinator.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/durable_steps.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/reprocess.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/orchestration/state.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/py.typed +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/rules/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/rules/sparkrules_connector.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/scaffold/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/types/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/types/workload.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/backend.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/fallback.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/src/serverless_data_mesh/verification/vrp.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/conftest.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/eval/test_consumer_safety.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/__init__.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_auto_repair_demo.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_canary.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_catalog.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_config.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_consumer_sla.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_example_workload.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_fallback_verifier.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_local_runtime.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_openlineage.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_reprocess.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_sparkrules_connector.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_types.py +0 -0
- {serverless_data_mesh-0.2.0 → serverless_data_mesh-1.0.0}/tests/unit/test_verification.py +0 -0
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [1.0.0] - 2026-06-14
|
|
8
|
+
|
|
9
|
+
Production release: metadata-driven medallion mesh, zero-friction CLI, and Terraform deploy path.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Metadata-driven pipeline compiler** (`serverless-data-mesh compile`)
|
|
14
|
+
- `sdm/v1` `DataProductPipeline` and `MedallionMesh` YAML contract models
|
|
15
|
+
- Generated artifacts: handler, readers stub, pipeline_config, Step Functions, EventBridge, tests
|
|
16
|
+
- `serverless_data_mesh.compile.runtime.run_metadata_pipeline`
|
|
17
|
+
- Example contract: `examples/contracts/payments.mesh.pipeline.yaml`
|
|
18
|
+
- **Real-world retail ETL walkthrough**: `examples/retail-mesh/` (5 pipelines, PySpark on Lambda)
|
|
19
|
+
- **Medallion E2E mesh**: `examples/medallion-e2e/` — one YAML → bronze/silver/gold for all domains
|
|
20
|
+
- **Complete metadata guide**: `docs/metadata-driven-pipeline.md` — full schema, deploy, CI/CD
|
|
21
|
+
- **Zero-friction CLI**: `new`, `apply`, `validate`, `doctor` — YAML to full mesh in 2 commands
|
|
22
|
+
- **Terraform medallion-mesh module** and `environments/medallion/` stack
|
|
23
|
+
- Prod stack: mesh trust dashboard domains, optional Lake Formation governance module
|
|
24
|
+
- Dependency: `pyyaml>=6`
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- `serverless-data-mesh init` now uses the compile pipeline (outputs `mesh.pipeline.yaml`)
|
|
29
|
+
- PyPI classifier: **Production/Stable**
|
|
30
|
+
|
|
5
31
|
## [0.2.0] - 2026-06-15
|
|
6
32
|
|
|
7
33
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: serverless-data-mesh
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Federated data mesh framework for proof-gated, exactly-once Iceberg data product publication on AWS Lambda.
|
|
5
5
|
Project-URL: Homepage, https://github.com/vaquarkhan/aws-serverless-datamesh-framework
|
|
6
6
|
Project-URL: Documentation, https://github.com/vaquarkhan/aws-serverless-datamesh-framework#readme
|
|
@@ -10,8 +10,8 @@ Project-URL: PyPI, https://pypi.org/project/serverless-data-mesh/
|
|
|
10
10
|
Author: Serverless Data Mesh Contributors
|
|
11
11
|
License-Expression: Apache-2.0
|
|
12
12
|
License-File: LICENSE
|
|
13
|
-
Keywords: aws,data-as-a-product,data-mesh,domain-oriented,durable-execution,federated-data-mesh,federated-governance,iceberg,iceguard,lakehouse,lambda,pyiceberg,rule-engine,serverless,sparkrules,vaquar-pattern,veridata-recon
|
|
14
|
-
Classifier: Development Status ::
|
|
13
|
+
Keywords: aws,bronze-silver-gold,data-as-a-product,data-mesh,domain-oriented,durable-execution,etl,federated-data-mesh,federated-governance,iceberg,iceguard,lakehouse,lambda,medallion,metadata-driven,pyiceberg,rule-engine,serverless,sparkrules,vaquar-pattern,veridata-recon
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
@@ -27,6 +27,7 @@ Requires-Dist: aws-durable-execution-sdk-python>=1.0.0
|
|
|
27
27
|
Requires-Dist: boto3>=1.34
|
|
28
28
|
Requires-Dist: iceguard>=1.0.0
|
|
29
29
|
Requires-Dist: pyiceberg[glue,rest-sigv4]>=0.7.0
|
|
30
|
+
Requires-Dist: pyyaml>=6
|
|
30
31
|
Requires-Dist: veridata-recon>=0.1.0
|
|
31
32
|
Provides-Extra: all
|
|
32
33
|
Requires-Dist: pyspark>=3.5.0; extra == 'all'
|
|
@@ -66,6 +67,8 @@ Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-d
|
|
|
66
67
|
```bash
|
|
67
68
|
pip install serverless-data-mesh
|
|
68
69
|
serverless-data-mesh demo # <60s local PVDM demo, no AWS
|
|
70
|
+
serverless-data-mesh new --template medallion --output my-mesh
|
|
71
|
+
serverless-data-mesh apply --contract my-mesh/mesh.yaml --output my-mesh/generated
|
|
69
72
|
pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
|
|
70
73
|
pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
|
|
71
74
|
pip install "serverless-data-mesh[all]" # rules + spark
|
|
@@ -15,6 +15,8 @@ Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-d
|
|
|
15
15
|
```bash
|
|
16
16
|
pip install serverless-data-mesh
|
|
17
17
|
serverless-data-mesh demo # <60s local PVDM demo, no AWS
|
|
18
|
+
serverless-data-mesh new --template medallion --output my-mesh
|
|
19
|
+
serverless-data-mesh apply --contract my-mesh/mesh.yaml --output my-mesh/generated
|
|
18
20
|
pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
|
|
19
21
|
pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
|
|
20
22
|
pip install "serverless-data-mesh[all]" # rules + spark
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
**Governed, exactly-once lakehouse writes on AWS Lambda - with cryptographic proof, not just green job logs.**
|
|
6
6
|
|
|
7
7
|
[](https://www.python.org/downloads/)
|
|
8
|
+
[](https://pypi.org/project/serverless-data-mesh/)
|
|
8
9
|
[](LICENSE)
|
|
9
10
|
[](https://docs.aws.amazon.com/lambda/)
|
|
10
11
|
[](https://iceberg.apache.org/)
|
|
@@ -17,7 +18,7 @@ An open Python framework for **federated data mesh** lakehouse publication on AW
|
|
|
17
18
|
**domain-oriented ownership**, **data as a product**, and **self-serve write infrastructure** for cross-domain teams.<br/>
|
|
18
19
|
**Producer** domains publish governed **data products** · **Steward** notaries enforce **federated computational governance** · **Publisher** zones expose consumer-ready **Iceberg data products** to the mesh.
|
|
19
20
|
|
|
20
|
-
[**Vaquar Pattern blog**](docs/blog-the-vaquar-pattern.md) · [**Vaquar Pattern spec**](docs/vaquar-pattern.md) · [**Why it exists**](docs/why-serverless-data-mesh.md) · [**Getting started**](docs/getting-started.md) · [**Deploy**](infrastructure/terraform/README.md)
|
|
21
|
+
[**PyPI**](https://pypi.org/project/serverless-data-mesh/) · [**Vaquar Pattern blog**](docs/blog-the-vaquar-pattern.md) · [**Vaquar Pattern spec**](docs/vaquar-pattern.md) · [**Why it exists**](docs/why-serverless-data-mesh.md) · [**Getting started**](docs/getting-started.md) · [**Deploy**](infrastructure/terraform/README.md)
|
|
21
22
|
|
|
22
23
|
</div>
|
|
23
24
|
|
|
@@ -215,13 +216,61 @@ Lambda :live (15-min segments, up to 90+ min total)
|
|
|
215
216
|
|
|
216
217
|
### Try in 60 seconds (no AWS)
|
|
217
218
|
|
|
218
|
-
Works on **Windows, Mac, and Linux**
|
|
219
|
+
Works on **Windows, Mac, and Linux** — pure-Python verifier fallback when Rust wheels unavailable.
|
|
219
220
|
|
|
220
221
|
```bash
|
|
221
222
|
pip install serverless-data-mesh
|
|
222
223
|
serverless-data-mesh demo
|
|
223
224
|
```
|
|
224
225
|
|
|
226
|
+
### Install from PyPI
|
|
227
|
+
|
|
228
|
+
**Package:** [`serverless-data-mesh`](https://pypi.org/project/serverless-data-mesh/) · **Requires Python 3.12+** · **Latest:** [1.0.0](https://pypi.org/project/serverless-data-mesh/1.0.0/)
|
|
229
|
+
|
|
230
|
+
| | Link |
|
|
231
|
+
|---|------|
|
|
232
|
+
| **PyPI project** | https://pypi.org/project/serverless-data-mesh/ |
|
|
233
|
+
| **Download files (1.0.0)** | https://pypi.org/project/serverless-data-mesh/1.0.0/#files |
|
|
234
|
+
|
|
235
|
+
**Recommended install (pip):**
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# Latest release
|
|
239
|
+
pip install serverless-data-mesh
|
|
240
|
+
|
|
241
|
+
# Pin a version (recommended for production)
|
|
242
|
+
pip install serverless-data-mesh==1.0.0
|
|
243
|
+
|
|
244
|
+
# Upgrade
|
|
245
|
+
pip install -U serverless-data-mesh
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
| Extra | Install command | What you get |
|
|
249
|
+
|-------|-----------------|--------------|
|
|
250
|
+
| *(core)* | `pip install serverless-data-mesh` | IceGuard, veridata-recon, Durable SDK, PyIceberg Glue REST, boto3 |
|
|
251
|
+
| `[rules]` | `pip install "serverless-data-mesh[rules]"` | + [SparkRules](https://pypi.org/project/sparkrules/) DRL on Lambda |
|
|
252
|
+
| `[spark]` | `pip install "serverless-data-mesh[spark]"` | + PySpark + SparkRules (large Lambda package) |
|
|
253
|
+
| `[all]` | `pip install "serverless-data-mesh[all]"` | rules + spark |
|
|
254
|
+
| `[dev]` | `pip install "serverless-data-mesh[dev]"` | pytest, ruff, pre-commit (contributors) |
|
|
255
|
+
|
|
256
|
+
**Verify install:**
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
python -c "import serverless_data_mesh as sdm; print(sdm.__version__)"
|
|
260
|
+
serverless-data-mesh demo # local PVDM gate demo (<60s, no AWS)
|
|
261
|
+
serverless-data-mesh init --help # minimal contract → full pipeline
|
|
262
|
+
serverless-data-mesh compile --contract mesh.pipeline.yaml --output domains/
|
|
263
|
+
serverless-data-mesh dashboard # mesh trust dashboard HTML
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**Platform notes:**
|
|
267
|
+
|
|
268
|
+
- **Linux (Lambda / CI):** full cryptographic VRP via `veridata-recon` wheels.
|
|
269
|
+
- **Windows / Mac (local dev):** `demo`, `canary`, and `reprocess-demo` work via pure-Python fallback when Rust wheels are unavailable.
|
|
270
|
+
- **AWS deploy:** build a Linux-compatible Lambda zip with `infrastructure/terraform/scripts/package_lambda.sh` (see [PyPI guide](docs/pypi.md)).
|
|
271
|
+
|
|
272
|
+
→ Full install, extras, and publish docs: [docs/pypi.md](docs/pypi.md)
|
|
273
|
+
|
|
225
274
|
### Cost comparison (published estimates)
|
|
226
275
|
|
|
227
276
|
| Workload | Lambda+PVDM | Glue ETL | Savings |
|
|
@@ -232,10 +281,36 @@ serverless-data-mesh demo
|
|
|
232
281
|
|
|
233
282
|
Details: [benchmarks/README.md](benchmarks/README.md) · `make cost-estimate`
|
|
234
283
|
|
|
235
|
-
### Scaffold a
|
|
284
|
+
### Scaffold or compile a pipeline (30 seconds)
|
|
285
|
+
|
|
286
|
+
**From YAML contract (recommended):**
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
serverless-data-mesh compile \
|
|
290
|
+
--contract examples/contracts/payments.mesh.pipeline.yaml \
|
|
291
|
+
--output domains/
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Quick init (minimal contract):**
|
|
236
295
|
|
|
237
296
|
```bash
|
|
238
297
|
serverless-data-mesh init --domain payments --table fact_payments --account 123456789012
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Generates handler, Step Functions ASL, EventBridge schedule, consumer SLA, Terraform stubs, and tests from `mesh.pipeline.yaml`. Domain teams only implement `readers.py`.
|
|
301
|
+
|
|
302
|
+
**Full medallion mesh (bronze → silver → gold) — one YAML, all pipelines:**
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
serverless-data-mesh new --template northstar --output my-mesh
|
|
306
|
+
serverless-data-mesh apply --contract my-mesh/mesh.yaml --output my-mesh/generated
|
|
307
|
+
# → 6 PVDM pipelines + domain + mesh orchestrators (orders + payments)
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
→ [Medallion E2E guide](examples/medallion-e2e/README.md)
|
|
311
|
+
→ [Metadata-driven pipeline guide](docs/metadata-driven-pipeline.md)
|
|
312
|
+
|
|
313
|
+
```bash
|
|
239
314
|
serverless-data-mesh dashboard # HTML trust dashboard (proofs / CloudWatch / demo)
|
|
240
315
|
serverless-data-mesh dashboard --cloudwatch # live VRP metrics from CloudWatch
|
|
241
316
|
serverless-data-mesh canary # VRP canary before promotion
|
|
@@ -260,16 +335,6 @@ make walkthrough # 12-step tutorial (no AWS)
|
|
|
260
335
|
make benchmark # consumer safety: corrupt data never commits
|
|
261
336
|
```
|
|
262
337
|
|
|
263
|
-
### Install from PyPI
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
pip install serverless-data-mesh
|
|
267
|
-
pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
|
|
268
|
-
pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
→ [PyPI guide](docs/pypi.md)
|
|
272
|
-
|
|
273
338
|
### Minimal code example
|
|
274
339
|
|
|
275
340
|
```python
|
|
@@ -326,6 +391,9 @@ terraform init && terraform apply
|
|
|
326
391
|
|
|
327
392
|
| Document | What you will learn |
|
|
328
393
|
|----------|---------------------|
|
|
394
|
+
| **[Metadata-driven pipelines](docs/metadata-driven-pipeline.md)** | **Complete guide: YAML schema, bronze/silver/gold, compile, deploy** |
|
|
395
|
+
| **[Medallion E2E example](examples/medallion-e2e/README.md)** | One YAML → 6 pipelines + orchestrators |
|
|
396
|
+
| **[Retail flat ETL example](examples/retail-mesh/README.md)** | 5 domain pipelines, PySpark on Lambda |
|
|
329
397
|
| **[Vaquar Pattern blog](docs/blog-the-vaquar-pattern.md)** | **Full article: images, E2E journey, adoption playbook** |
|
|
330
398
|
| **[Vaquar Pattern spec](docs/vaquar-pattern.md)** | Formal spec - cite this in architecture docs |
|
|
331
399
|
| **[Why Serverless Data Mesh](docs/why-serverless-data-mesh.md)** | Blog: industry problem, connectivity, portfolio stack |
|
|
@@ -345,6 +413,7 @@ terraform init && terraform apply
|
|
|
345
413
|
```
|
|
346
414
|
serverless-data-mesh/
|
|
347
415
|
├── docs/
|
|
416
|
+
│ ├── metadata-driven-pipeline.md # Complete YAML → pipeline guide (medallion)
|
|
348
417
|
│ ├── blog-the-vaquar-pattern.md # Full Vaquar Pattern blog (images, E2E)
|
|
349
418
|
│ ├── vaquar-pattern.md # Formal pattern spec (cite this)
|
|
350
419
|
│ ├── why-serverless-data-mesh.md # Blog article with diagrams
|
|
@@ -352,6 +421,9 @@ serverless-data-mesh/
|
|
|
352
421
|
│ ├── data-mesh-patterns.md # Pattern catalog + coverage matrix
|
|
353
422
|
│ └── images/ # Architecture and product diagrams
|
|
354
423
|
├── examples/
|
|
424
|
+
│ ├── medallion-e2e/ # One YAML → bronze/silver/gold mesh
|
|
425
|
+
│ ├── retail-mesh/ # Flat pipelines real-world ETL
|
|
426
|
+
│ ├── contracts/ # Single DataProductPipeline samples
|
|
355
427
|
│ ├── domain_writer/ # Reference Lambda handler
|
|
356
428
|
│ └── tutorials/ # Interactive walkthrough
|
|
357
429
|
├── infrastructure/
|
|
@@ -402,7 +474,7 @@ Apache-2.0. See [LICENSE](LICENSE).
|
|
|
402
474
|
|
|
403
475
|
<div align="center">
|
|
404
476
|
|
|
405
|
-
**Serverless Data Mesh** · [Vaquar Pattern blog](docs/blog-the-vaquar-pattern.md) · [GitHub](https://github.com/vaquarkhan/aws-serverless-datamesh-framework)
|
|
477
|
+
**Serverless Data Mesh** · [PyPI](https://pypi.org/project/serverless-data-mesh/) · [Vaquar Pattern blog](docs/blog-the-vaquar-pattern.md) · [GitHub](https://github.com/vaquarkhan/aws-serverless-datamesh-framework)
|
|
406
478
|
|
|
407
479
|
*Domain teams own the write path. The mesh proves correctness before consumers see a snapshot.*
|
|
408
480
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.0
|