danaleo 3.0.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.
Files changed (41) hide show
  1. danaleo-3.0.0/LICENSE +21 -0
  2. danaleo-3.0.0/MANIFEST.in +3 -0
  3. danaleo-3.0.0/PKG-INFO +405 -0
  4. danaleo-3.0.0/README.md +354 -0
  5. danaleo-3.0.0/pyproject.toml +83 -0
  6. danaleo-3.0.0/setup.cfg +4 -0
  7. danaleo-3.0.0/src/danaleo/__init__.py +2 -0
  8. danaleo-3.0.0/src/danaleo/__main__.py +5 -0
  9. danaleo-3.0.0/src/danaleo/cli.py +14 -0
  10. danaleo-3.0.0/src/danaleo/core/__init__.py +0 -0
  11. danaleo-3.0.0/src/danaleo/core/data_ingestion.py +711 -0
  12. danaleo-3.0.0/src/danaleo/core/exporter.py +569 -0
  13. danaleo-3.0.0/src/danaleo/core/operations.py +234 -0
  14. danaleo-3.0.0/src/danaleo/core/plots.py +812 -0
  15. danaleo-3.0.0/src/danaleo/core/session_store.py +969 -0
  16. danaleo-3.0.0/src/danaleo/core/stats.py +151 -0
  17. danaleo-3.0.0/src/danaleo/main.py +286 -0
  18. danaleo-3.0.0/src/danaleo/server/__init__.py +0 -0
  19. danaleo-3.0.0/src/danaleo/server/app.py +314 -0
  20. danaleo-3.0.0/src/danaleo/server/models.py +59 -0
  21. danaleo-3.0.0/src/danaleo/server/static/assets/index-CQoQ9213.js +15 -0
  22. danaleo-3.0.0/src/danaleo/server/static/assets/index-DKSZqKUG.css +1 -0
  23. danaleo-3.0.0/src/danaleo/server/static/index.html +16 -0
  24. danaleo-3.0.0/src/danaleo.egg-info/PKG-INFO +405 -0
  25. danaleo-3.0.0/src/danaleo.egg-info/SOURCES.txt +39 -0
  26. danaleo-3.0.0/src/danaleo.egg-info/dependency_links.txt +1 -0
  27. danaleo-3.0.0/src/danaleo.egg-info/entry_points.txt +2 -0
  28. danaleo-3.0.0/src/danaleo.egg-info/requires.txt +23 -0
  29. danaleo-3.0.0/src/danaleo.egg-info/top_level.txt +1 -0
  30. danaleo-3.0.0/tests/test_api.py +521 -0
  31. danaleo-3.0.0/tests/test_data_ingestion.py +356 -0
  32. danaleo-3.0.0/tests/test_exporter.py +738 -0
  33. danaleo-3.0.0/tests/test_frontend_regressions.py +415 -0
  34. danaleo-3.0.0/tests/test_main.py +198 -0
  35. danaleo-3.0.0/tests/test_models.py +46 -0
  36. danaleo-3.0.0/tests/test_notebook_multi_export.py +233 -0
  37. danaleo-3.0.0/tests/test_operations.py +360 -0
  38. danaleo-3.0.0/tests/test_packaging.py +53 -0
  39. danaleo-3.0.0/tests/test_plots.py +332 -0
  40. danaleo-3.0.0/tests/test_session_store.py +972 -0
  41. danaleo-3.0.0/tests/test_stats.py +149 -0
danaleo-3.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Danaleo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ include LICENSE
2
+ recursive-include src/danaleo/server/static *
3
+ global-exclude __pycache__ *.py[cod] .DS_Store ._*
danaleo-3.0.0/PKG-INFO ADDED
@@ -0,0 +1,405 @@
1
+ Metadata-Version: 2.4
2
+ Name: danaleo
3
+ Version: 3.0.0
4
+ Summary: Localhost interactive EDA workspace for tabular data files
5
+ Author: Danaleo
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/RP28/Danaleo-3.0
8
+ Project-URL: Repository, https://github.com/RP28/Danaleo-3.0
9
+ Project-URL: Issues, https://github.com/RP28/Danaleo-3.0/issues
10
+ Keywords: data-analysis,data-visualization,eda,pandas,fastapi
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Framework :: FastAPI
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
25
+ Requires-Python: >=3.10
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: fastapi>=0.115
29
+ Requires-Dist: uvicorn[standard]>=0.30
30
+ Requires-Dist: python-multipart>=0.0.9
31
+ Requires-Dist: pandas>=2.2
32
+ Requires-Dist: numpy>=1.26
33
+ Requires-Dist: plotly>=5.22
34
+ Requires-Dist: matplotlib>=3.8
35
+ Requires-Dist: seaborn>=0.13
36
+ Requires-Dist: nbformat>=5.10
37
+ Requires-Dist: pydantic>=2.7
38
+ Requires-Dist: openpyxl>=3.1
39
+ Requires-Dist: xlrd>=2.0
40
+ Requires-Dist: odfpy>=1.4
41
+ Requires-Dist: pyxlsb>=1.0
42
+ Requires-Dist: pyarrow>=16.0
43
+ Requires-Dist: tables>=3.9
44
+ Provides-Extra: dev
45
+ Requires-Dist: build>=1.2; extra == "dev"
46
+ Requires-Dist: pytest>=8.0; extra == "dev"
47
+ Requires-Dist: httpx>=0.27; extra == "dev"
48
+ Requires-Dist: ruff>=0.6; extra == "dev"
49
+ Requires-Dist: twine>=5.1; extra == "dev"
50
+ Dynamic: license-file
51
+
52
+ # Danaleo 3.0
53
+
54
+ Danaleo is a local interactive EDA workspace for tabular data files.
55
+
56
+ It runs a Python FastAPI backend and a React UI on localhost. You can upload multiple data files into separate dataset tabs, inspect columns, create dataframe sessions, apply operations, build plots, save plots with notes, view session history as a tree, and export the active analysis as a Jupyter notebook.
57
+
58
+ ## Features
59
+
60
+ * Upload multiple tabular data files into independent dataset tabs
61
+ * Save and restore every open data file, session, and plot in one `.danaleo` workspace
62
+ * Visually merge two dataset session snapshots with inner, left, right, full outer, or cross joins
63
+ * Preview merge match diagnostics and validate one-to-one, one-to-many, or many-to-one relationships
64
+ * Optional sampling during upload
65
+ * Column overview and column-level statistics
66
+ * Overview-first dataset profile with quality flags, correlations, and row preview
67
+ * Dataframe sessions and branching
68
+ * Session tree with operation history
69
+ * Rename, activate, and delete sessions
70
+ * Filter rows using pandas-style queries
71
+ * Drop columns
72
+ * Automatically detect common CSV separators and text encodings
73
+ * Read JSON/JSON Lines, Excel/OpenDocument, Parquet, Feather, ORC, Stata, SAS, and HDF files
74
+ * Open compressed delimited-text and JSON files (`.gz`, `.bz2`, `.xz`, and single-file `.zip`)
75
+ * Drop missing values
76
+ * Drop exact duplicate rows
77
+ * Replace values with custom values, missing values, mean, median, or mode
78
+ * Impute missing values
79
+ * One-hot and ordinal encoding
80
+ * Min-max scaling and standardization
81
+ * Plot numeric and categorical columns
82
+ * Top-N plots for categorical and numeric columns
83
+ * Grouped plots
84
+ * Multi-column subplot-style plotting
85
+ * Scatter, hexbin, line relationship, correlation heatmap, and missing-values plots
86
+ * Shared chart title, grid, log-axis, sorting, orientation, marker, and opacity controls
87
+ * Save plots with export notes
88
+ * Include or skip saved plots across every dataset tab during notebook export
89
+ * Export EDA workflow to `.ipynb`
90
+ * Exported notebooks use concise pandas, NumPy, Matplotlib, and Seaborn code without requiring Danaleo
91
+ * Exported merged datasets recreate available join chains with direct `pd.merge(...)` code
92
+ * Local browser-based UI
93
+
94
+ ## Requirements
95
+
96
+ * Python 3.10+
97
+ * Node.js/npm only if the frontend UI needs to be rebuilt from source
98
+
99
+ For normal Python usage, install the package with pip. For frontend development, Node.js/npm is required.
100
+
101
+ ## Setup
102
+
103
+ Install the released package from PyPI:
104
+
105
+ ```bash
106
+ python3 -m pip install danaleo
107
+ danaleo
108
+ ```
109
+
110
+ To install from a cloned repository:
111
+
112
+ Clone the repo:
113
+
114
+ ```bash
115
+ git clone https://github.com/RP28/Danaleo-3.0.git
116
+ cd Danaleo-3.0
117
+ ```
118
+
119
+ Create and activate a virtual environment:
120
+
121
+ ```bash
122
+ python3 -m venv .venv
123
+ source .venv/bin/activate
124
+ ```
125
+
126
+ Install Danaleo and Python dependencies:
127
+
128
+ ```bash
129
+ python3 -m pip install -e .
130
+ ```
131
+
132
+ For development and tests:
133
+
134
+ ```bash
135
+ python3 -m pip install -e ".[dev]"
136
+ ```
137
+
138
+ ## Run
139
+
140
+ Start Danaleo with:
141
+
142
+ ```bash
143
+ python3 -m danaleo
144
+ ```
145
+
146
+ Or use the installed CLI command:
147
+
148
+ ```bash
149
+ danaleo
150
+ ```
151
+
152
+ Then open:
153
+
154
+ ```text
155
+ http://127.0.0.1:8765
156
+ ```
157
+
158
+ The browser should open automatically. If it does not, copy the printed URL into your browser.
159
+
160
+ ## Useful startup commands
161
+
162
+ Run without opening the browser:
163
+
164
+ ```bash
165
+ danaleo --no-browser
166
+ ```
167
+
168
+ Run on another port:
169
+
170
+ ```bash
171
+ danaleo --port 8766
172
+ ```
173
+
174
+ Use a different host:
175
+
176
+ ```bash
177
+ danaleo --host 0.0.0.0 --port 8765
178
+ ```
179
+
180
+ Force rebuild the frontend before starting:
181
+
182
+ ```bash
183
+ danaleo --build-ui
184
+ ```
185
+
186
+ Only build the frontend and exit:
187
+
188
+ ```bash
189
+ danaleo --build-ui-only
190
+ ```
191
+
192
+ Build the frontend without running `npm install` or `npm ci`:
193
+
194
+ ```bash
195
+ danaleo --build-ui-only --skip-npm-install
196
+ ```
197
+
198
+ Start without automatically building the UI if static files are missing:
199
+
200
+ ```bash
201
+ danaleo --no-build-ui
202
+ ```
203
+
204
+ Skip Python dependency checks:
205
+
206
+ ```bash
207
+ danaleo --no-check-env
208
+ ```
209
+
210
+ ## If the port is already in use
211
+
212
+ Use another port:
213
+
214
+ ```bash
215
+ danaleo --port 8766
216
+ ```
217
+
218
+ Or stop the old process on macOS/Linux:
219
+
220
+ ```bash
221
+ kill -9 $(lsof -ti :8765)
222
+ ```
223
+
224
+ ## Frontend build
225
+
226
+ The React frontend lives in:
227
+
228
+ ```text
229
+ frontend/
230
+ ```
231
+
232
+ The production build is written into:
233
+
234
+ ```text
235
+ src/danaleo/server/static/
236
+ ```
237
+
238
+ To rebuild manually:
239
+
240
+ ```bash
241
+ cd frontend
242
+ npm install
243
+ npm run build
244
+ cd ..
245
+ ```
246
+
247
+ The startup script can also build the frontend automatically when the static UI is missing, as long as Node.js/npm is available.
248
+
249
+ Generated frontend build files such as the following are committed and included in the Python package:
250
+
251
+ ```text
252
+ src/danaleo/server/static/index.html
253
+ src/danaleo/server/static/assets/index-*.js
254
+ src/danaleo/server/static/assets/index-*.css
255
+ ```
256
+
257
+ Regenerate them after frontend changes with:
258
+
259
+ ```bash
260
+ cd frontend
261
+ npm run build
262
+ ```
263
+
264
+ Keeping these assets in the repository ensures `pip install` from a clean checkout includes a usable UI without requiring Node.js on the end user's machine.
265
+
266
+ ## Development workflow
267
+
268
+ Install Python dev dependencies:
269
+
270
+ ```bash
271
+ python3 -m pip install -e ".[dev]"
272
+ ```
273
+
274
+ Run the backend/local app:
275
+
276
+ ```bash
277
+ danaleo --no-browser
278
+ ```
279
+
280
+ Run the frontend dev server in another terminal:
281
+
282
+ ```bash
283
+ cd frontend
284
+ npm install
285
+ npm run dev
286
+ ```
287
+
288
+ The frontend dev server is useful when actively editing React components.
289
+
290
+ ## Tests
291
+
292
+ Run all tests:
293
+
294
+ ```bash
295
+ python3 -m pytest
296
+ ```
297
+
298
+ Run with verbose output:
299
+
300
+ ```bash
301
+ python3 -m pytest -vv
302
+ ```
303
+
304
+ Save test output to a log file:
305
+
306
+ ```bash
307
+ python3 -m pytest -vv 2>&1 | tee pytest.log
308
+ ```
309
+
310
+ ## Query examples
311
+
312
+ For normal column names:
313
+
314
+ ```python
315
+ age >= 18 and income > 0
316
+ ```
317
+
318
+ For column names with spaces:
319
+
320
+ ```python
321
+ `Age Years` >= 18
322
+ ```
323
+
324
+ For string values:
325
+
326
+ ```python
327
+ city == "Sydney"
328
+ ```
329
+
330
+ For missing-value checks, use pandas query syntax where applicable, or use the built-in drop-missing operation from the UI.
331
+
332
+ ## Notebook export
333
+
334
+ Use the export option in the UI to download a Jupyter notebook.
335
+
336
+ The exported notebook attempts to recreate the EDA workflow, including:
337
+
338
+ * Tabular data-file loading
339
+ * Sampling
340
+ * Session creation
341
+ * Session operations
342
+ * Saved plots selected for export
343
+ * Plot notes and remarks
344
+
345
+ ## Python entry point
346
+
347
+ Danaleo can also be started from Python:
348
+
349
+ ```python
350
+ from danaleo.main import start
351
+
352
+ start()
353
+ ```
354
+
355
+ Example with custom options:
356
+
357
+ ```python
358
+ from danaleo.main import start
359
+
360
+ start(
361
+ host="127.0.0.1",
362
+ port=8766,
363
+ open_browser=False,
364
+ build_ui=True,
365
+ )
366
+ ```
367
+
368
+ ## Package notes
369
+
370
+ The Python package supports both command-line entry points:
371
+
372
+ ```bash
373
+ danaleo
374
+ python3 -m danaleo
375
+ ```
376
+
377
+ The wheel includes the built static frontend files under:
378
+
379
+ ```text
380
+ src/danaleo/server/static/
381
+ ```
382
+
383
+ Install release tooling and build the distributable wheel and source archive:
384
+
385
+ ```bash
386
+ python3 -m pip install -e ".[dev]"
387
+ ./scripts/build_package.sh
388
+ ```
389
+
390
+ The script rebuilds the React UI, creates both distributions in `dist/`, and validates their metadata with Twine.
391
+
392
+ ## Project structure
393
+
394
+ ```text
395
+ Danaleo-3.0/
396
+ ├── frontend/ # React UI
397
+ ├── src/
398
+ │ └── danaleo/
399
+ │ ├── core/ # EDA logic, sessions, plots, exporter
400
+ │ ├── server/ # FastAPI app and static UI serving
401
+ │ └── main.py # CLI/startup entry point
402
+ ├── tests/ # pytest test suite
403
+ ├── pyproject.toml # Python packaging config
404
+ └── README.md
405
+ ```