redcliff 0.1.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.
- redcliff-0.1.0/.gitignore +25 -0
- redcliff-0.1.0/PKG-INFO +75 -0
- redcliff-0.1.0/README.md +40 -0
- redcliff-0.1.0/pyproject.toml +67 -0
- redcliff-0.1.0/src/redcliff/__init__.py +43 -0
- redcliff-0.1.0/src/redcliff/cli.py +503 -0
- redcliff-0.1.0/src/redcliff/columns.py +70 -0
- redcliff-0.1.0/src/redcliff/compile.py +470 -0
- redcliff-0.1.0/src/redcliff/dbt.py +263 -0
- redcliff-0.1.0/src/redcliff/diff.py +320 -0
- redcliff-0.1.0/src/redcliff/expect.py +225 -0
- redcliff-0.1.0/src/redcliff/importer.py +569 -0
- redcliff-0.1.0/src/redcliff/informatica.py +689 -0
- redcliff-0.1.0/src/redcliff/lakeflow.py +169 -0
- redcliff-0.1.0/src/redcliff/lineage.py +490 -0
- redcliff-0.1.0/src/redcliff/mcp.py +524 -0
- redcliff-0.1.0/src/redcliff/pipeline.schema.json +555 -0
- redcliff-0.1.0/src/redcliff/powercenter.py +1487 -0
- redcliff-0.1.0/src/redcliff/powercenter_workflow.py +358 -0
- redcliff-0.1.0/src/redcliff/scorecard.py +117 -0
- redcliff-0.1.0/src/redcliff/spec.py +554 -0
- redcliff-0.1.0/src/redcliff/ssis.py +1013 -0
- redcliff-0.1.0/src/redcliff/ssis_expr.py +447 -0
- redcliff-0.1.0/src/redcliff/trace.py +196 -0
- redcliff-0.1.0/src/redcliff/web.py +179 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.venv/
|
|
6
|
+
.pytest_cache/
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
|
|
10
|
+
# Node
|
|
11
|
+
node_modules/
|
|
12
|
+
web/dist/
|
|
13
|
+
|
|
14
|
+
# Spike artifacts
|
|
15
|
+
spikes/**/wheels/
|
|
16
|
+
|
|
17
|
+
# Editors and OS
|
|
18
|
+
.vscode/
|
|
19
|
+
.idea/
|
|
20
|
+
.DS_Store
|
|
21
|
+
|
|
22
|
+
# Vendored by web/scripts/build-engine.mjs
|
|
23
|
+
web/public/pyodide/
|
|
24
|
+
web/public/engine/
|
|
25
|
+
web/public/samples/
|
redcliff-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: redcliff
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Open-source visual pipelines with lineage built in. Legacy ETL in, clean Spark out.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Fullcountr/redcliff
|
|
6
|
+
Project-URL: Playground, https://fullcountr.github.io/redcliff/
|
|
7
|
+
Project-URL: Documentation, https://github.com/Fullcountr/redcliff/tree/main/docs
|
|
8
|
+
Project-URL: Issues, https://github.com/Fullcountr/redcliff/issues
|
|
9
|
+
Author: Harishwar Reddy Korpol
|
|
10
|
+
License-Expression: Apache-2.0
|
|
11
|
+
Keywords: data lineage,data quality,dbt,duckdb,etl,informatica,migration,openlineage,powercenter,pyspark,spark
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Database
|
|
21
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: sqlglot>=30
|
|
24
|
+
Provides-Extra: cli
|
|
25
|
+
Requires-Dist: duckdb>=1.4; extra == 'cli'
|
|
26
|
+
Requires-Dist: pyyaml>=6; extra == 'cli'
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: duckdb>=1.4; extra == 'dev'
|
|
29
|
+
Requires-Dist: jsonschema>=4; extra == 'dev'
|
|
30
|
+
Requires-Dist: pytest>=8; extra == 'dev'
|
|
31
|
+
Requires-Dist: pyyaml>=6; extra == 'dev'
|
|
32
|
+
Provides-Extra: yaml
|
|
33
|
+
Requires-Dist: pyyaml>=6; extra == 'yaml'
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# redcliff
|
|
37
|
+
|
|
38
|
+
The Python engine behind [Redcliff](https://github.com/Fullcountr/redcliff), an open-source visual
|
|
39
|
+
pipeline tool with lineage built in: **legacy ETL in, clean Spark out.**
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
pip install "redcliff[cli]"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- **Import** legacy SQL (11 dialects, BTEQ scripts) and Informatica PowerCenter exports (mappings,
|
|
46
|
+
mapplets, sessions, workflows, parameter files) into a small YAML pipeline spec, with a
|
|
47
|
+
migration scorecard.
|
|
48
|
+
- **Compile** the spec to Spark SQL, PySpark, DuckDB SQL, a dbt project or a Lakeflow
|
|
49
|
+
Declarative Pipeline.
|
|
50
|
+
- **Trace** column-level lineage, a column's blast radius, and the source rows behind any row;
|
|
51
|
+
export OpenLineage.
|
|
52
|
+
- **Check** data quality expectations, **diff** two versions of a pipeline, and let AI agents
|
|
53
|
+
edit specs through an **MCP server** that shows a diff before anything is written.
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
redcliff import job.sql --dialect teradata -o pipeline.yaml
|
|
57
|
+
redcliff import wf_export.xml --params wf.par -o pipeline.yaml --scorecard scorecard.md
|
|
58
|
+
redcliff compile pipeline.yaml --to spark # or pyspark, duckdb, dbt, lakeflow
|
|
59
|
+
redcliff lineage pipeline.yaml --impact orders.status
|
|
60
|
+
redcliff test pipeline.yaml # data quality expectations, in DuckDB
|
|
61
|
+
redcliff run pipeline.yaml --var start_date=2026-09-01
|
|
62
|
+
redcliff diff --git origin/main --data
|
|
63
|
+
redcliff mcp --root .
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The core depends only on [sqlglot](https://github.com/tobymao/sqlglot), so it also runs in the
|
|
67
|
+
browser through Pyodide: try the [playground](https://fullcountr.github.io/redcliff/). The `cli`
|
|
68
|
+
extra adds PyYAML and DuckDB for running pipelines locally.
|
|
69
|
+
|
|
70
|
+
Documentation: [spec](https://github.com/Fullcountr/redcliff/blob/main/docs/spec.md),
|
|
71
|
+
[outputs](https://github.com/Fullcountr/redcliff/blob/main/docs/outputs.md),
|
|
72
|
+
[PowerCenter](https://github.com/Fullcountr/redcliff/blob/main/docs/powercenter.md),
|
|
73
|
+
[pull request bot](https://github.com/Fullcountr/redcliff/blob/main/docs/pr-bot.md),
|
|
74
|
+
[MCP server](https://github.com/Fullcountr/redcliff/blob/main/docs/mcp.md).
|
|
75
|
+
Apache 2.0.
|
redcliff-0.1.0/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# redcliff
|
|
2
|
+
|
|
3
|
+
The Python engine behind [Redcliff](https://github.com/Fullcountr/redcliff), an open-source visual
|
|
4
|
+
pipeline tool with lineage built in: **legacy ETL in, clean Spark out.**
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
pip install "redcliff[cli]"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
- **Import** legacy SQL (11 dialects, BTEQ scripts) and Informatica PowerCenter exports (mappings,
|
|
11
|
+
mapplets, sessions, workflows, parameter files) into a small YAML pipeline spec, with a
|
|
12
|
+
migration scorecard.
|
|
13
|
+
- **Compile** the spec to Spark SQL, PySpark, DuckDB SQL, a dbt project or a Lakeflow
|
|
14
|
+
Declarative Pipeline.
|
|
15
|
+
- **Trace** column-level lineage, a column's blast radius, and the source rows behind any row;
|
|
16
|
+
export OpenLineage.
|
|
17
|
+
- **Check** data quality expectations, **diff** two versions of a pipeline, and let AI agents
|
|
18
|
+
edit specs through an **MCP server** that shows a diff before anything is written.
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
redcliff import job.sql --dialect teradata -o pipeline.yaml
|
|
22
|
+
redcliff import wf_export.xml --params wf.par -o pipeline.yaml --scorecard scorecard.md
|
|
23
|
+
redcliff compile pipeline.yaml --to spark # or pyspark, duckdb, dbt, lakeflow
|
|
24
|
+
redcliff lineage pipeline.yaml --impact orders.status
|
|
25
|
+
redcliff test pipeline.yaml # data quality expectations, in DuckDB
|
|
26
|
+
redcliff run pipeline.yaml --var start_date=2026-09-01
|
|
27
|
+
redcliff diff --git origin/main --data
|
|
28
|
+
redcliff mcp --root .
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The core depends only on [sqlglot](https://github.com/tobymao/sqlglot), so it also runs in the
|
|
32
|
+
browser through Pyodide: try the [playground](https://fullcountr.github.io/redcliff/). The `cli`
|
|
33
|
+
extra adds PyYAML and DuckDB for running pipelines locally.
|
|
34
|
+
|
|
35
|
+
Documentation: [spec](https://github.com/Fullcountr/redcliff/blob/main/docs/spec.md),
|
|
36
|
+
[outputs](https://github.com/Fullcountr/redcliff/blob/main/docs/outputs.md),
|
|
37
|
+
[PowerCenter](https://github.com/Fullcountr/redcliff/blob/main/docs/powercenter.md),
|
|
38
|
+
[pull request bot](https://github.com/Fullcountr/redcliff/blob/main/docs/pr-bot.md),
|
|
39
|
+
[MCP server](https://github.com/Fullcountr/redcliff/blob/main/docs/mcp.md).
|
|
40
|
+
Apache 2.0.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "redcliff"
|
|
7
|
+
dynamic = ["version"]
|
|
8
|
+
description = "Open-source visual pipelines with lineage built in. Legacy ETL in, clean Spark out."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = "Apache-2.0"
|
|
11
|
+
requires-python = ">=3.11"
|
|
12
|
+
authors = [{ name = "Harishwar Reddy Korpol" }]
|
|
13
|
+
keywords = ["etl", "data lineage", "spark", "pyspark", "dbt", "informatica", "powercenter", "migration", "duckdb",
|
|
14
|
+
"openlineage", "data quality"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 3 - Alpha",
|
|
17
|
+
"Intended Audience :: Developers",
|
|
18
|
+
"Intended Audience :: Information Technology",
|
|
19
|
+
"Operating System :: OS Independent",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.11",
|
|
22
|
+
"Programming Language :: Python :: 3.12",
|
|
23
|
+
"Programming Language :: Python :: 3.13",
|
|
24
|
+
"Topic :: Database",
|
|
25
|
+
"Topic :: Software Development :: Code Generators",
|
|
26
|
+
]
|
|
27
|
+
# Pure-Python dependencies only: this package must also run in Pyodide.
|
|
28
|
+
dependencies = ["sqlglot>=30"]
|
|
29
|
+
|
|
30
|
+
[project.optional-dependencies]
|
|
31
|
+
# PyYAML is optional: JSON specs need nothing extra, and Pyodide ships PyYAML.
|
|
32
|
+
yaml = ["pyyaml>=6"]
|
|
33
|
+
# DuckDB runs previews, checks and traces; 1.4 added MERGE.
|
|
34
|
+
cli = ["pyyaml>=6", "duckdb>=1.4"]
|
|
35
|
+
dev = ["pytest>=8", "duckdb>=1.4", "pyyaml>=6", "jsonschema>=4"]
|
|
36
|
+
|
|
37
|
+
[project.urls]
|
|
38
|
+
Homepage = "https://github.com/Fullcountr/redcliff"
|
|
39
|
+
Playground = "https://fullcountr.github.io/redcliff/"
|
|
40
|
+
Documentation = "https://github.com/Fullcountr/redcliff/tree/main/docs"
|
|
41
|
+
Issues = "https://github.com/Fullcountr/redcliff/issues"
|
|
42
|
+
|
|
43
|
+
[project.scripts]
|
|
44
|
+
redcliff = "redcliff.cli:main"
|
|
45
|
+
|
|
46
|
+
[tool.hatch.version]
|
|
47
|
+
path = "src/redcliff/__init__.py"
|
|
48
|
+
|
|
49
|
+
[tool.hatch.build.targets.wheel]
|
|
50
|
+
packages = ["src/redcliff"]
|
|
51
|
+
|
|
52
|
+
[tool.hatch.build.targets.sdist]
|
|
53
|
+
include = ["src/redcliff", "README.md", "pyproject.toml"]
|
|
54
|
+
|
|
55
|
+
[tool.pytest.ini_options]
|
|
56
|
+
testpaths = ["tests"]
|
|
57
|
+
|
|
58
|
+
[tool.ruff]
|
|
59
|
+
line-length = 130
|
|
60
|
+
target-version = "py311"
|
|
61
|
+
|
|
62
|
+
[tool.ruff.lint]
|
|
63
|
+
select = ["E", "F", "W", "B", "UP", "SIM"]
|
|
64
|
+
ignore = ["SIM108", "B905"]
|
|
65
|
+
|
|
66
|
+
[tool.ruff.lint.per-file-ignores]
|
|
67
|
+
"tests/*" = ["E501"]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Redcliff: open-source visual pipelines with lineage built in."""
|
|
2
|
+
|
|
3
|
+
from redcliff.columns import infer_columns
|
|
4
|
+
from redcliff.compile import CompileError, compile_pyspark, compile_query, compile_script
|
|
5
|
+
from redcliff.importer import ImportResult, SQLImportError, import_sql
|
|
6
|
+
from redcliff.lineage import Ref, blast_radius, build_graph, column_issues, lineage_report, openlineage_facet
|
|
7
|
+
from redcliff.powercenter import PowerCenterImportError, import_powercenter
|
|
8
|
+
from redcliff.scorecard import Scorecard, ScoreItem
|
|
9
|
+
from redcliff.ssis import SSISImportError, import_ssis
|
|
10
|
+
from redcliff.spec import Issue, Node, Pipeline, SpecError, json_schema, load_spec, parse_spec, validate
|
|
11
|
+
|
|
12
|
+
__version__ = "0.1.0"
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"CompileError",
|
|
16
|
+
"compile_pyspark",
|
|
17
|
+
"compile_query",
|
|
18
|
+
"compile_script",
|
|
19
|
+
"infer_columns",
|
|
20
|
+
"ImportResult",
|
|
21
|
+
"SQLImportError",
|
|
22
|
+
"import_sql",
|
|
23
|
+
"PowerCenterImportError",
|
|
24
|
+
"import_powercenter",
|
|
25
|
+
"SSISImportError",
|
|
26
|
+
"import_ssis",
|
|
27
|
+
"Scorecard",
|
|
28
|
+
"ScoreItem",
|
|
29
|
+
"Ref",
|
|
30
|
+
"blast_radius",
|
|
31
|
+
"build_graph",
|
|
32
|
+
"column_issues",
|
|
33
|
+
"lineage_report",
|
|
34
|
+
"openlineage_facet",
|
|
35
|
+
"Issue",
|
|
36
|
+
"Node",
|
|
37
|
+
"Pipeline",
|
|
38
|
+
"SpecError",
|
|
39
|
+
"json_schema",
|
|
40
|
+
"load_spec",
|
|
41
|
+
"parse_spec",
|
|
42
|
+
"validate",
|
|
43
|
+
]
|