dataenginex 0.4.1__tar.gz → 0.4.2__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.
- {dataenginex-0.4.1 → dataenginex-0.4.2}/CHANGELOG.md +12 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/PKG-INFO +3 -1
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/development.md +6 -24
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/index.md +2 -0
- dataenginex-0.4.2/docs/observability.md +61 -0
- dataenginex-0.4.2/docs/release-notes.md +94 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/ecommerce/run_all.py +144 -101
- {dataenginex-0.4.1 → dataenginex-0.4.2}/pyproject.toml +3 -1
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/__init__.py +1 -1
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/runtime/sandbox.py +8 -2
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/config/loader.py +17 -6
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/config/schema.py +14 -7
- dataenginex-0.4.2/src/dataenginex/config/settings.py +127 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/__init__.py +3 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/delta.py +1 -1
- dataenginex-0.4.2/src/dataenginex/data/connectors/http.py +191 -0
- dataenginex-0.4.2/src/dataenginex/data/connectors/rest.py +129 -0
- dataenginex-0.4.2/src/dataenginex/data/connectors/sse.py +168 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/pipeline/runner.py +117 -11
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/quality/gates.py +37 -6
- dataenginex-0.4.2/src/dataenginex/data/transforms/sql.py +347 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/conftest.py +24 -6
- {dataenginex-0.4.1 → dataenginex-0.4.2}/uv.lock +423 -446
- dataenginex-0.4.1/docs/observability.md +0 -798
- dataenginex-0.4.1/docs/release-notes.md +0 -141
- dataenginex-0.4.1/src/dataenginex/data/transforms/sql.py +0 -171
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.claude/commands/new-feature.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.claude/commands/validate.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.claude/settings.json +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.env.template +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/dependabot.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/labels.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/release-pr-template.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/workflows/auto-pr.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/workflows/ci.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/workflows/docs-sync.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/workflows/enforce-dev-to-main.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/workflows/release.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.github/workflows/security.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.gitignore +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.gitleaks.toml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.pre-commit-config.yaml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/.python-version +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/CLAUDE.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/CODEOWNERS +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/CODE_OF_CONDUCT.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/CONTRIBUTING.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/Dockerfile +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/LICENSE +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/README.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/SECURITY.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docker-compose.test.yml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/adr/0000-template.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/adr/0001-medallion-architecture.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/api.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/core.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/data.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/index.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/lakehouse.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/middleware.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/ml.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/plugins.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/api-reference/warehouse.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/architecture.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/ci-cd.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/contributing.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/quickstart.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/sdlc.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/docs/security-scanning.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/01_hello_pipeline.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/02_api_quickstart.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/03_quality_gate.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/04_ml_training.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/05_rag_demo.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/06_llm_quickstart.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/07_api_ingestion.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/08_spark_ml.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/09_feature_engineering.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/10_model_analysis.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/GUIDE.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/dashboard/dashboard_config.yaml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/dashboard/run_dashboard.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/data/events.csv +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/data/users.csv +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/dex.yaml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/ecommerce/data/customers.csv +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/ecommerce/data/orders.csv +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/ecommerce/data/products.csv +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/ecommerce/dex.yaml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/examples/movies.csv +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/poe_tasks.toml +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/scripts/localstack/init.sh +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/README.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/RELEASE_NOTES.md +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/_json.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/agents/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/agents/builtin.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/llm.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/memory/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/memory/base.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/memory/episodic.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/memory/long_term.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/observability/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/observability/audit.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/observability/cost.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/observability/metrics.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/retrieval/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/retrieval/builtin.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/retrieval/graph.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/routing/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/routing/anthropic.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/routing/guarded.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/routing/ollama.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/routing/openai.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/routing/router.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/runtime/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/runtime/checkpoint.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/runtime/executor.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/tools/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/tools/builtin.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/vectorstore.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/workflows/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/workflows/conditions.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/workflows/dag.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ai/workflows/human_loop.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/api/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/api/errors.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/api/pagination.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/api/schemas.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/cli/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/cli/main.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/cli/run.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/cli/secops.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/cli/train.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/config/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/config/defaults.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/exceptions.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/interfaces.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/medallion_architecture.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/quality.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/registry.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/schemas.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/core/validators.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/_utils.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/csv.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/dbt.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/duckdb.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/legacy.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/parquet.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/connectors/spark.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/pipeline/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/pipeline/dag.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/pipeline/run_history.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/profiler.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/quality/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/quality/spark.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/registry.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/data/transforms/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/engine.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/lakehouse/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/lakehouse/catalog.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/lakehouse/partitioning.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/lakehouse/storage.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/middleware/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/middleware/domain_metrics.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/middleware/logging_config.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/middleware/metrics.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/drift.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/features/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/features/builtin.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/metrics.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/mlflow_registry.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/registry.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/serving.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/serving_engine/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/serving_engine/builtin.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/tracking/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/tracking/builtin.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/ml/training.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/orchestration/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/orchestration/builtin.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/orchestration/scheduler.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/plugins/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/plugins/registry.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/py.typed +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/secops/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/secops/audit.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/secops/gate.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/secops/guard.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/secops/masking.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/secops/pii.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/store.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/warehouse/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/warehouse/lineage.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/warehouse/transforms.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/src/dataenginex/worker.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/conformance/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/conformance/test_connector.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/conformance/test_feature_store.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/conformance/test_tracker.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/conformance/test_transform.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/fixtures/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/fixtures/sample_data.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/fixtures/sample_jobs.csv +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/fixtures/sample_jobs.json +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_ai_integration.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_cli_run.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_config_cli.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_lineage_integration.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_ml_integration.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_pipeline_e2e.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_secops_integration.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/integration/test_storage_real.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/load/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/__init__.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_agent_runtime.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_ai_modules.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_api_pagination.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_api_schemas.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_api_validators.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_builtin_agent.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_builtin_feature_store.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_builtin_serving.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_builtin_tracker.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_cli_train.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_config_loader.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_config_schema.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_config_schema_extended.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_core_exceptions.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_core_interfaces.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_core_quality.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_core_registry.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_core_schemas_extended.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_csv_connector.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_data.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_dbt_connector.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_dex_engine.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_dex_store.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_domain_metrics.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_domain_metrics_wiring.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_drift_scheduler.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_duckdb_connector.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_guarded_provider.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_lakehouse.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_llm.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_llm_extended.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_llm_litellm_vllm.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_logging.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_medallion.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_medallion_extended.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_middleware_metrics.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_ml.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_parquet_connector.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_pipeline_dag.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_pipeline_runner.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_plugins.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_privacy_guard_wiring.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_quality_gates.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_quality_spark.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_retriever.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_retriever_graph.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_run_history.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_scheduler.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_secops.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_secops_engine_and_cli.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_secops_guard.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_spark_connector.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_spark_fixtures.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_sql_transforms.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_storage_abstraction.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_vectorstore.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_vectorstore_extended.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_warehouse.py +0 -0
- {dataenginex-0.4.1 → dataenginex-0.4.2}/tests/unit/test_warehouse_transforms.py +0 -0
|
@@ -7,6 +7,18 @@ All notable changes to `dataenginex` will be documented in this file.
|
|
|
7
7
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
8
8
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
9
9
|
|
|
10
|
+
## [0.4.2] - 2026-06-23
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Example scripts refreshed: `08_spark_ml.py`, `09_feature_engineering.py`, `10_model_analysis.py` — demonstrate PySpark ML, feature transforms, and drift detection
|
|
15
|
+
- `docs/release-notes.md` rewritten — cleaned up pre-reset 1.x entries, corrected version history to start from 0.3.5
|
|
16
|
+
- `docs/observability.md` trimmed to library-level content only; HTTP/K8s content moved to `dex-studio/docs/observability.md`
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Version bumped to 0.4.2
|
|
21
|
+
|
|
10
22
|
## [0.4.1] - 2026-06-12
|
|
11
23
|
|
|
12
24
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataenginex
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: DataEngineX — open-source, self-hosted, local-first Data + ML + AI workbench library
|
|
5
5
|
Author-email: Jay <jayapal.myaka99@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -30,9 +30,11 @@ Requires-Dist: click>=8.3.3
|
|
|
30
30
|
Requires-Dist: croniter>=6.2.2
|
|
31
31
|
Requires-Dist: duckdb>=1.5.2
|
|
32
32
|
Requires-Dist: httpx>=0.28.1
|
|
33
|
+
Requires-Dist: msgpack>=1.2.1
|
|
33
34
|
Requires-Dist: orjson>=3.11.0
|
|
34
35
|
Requires-Dist: prometheus-client>=0.25.0
|
|
35
36
|
Requires-Dist: pyarrow>=23.0.1
|
|
37
|
+
Requires-Dist: pydantic-settings>=2.14.2
|
|
36
38
|
Requires-Dist: pydantic>=2.13.4
|
|
37
39
|
Requires-Dist: pyyaml>=6.0.3
|
|
38
40
|
Requires-Dist: structlog>=25.5.0
|
|
@@ -38,13 +38,13 @@ This installs all Python dependencies and configures pre-commit hooks.
|
|
|
38
38
|
```bash
|
|
39
39
|
# 1. Clone repo and create feature branch
|
|
40
40
|
git clone https://github.com/TheDataEngineX/dataenginex.git
|
|
41
|
-
cd
|
|
41
|
+
cd dataenginex
|
|
42
42
|
git checkout -b feat/issue-XXX-description dev
|
|
43
43
|
|
|
44
|
-
#
|
|
44
|
+
# 2. Install Python deps & pre-commit hooks
|
|
45
45
|
uv run poe setup
|
|
46
46
|
|
|
47
|
-
#
|
|
47
|
+
# 3. Verify setup
|
|
48
48
|
uv run poe check-all
|
|
49
49
|
```
|
|
50
50
|
|
|
@@ -53,12 +53,11 @@ All tests and linting should pass. You're ready to develop!
|
|
|
53
53
|
## Project Structure
|
|
54
54
|
|
|
55
55
|
```
|
|
56
|
-
|
|
56
|
+
dataenginex/
|
|
57
57
|
├── src/dataenginex/ # Core framework package
|
|
58
58
|
├── examples/ # Runnable example scripts (01–10)
|
|
59
59
|
├── tests/ # Test suite
|
|
60
60
|
├── docs/ # Documentation
|
|
61
|
-
├── monitoring/ # Local observability stack configs
|
|
62
61
|
├── .github/workflows/ # CI/CD pipelines
|
|
63
62
|
├── pyproject.toml # Project config
|
|
64
63
|
└── poe_tasks.toml # Task definitions
|
|
@@ -160,24 +159,7 @@ uv run poe test-unit
|
|
|
160
159
|
uv run poe check-all
|
|
161
160
|
```
|
|
162
161
|
|
|
163
|
-
###
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
# View application logs
|
|
167
|
-
tail -f logs/app.log
|
|
168
|
-
|
|
169
|
-
# Enable debug logging
|
|
170
|
-
export LOG_LEVEL=DEBUG
|
|
171
|
-
uv run poe dev
|
|
172
|
-
|
|
173
|
-
# Use Python debugger
|
|
174
|
-
python -m pdb examples/02_api_quickstart.py
|
|
175
|
-
|
|
176
|
-
# Prometheus metrics (if running)
|
|
177
|
-
open http://localhost:9090
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## Troubleshooting
|
|
162
|
+
### Troubleshooting
|
|
181
163
|
|
|
182
164
|
| Issue | Solution |
|
|
183
165
|
|-------|----------|
|
|
@@ -198,7 +180,7 @@ uv run poe test # Run all tests
|
|
|
198
180
|
uv run poe test-cov # Tests with coverage report
|
|
199
181
|
uv run poe security # pip-audit vulnerability scan
|
|
200
182
|
uv run poe pre-commit # Run all pre-commit hooks
|
|
201
|
-
uv run poe
|
|
183
|
+
uv run poe docker-up # Run Docker Compose stack
|
|
202
184
|
uv run poe clean # Remove caches and build artifacts
|
|
203
185
|
```
|
|
204
186
|
|
|
@@ -23,4 +23,6 @@ See [Quickstart](quickstart.md) for a full walkthrough with a sample project.
|
|
|
23
23
|
- [Quickstart](quickstart.md) — Get up and running in 5 minutes
|
|
24
24
|
- [Architecture](architecture.md) — Core patterns, module map, design decisions
|
|
25
25
|
- [Development Setup](development.md) — Prerequisites, workflow, troubleshooting
|
|
26
|
+
- [Release Notes](release-notes.md) — Full version history
|
|
27
|
+
- [Observability](observability.md) — Metrics, logging, tracing
|
|
26
28
|
- [Contributing](contributing.md) — How to contribute to the project
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Observability: Metrics, Logging & Tracing
|
|
2
|
+
|
|
3
|
+
**Library-level observability for `dataenginex`.** For application-level monitoring (HTTP middleware, health endpoints, Grafana dashboards), see [dex-studio/docs/observability.md](https://github.com/TheDataEngineX/dex-studio/blob/main/docs/observability.md).
|
|
4
|
+
|
|
5
|
+
## Logging
|
|
6
|
+
|
|
7
|
+
`dataenginex` uses `structlog` for structured logging throughout the library. All loggers are configured by the host application (e.g., dex-studio). The library does not configure handlers itself.
|
|
8
|
+
|
|
9
|
+
### Logging in your application
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
import structlog
|
|
13
|
+
from dataenginex.engine import DexEngine
|
|
14
|
+
|
|
15
|
+
structlog.configure(
|
|
16
|
+
processors=[structlog.dev.ConsoleRenderer()],
|
|
17
|
+
wrapper_class=structlog.make_filtering_bound_logger(20), # INFO
|
|
18
|
+
)
|
|
19
|
+
engine = DexEngine("dex.yaml")
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Metrics
|
|
23
|
+
|
|
24
|
+
Prometheus metrics are exposed via `dataenginex.observability.metrics`:
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
from dataenginex.observability.metrics import (
|
|
28
|
+
HTTP_REQUESTS_TOTAL,
|
|
29
|
+
HTTP_REQUEST_DURATION_SECONDS,
|
|
30
|
+
PIPELINE_RUN_DURATION,
|
|
31
|
+
)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Available library-level metrics
|
|
35
|
+
|
|
36
|
+
| Metric | Type | Description | Labels |
|
|
37
|
+
|--------|------|-------------|--------|
|
|
38
|
+
| `pipeline_run_duration_seconds` | Histogram | Pipeline execution time | pipeline_name, status |
|
|
39
|
+
| `model_prediction_latency_seconds` | Histogram | Model inference time | model_name |
|
|
40
|
+
| `llm_request_duration_seconds` | Histogram | LLM call time | provider, model |
|
|
41
|
+
| `data_connector_rows_read` | Counter | Rows read by source connectors | connector_type |
|
|
42
|
+
|
|
43
|
+
## Tracing
|
|
44
|
+
|
|
45
|
+
OpenTelemetry tracing is available via `dataenginex.tracing`:
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from dataenginex.tracing import get_tracer
|
|
49
|
+
|
|
50
|
+
tracer = get_tracer(__name__)
|
|
51
|
+
|
|
52
|
+
with tracer.start_as_current_span("pipeline_run") as span:
|
|
53
|
+
span.set_attribute("pipeline.name", "ingest")
|
|
54
|
+
engine.run_pipeline("ingest")
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Enable OTLP export:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
export OTLP_ENDPOINT="http://localhost:4317"
|
|
61
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Release Notes
|
|
2
|
+
|
|
3
|
+
## [0.4.2] — 2026-06-23
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Example scripts refreshed: `08_spark_ml.py`, `09_feature_engineering.py`, `10_model_analysis.py` — demonstrate PySpark ML, feature transforms, and drift detection
|
|
8
|
+
- Documentation cleanup across all docs
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Version bumped to 0.4.2
|
|
13
|
+
|
|
14
|
+
### Verification checklist
|
|
15
|
+
|
|
16
|
+
1. `uv run poe lint` — Ruff checks clean
|
|
17
|
+
1. `uv run poe typecheck` — mypy strict, 0 errors
|
|
18
|
+
1. `uv run poe test` — all tests pass
|
|
19
|
+
|
|
20
|
+
______________________________________________________________________
|
|
21
|
+
|
|
22
|
+
## [0.4.1] - 2026-06-12
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- `dataenginex._json` — drop-in `orjson`-backed JSON shim (`dumps`, `loads`, `JSONResponse`) replacing stdlib `json` across the library for ~3–5× serialization throughput
|
|
27
|
+
- `DeltaConnector` — native Delta Lake read/write via `deltalake` (new `delta` optional extra: `pip install "dataenginex[delta]"`)
|
|
28
|
+
- `ml.features.builtin` — built-in feature transformers: `StandardScalerTransform`, `MinMaxScalerTransform`, `OneHotEncoderTransform`, `PolynomialFeaturesTransform`
|
|
29
|
+
- `core.interfaces` — new `Closeable` and `AsyncCloseable` protocols for uniform resource lifecycle
|
|
30
|
+
- `orjson>=3.11.0` and `zstandard>=0.25.0` promoted to core runtime dependencies
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- **Lakehouse storage** (`lakehouse/storage.py`) — full rewrite: unified `LakehouseStorage` with pluggable backends (local, S3, GCS), Zstandard compression throughout, columnar partition pruning
|
|
35
|
+
- **Lakehouse catalog** (`lakehouse/catalog.py`) — catalog entries now carry partition stats and schema fingerprints; `register` / `resolve` API stabilised
|
|
36
|
+
- **ML registry** (`ml/registry.py`) — artifact versioning with aliasing (`promote_alias`), stage transitions (`development` → `staging` → `production`), and metadata search
|
|
37
|
+
- **ML training** (`ml/training.py`) — `TrainingJob` lifecycle management, early-stopping callbacks, cross-validation harness, experiment comparison utilities
|
|
38
|
+
- **Pagination** (`api/pagination.py`) — cursor-based and page-number strategies unified under `PaginationResult`; `paginate_query` helper works with any iterable
|
|
39
|
+
- **Store** (`store.py`) — async-safe DuckDB connection pool, `get_pipeline_runs` and `list_model_artifacts` now return typed dataclasses
|
|
40
|
+
- **SecOps audit** (`secops/audit.py`) — structured audit events with severity levels, retention policy enforcement, export to JSONL
|
|
41
|
+
- **AI runtime** (`ai/runtime/executor.py`) — tool call concurrency limit, timeout per tool, structured error envelopes
|
|
42
|
+
- **Config loader** (`config/loader.py`) — environment variable interpolation (`${VAR}`) and `include:` directive for config composition
|
|
43
|
+
- `zstandard` used for pipeline run history compression reducing on-disk footprint by ~60%
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- `mypy --strict` passes cleanly across all modules after strict type annotation pass
|
|
48
|
+
- `DeltaConnector` and `LakehouseStorage` excluded from coverage thresholds (require live filesystems); coverage gate unchanged for all other modules
|
|
49
|
+
|
|
50
|
+
______________________________________________________________________
|
|
51
|
+
|
|
52
|
+
## [0.4.0] - 2026-02-21
|
|
53
|
+
|
|
54
|
+
> **Scope reset from 1.x.** Versions 1.0.0–1.1.2 were prematurely tagged stable. Resetting to `0.4.0` to honestly reflect pre-1.0 maturity. See [ADR-0007](https://github.com/TheDataEngineX/docs/blob/main/adr/0007-local-first-scope-reset.md) for rationale. The 1.x versions on PyPI are yanked but remain installable by exact pin (`pip install 'dataenginex==1.1.2'`); plain `pip install dataenginex` now resolves to `0.4.0`.
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- Stable `__all__` exports in every subpackage `__init__.py`
|
|
59
|
+
- `from __future__ import annotations` in all public modules
|
|
60
|
+
- Comprehensive module-level docstrings with usage examples
|
|
61
|
+
- New public API exports: `ComponentHealth`, `AuthMiddleware`, `AuthUser`,
|
|
62
|
+
`create_token`, `decode_token`, `BadRequestError`, `NotFoundError`,
|
|
63
|
+
`PaginationMeta`, `RateLimiter`, `RateLimitMiddleware`,
|
|
64
|
+
`ConnectorStatus`, `FetchResult`, `ColumnProfile`, `get_logger`, `get_tracer`
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
|
|
68
|
+
- Reorganized `__all__` in all subpackages for logical grouping
|
|
69
|
+
- Updated package version to 0.4.0
|
|
70
|
+
|
|
71
|
+
______________________________________________________________________
|
|
72
|
+
|
|
73
|
+
## [0.3.5] - 2026-02-13
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
|
|
77
|
+
- Production hardening: structured logging, Prometheus/OTel, health probes
|
|
78
|
+
- Data connectors: `RestConnector`, `FileConnector` with async interface
|
|
79
|
+
- Schema registry with versioned schema management
|
|
80
|
+
- Data profiler with automated dataset statistics
|
|
81
|
+
- Lakehouse catalog, partitioning, and storage backends
|
|
82
|
+
- ML framework: trainer, model registry, drift detection, serving
|
|
83
|
+
- Warehouse transforms and persistent lineage tracking
|
|
84
|
+
- JWT authentication middleware
|
|
85
|
+
- Rate limiting middleware
|
|
86
|
+
- Cursor-based pagination utilities
|
|
87
|
+
- Versioned API router (`/api/v1/`)
|
|
88
|
+
|
|
89
|
+
______________________________________________________________________
|
|
90
|
+
|
|
91
|
+
[0.3.5]: https://github.com/TheDataEngineX/dataenginex/releases/tag/v0.3.5
|
|
92
|
+
[0.4.0]: https://github.com/TheDataEngineX/dataenginex/compare/v0.3.5...v0.4.0
|
|
93
|
+
[0.4.1]: https://github.com/TheDataEngineX/dataenginex/compare/v0.4.0...v0.4.1
|
|
94
|
+
[0.4.2]: https://github.com/TheDataEngineX/dataenginex/compare/v0.4.1...v0.4.2
|