mangleframes 0.2.8__tar.gz → 0.2.9__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.
- {mangleframes-0.2.8 → mangleframes-0.2.9}/PKG-INFO +1 -4
- {mangleframes-0.2.8 → mangleframes-0.2.9}/pyproject.toml +1 -3
- {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/__init__.py +2 -15
- mangleframes-0.2.9/viewer/frontend/index.html +16 -0
- mangleframes-0.2.9/viewer/frontend/package-lock.json +2888 -0
- mangleframes-0.2.9/viewer/frontend/package.json +33 -0
- mangleframes-0.2.9/viewer/frontend/postcss.config.js +6 -0
- mangleframes-0.2.9/viewer/frontend/src/App.tsx +16 -0
- mangleframes-0.2.9/viewer/frontend/src/components/analysis/JoinAnalyzer.tsx +165 -0
- mangleframes-0.2.9/viewer/frontend/src/components/analysis/Reconciliation.tsx +643 -0
- mangleframes-0.2.9/viewer/frontend/src/components/analysis/SQLEditor.tsx +160 -0
- mangleframes-0.2.9/viewer/frontend/src/components/data/ColumnDropdown.tsx +182 -0
- mangleframes-0.2.9/viewer/frontend/src/components/data/ColumnStats.tsx +118 -0
- mangleframes-0.2.9/viewer/frontend/src/components/data/DataGrid.tsx +213 -0
- mangleframes-0.2.9/viewer/frontend/src/components/data/SchemaView.tsx +85 -0
- mangleframes-0.2.9/viewer/frontend/src/components/layout/ContextPanel.tsx +84 -0
- mangleframes-0.2.9/viewer/frontend/src/components/layout/Layout.tsx +23 -0
- mangleframes-0.2.9/viewer/frontend/src/components/layout/MainContent.tsx +72 -0
- mangleframes-0.2.9/viewer/frontend/src/components/layout/Sidebar.tsx +117 -0
- mangleframes-0.2.9/viewer/frontend/src/components/layout/StatusBar.tsx +34 -0
- mangleframes-0.2.9/viewer/frontend/src/components/layout/TabBar.tsx +32 -0
- mangleframes-0.2.9/viewer/frontend/src/components/layout/TopBar.tsx +59 -0
- mangleframes-0.2.9/viewer/frontend/src/components/quality/AlertBuilder.tsx +247 -0
- mangleframes-0.2.9/viewer/frontend/src/components/quality/QualityDashboard.tsx +128 -0
- mangleframes-0.2.9/viewer/frontend/src/index.css +59 -0
- mangleframes-0.2.9/viewer/frontend/src/main.tsx +22 -0
- mangleframes-0.2.9/viewer/frontend/src/stores/dataStore.ts +136 -0
- mangleframes-0.2.9/viewer/frontend/src/stores/uiStore.ts +36 -0
- mangleframes-0.2.9/viewer/frontend/tailwind.config.js +25 -0
- mangleframes-0.2.9/viewer/frontend/tsconfig.json +25 -0
- mangleframes-0.2.9/viewer/frontend/tsconfig.node.json +11 -0
- mangleframes-0.2.9/viewer/frontend/vite.config.ts +25 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/handlers.rs +52 -19
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/main.rs +1 -10
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/web_server.rs +2 -9
- mangleframes-0.2.8/python/mangleframes/dqx_server.py +0 -262
- mangleframes-0.2.8/viewer/src/dq_handlers.rs +0 -147
- mangleframes-0.2.8/viewer/static/app.js +0 -2998
- mangleframes-0.2.8/viewer/static/index.html +0 -491
- mangleframes-0.2.8/viewer/static/style.css +0 -2225
- {mangleframes-0.2.8 → mangleframes-0.2.9}/Cargo.lock +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/Cargo.toml +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/alerts.py +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/launcher.py +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/session.py +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/Cargo.toml +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/build.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/base.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/catalog.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/commands.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/common.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/expressions.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/ml.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/ml_common.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/relations.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/types.proto +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/client.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/error.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/lib.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/proto/spark.connect.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/Cargo.toml +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/alert_handlers.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/arrow_reader.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/dashboard.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/export.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/history_analysis.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/history_handlers.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/join_handlers.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/perf.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/reconcile_handlers.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/spark_client.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/sql_builder.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/stats.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/test_helpers.rs +0 -0
- {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/websocket.rs +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mangleframes
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.9
|
|
4
4
|
Classifier: Programming Language :: Python :: 3
|
|
5
5
|
Classifier: Programming Language :: Rust
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
7
7
|
Requires-Dist: pyspark>=3.5.0
|
|
8
|
-
Requires-Dist: databricks-labs-dqx>=0.12.0
|
|
9
8
|
Requires-Dist: loguru>=0.7.3
|
|
10
9
|
Requires-Dist: maturin[patchelf]>=1.11.2
|
|
11
10
|
Requires-Dist: pyarrow>=11.0.0
|
|
@@ -16,9 +15,7 @@ Requires-Dist: zstandard>=0.25.0
|
|
|
16
15
|
Requires-Dist: pandas>=2.3.3
|
|
17
16
|
Requires-Dist: pytest>=7.0 ; extra == 'dev'
|
|
18
17
|
Requires-Dist: maturin>=1.4 ; extra == 'dev'
|
|
19
|
-
Requires-Dist: databricks-labs-dqx>=0.1.5 ; extra == 'dqx'
|
|
20
18
|
Provides-Extra: dev
|
|
21
|
-
Provides-Extra: dqx
|
|
22
19
|
License-File: LICENSE
|
|
23
20
|
Summary: PySpark DataFrame viewer with modern web UI
|
|
24
21
|
License: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mangleframes"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.9"
|
|
8
8
|
description = "PySpark DataFrame viewer with modern web UI"
|
|
9
9
|
requires-python = ">=3.12"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -15,7 +15,6 @@ classifiers = [
|
|
|
15
15
|
]
|
|
16
16
|
dependencies = [
|
|
17
17
|
"pyspark>=3.5.0",
|
|
18
|
-
"databricks-labs-dqx>=0.12.0",
|
|
19
18
|
"loguru>=0.7.3",
|
|
20
19
|
"maturin[patchelf]>=1.11.2",
|
|
21
20
|
"pyarrow>=11.0.0",
|
|
@@ -27,7 +26,6 @@ dependencies = [
|
|
|
27
26
|
]
|
|
28
27
|
|
|
29
28
|
[project.optional-dependencies]
|
|
30
|
-
dqx = ["databricks-labs-dqx>=0.1.5"]
|
|
31
29
|
dev = ["pytest>=7.0", "maturin>=1.4"]
|
|
32
30
|
|
|
33
31
|
[tool.maturin]
|
|
@@ -28,12 +28,11 @@ from typing import TYPE_CHECKING
|
|
|
28
28
|
|
|
29
29
|
from .launcher import find_viewer_binary
|
|
30
30
|
from .session import SparkSession, get_proxy_port, get_spark_session
|
|
31
|
-
from . import dqx_server
|
|
32
31
|
|
|
33
32
|
if TYPE_CHECKING:
|
|
34
33
|
from pyspark.sql import DataFrame
|
|
35
34
|
|
|
36
|
-
__version__ = "0.2.
|
|
35
|
+
__version__ = "0.2.9"
|
|
37
36
|
|
|
38
37
|
# Import alert classes for convenience (optional dependency)
|
|
39
38
|
try:
|
|
@@ -69,7 +68,7 @@ _cleanup_registered = False
|
|
|
69
68
|
|
|
70
69
|
|
|
71
70
|
def cleanup() -> None:
|
|
72
|
-
"""Clean up MangleFrames viewer process
|
|
71
|
+
"""Clean up MangleFrames viewer process."""
|
|
73
72
|
global _viewer_process
|
|
74
73
|
|
|
75
74
|
if _viewer_process is not None:
|
|
@@ -81,9 +80,6 @@ def cleanup() -> None:
|
|
|
81
80
|
_viewer_process.kill()
|
|
82
81
|
_viewer_process = None
|
|
83
82
|
|
|
84
|
-
if dqx_server.is_running():
|
|
85
|
-
dqx_server.stop_server()
|
|
86
|
-
|
|
87
83
|
|
|
88
84
|
def register(name: str, df: DataFrame) -> None:
|
|
89
85
|
"""Register a DataFrame as a temp view for viewing.
|
|
@@ -132,15 +128,6 @@ def show(
|
|
|
132
128
|
|
|
133
129
|
cmd = [str(binary), "--port", str(port)]
|
|
134
130
|
|
|
135
|
-
# Start DQX sidecar server
|
|
136
|
-
dqx_port = port + 1
|
|
137
|
-
spark = get_spark_session()
|
|
138
|
-
if spark is not None:
|
|
139
|
-
dqx_server.set_spark_session(spark)
|
|
140
|
-
if dqx_server.start_server(dqx_port):
|
|
141
|
-
cmd.extend(["--dqx-url", f"http://localhost:{dqx_port}"])
|
|
142
|
-
print(f"[MangleFrames] DQX sidecar running on port {dqx_port}")
|
|
143
|
-
|
|
144
131
|
# Check if we have a running proxy to connect through
|
|
145
132
|
proxy_port = get_proxy_port()
|
|
146
133
|
if proxy_port is not None:
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" class="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>MangleFrames</title>
|
|
8
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
11
|
+
</head>
|
|
12
|
+
<body class="bg-mf-bg text-mf-text font-mono">
|
|
13
|
+
<div id="root"></div>
|
|
14
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|