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.
@@ -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/
@@ -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.
@@ -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
+ ]