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.
Files changed (75) hide show
  1. {mangleframes-0.2.8 → mangleframes-0.2.9}/PKG-INFO +1 -4
  2. {mangleframes-0.2.8 → mangleframes-0.2.9}/pyproject.toml +1 -3
  3. {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/__init__.py +2 -15
  4. mangleframes-0.2.9/viewer/frontend/index.html +16 -0
  5. mangleframes-0.2.9/viewer/frontend/package-lock.json +2888 -0
  6. mangleframes-0.2.9/viewer/frontend/package.json +33 -0
  7. mangleframes-0.2.9/viewer/frontend/postcss.config.js +6 -0
  8. mangleframes-0.2.9/viewer/frontend/src/App.tsx +16 -0
  9. mangleframes-0.2.9/viewer/frontend/src/components/analysis/JoinAnalyzer.tsx +165 -0
  10. mangleframes-0.2.9/viewer/frontend/src/components/analysis/Reconciliation.tsx +643 -0
  11. mangleframes-0.2.9/viewer/frontend/src/components/analysis/SQLEditor.tsx +160 -0
  12. mangleframes-0.2.9/viewer/frontend/src/components/data/ColumnDropdown.tsx +182 -0
  13. mangleframes-0.2.9/viewer/frontend/src/components/data/ColumnStats.tsx +118 -0
  14. mangleframes-0.2.9/viewer/frontend/src/components/data/DataGrid.tsx +213 -0
  15. mangleframes-0.2.9/viewer/frontend/src/components/data/SchemaView.tsx +85 -0
  16. mangleframes-0.2.9/viewer/frontend/src/components/layout/ContextPanel.tsx +84 -0
  17. mangleframes-0.2.9/viewer/frontend/src/components/layout/Layout.tsx +23 -0
  18. mangleframes-0.2.9/viewer/frontend/src/components/layout/MainContent.tsx +72 -0
  19. mangleframes-0.2.9/viewer/frontend/src/components/layout/Sidebar.tsx +117 -0
  20. mangleframes-0.2.9/viewer/frontend/src/components/layout/StatusBar.tsx +34 -0
  21. mangleframes-0.2.9/viewer/frontend/src/components/layout/TabBar.tsx +32 -0
  22. mangleframes-0.2.9/viewer/frontend/src/components/layout/TopBar.tsx +59 -0
  23. mangleframes-0.2.9/viewer/frontend/src/components/quality/AlertBuilder.tsx +247 -0
  24. mangleframes-0.2.9/viewer/frontend/src/components/quality/QualityDashboard.tsx +128 -0
  25. mangleframes-0.2.9/viewer/frontend/src/index.css +59 -0
  26. mangleframes-0.2.9/viewer/frontend/src/main.tsx +22 -0
  27. mangleframes-0.2.9/viewer/frontend/src/stores/dataStore.ts +136 -0
  28. mangleframes-0.2.9/viewer/frontend/src/stores/uiStore.ts +36 -0
  29. mangleframes-0.2.9/viewer/frontend/tailwind.config.js +25 -0
  30. mangleframes-0.2.9/viewer/frontend/tsconfig.json +25 -0
  31. mangleframes-0.2.9/viewer/frontend/tsconfig.node.json +11 -0
  32. mangleframes-0.2.9/viewer/frontend/vite.config.ts +25 -0
  33. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/handlers.rs +52 -19
  34. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/main.rs +1 -10
  35. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/web_server.rs +2 -9
  36. mangleframes-0.2.8/python/mangleframes/dqx_server.py +0 -262
  37. mangleframes-0.2.8/viewer/src/dq_handlers.rs +0 -147
  38. mangleframes-0.2.8/viewer/static/app.js +0 -2998
  39. mangleframes-0.2.8/viewer/static/index.html +0 -491
  40. mangleframes-0.2.8/viewer/static/style.css +0 -2225
  41. {mangleframes-0.2.8 → mangleframes-0.2.9}/Cargo.lock +0 -0
  42. {mangleframes-0.2.8 → mangleframes-0.2.9}/Cargo.toml +0 -0
  43. {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/alerts.py +0 -0
  44. {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/launcher.py +0 -0
  45. {mangleframes-0.2.8 → mangleframes-0.2.9}/python/mangleframes/session.py +0 -0
  46. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/Cargo.toml +0 -0
  47. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/build.rs +0 -0
  48. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/base.proto +0 -0
  49. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/catalog.proto +0 -0
  50. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/commands.proto +0 -0
  51. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/common.proto +0 -0
  52. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/expressions.proto +0 -0
  53. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/ml.proto +0 -0
  54. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/ml_common.proto +0 -0
  55. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/relations.proto +0 -0
  56. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/proto/spark/connect/types.proto +0 -0
  57. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/client.rs +0 -0
  58. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/error.rs +0 -0
  59. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/lib.rs +0 -0
  60. {mangleframes-0.2.8 → mangleframes-0.2.9}/spark-connect/src/proto/spark.connect.rs +0 -0
  61. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/Cargo.toml +0 -0
  62. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/alert_handlers.rs +0 -0
  63. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/arrow_reader.rs +0 -0
  64. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/dashboard.rs +0 -0
  65. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/export.rs +0 -0
  66. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/history_analysis.rs +0 -0
  67. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/history_handlers.rs +0 -0
  68. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/join_handlers.rs +0 -0
  69. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/perf.rs +0 -0
  70. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/reconcile_handlers.rs +0 -0
  71. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/spark_client.rs +0 -0
  72. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/sql_builder.rs +0 -0
  73. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/stats.rs +0 -0
  74. {mangleframes-0.2.8 → mangleframes-0.2.9}/viewer/src/test_helpers.rs +0 -0
  75. {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.8
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.8"
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.8"
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 and DQX sidecar."""
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>