dtypeflow 1.1.0__tar.gz → 1.2.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.
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/PKG-INFO +3 -12
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/README.md +2 -11
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/pyproject.toml +1 -1
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/pyproject.toml.orig +1 -1
- dtypeflow-1.2.0/src/dtypeflow/tui/__init__.py +9 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/app.py +7 -20
- dtypeflow-1.1.0/src/dtypeflow/tui/__init__.py +0 -17
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/LICENSE +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/base.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/factory.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/primitive.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dataset.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/base.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/hierachy.md +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/nested/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/nested/dictionary.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/base.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/boolean.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/float.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/base.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/signed.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/unsigned.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/string.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/override/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/override/base.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/override/primitive.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profile/__init__.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profile/base.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profile/primitive.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profiler.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/schema.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/table.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/py.typed +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/app.tcss +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/compatibility.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/dto.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/service.py +0 -0
- {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dtypeflow
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Terminal UI to infer CSV column dtypes and convert CSV to Parquet, locally.
|
|
5
5
|
Keywords: csv,parquet,dtype,tui,textual,arrow
|
|
6
6
|
Author: Pedro José Mora Gallegos
|
|
@@ -58,23 +58,14 @@ pip install dtypeflow
|
|
|
58
58
|
|
|
59
59
|
## Usage
|
|
60
60
|
|
|
61
|
-
Launch the picker and choose a CSV file interactively:
|
|
62
|
-
|
|
63
61
|
```bash
|
|
64
62
|
dtypeflow
|
|
65
63
|
```
|
|
66
64
|
|
|
67
|
-
Or pass a path directly to skip straight to configuring column types:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
dtypeflow path/to/data.csv
|
|
71
|
-
```
|
|
72
|
-
|
|
73
65
|
The workflow has three steps:
|
|
74
66
|
|
|
75
|
-
1. **Pick a file** — enter or browse for a CSV path
|
|
76
|
-
|
|
77
|
-
tab, pipe, or a custom single character.
|
|
67
|
+
1. **Pick a file** — enter or browse for a CSV path and choose the delimiter
|
|
68
|
+
(Comma by default; Auto detects it from the first 64 KiB).
|
|
78
69
|
2. **Configure types** — for each column, review the recommended dtype, its
|
|
79
70
|
stats (unique values, samples, range/precision/scale), and pick from
|
|
80
71
|
compatible alternatives grouped by safety (Safe / Too small / Discouraged).
|
|
@@ -33,23 +33,14 @@ pip install dtypeflow
|
|
|
33
33
|
|
|
34
34
|
## Usage
|
|
35
35
|
|
|
36
|
-
Launch the picker and choose a CSV file interactively:
|
|
37
|
-
|
|
38
36
|
```bash
|
|
39
37
|
dtypeflow
|
|
40
38
|
```
|
|
41
39
|
|
|
42
|
-
Or pass a path directly to skip straight to configuring column types:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
dtypeflow path/to/data.csv
|
|
46
|
-
```
|
|
47
|
-
|
|
48
40
|
The workflow has three steps:
|
|
49
41
|
|
|
50
|
-
1. **Pick a file** — enter or browse for a CSV path
|
|
51
|
-
|
|
52
|
-
tab, pipe, or a custom single character.
|
|
42
|
+
1. **Pick a file** — enter or browse for a CSV path and choose the delimiter
|
|
43
|
+
(Comma by default; Auto detects it from the first 64 KiB).
|
|
53
44
|
2. **Configure types** — for each column, review the recommended dtype, its
|
|
54
45
|
stats (unique values, samples, range/precision/scale), and pick from
|
|
55
46
|
compatible alternatives grouped by safety (Safe / Too small / Discouraged).
|
|
@@ -518,20 +518,15 @@ class DelimiterSelect(Select[str]):
|
|
|
518
518
|
|
|
519
519
|
|
|
520
520
|
class PickFileScreen(Screen[None]):
|
|
521
|
-
def __init__(self
|
|
521
|
+
def __init__(self) -> None:
|
|
522
522
|
super().__init__()
|
|
523
|
-
self._initial_path = initial_path
|
|
524
523
|
self._custom_delimiter: str | None = None
|
|
525
524
|
|
|
526
525
|
def compose(self) -> ComposeResult:
|
|
527
526
|
yield Header()
|
|
528
527
|
with VerticalScroll(id="pick-file-screen"), Vertical(classes="panel hero"):
|
|
529
528
|
with Horizontal(classes="field-row"):
|
|
530
|
-
yield Input(
|
|
531
|
-
placeholder="Path to a CSV file",
|
|
532
|
-
id="csv-path",
|
|
533
|
-
value=self._initial_path or "",
|
|
534
|
-
)
|
|
529
|
+
yield Input(placeholder="Path to a CSV file", id="csv-path")
|
|
535
530
|
yield Button("Browse…", id="browse-csv")
|
|
536
531
|
with Horizontal(id="load-row"):
|
|
537
532
|
yield DelimiterSelect(
|
|
@@ -543,7 +538,7 @@ class PickFileScreen(Screen[None]):
|
|
|
543
538
|
("Pipe", "|"),
|
|
544
539
|
("Custom", "custom"),
|
|
545
540
|
],
|
|
546
|
-
value="
|
|
541
|
+
value=",",
|
|
547
542
|
allow_blank=False,
|
|
548
543
|
id="csv-delimiter",
|
|
549
544
|
)
|
|
@@ -551,10 +546,6 @@ class PickFileScreen(Screen[None]):
|
|
|
551
546
|
yield Static("", id="pick-status", classes="status")
|
|
552
547
|
yield Footer()
|
|
553
548
|
|
|
554
|
-
def on_mount(self) -> None:
|
|
555
|
-
if self._initial_path:
|
|
556
|
-
self._start_load(self._initial_path)
|
|
557
|
-
|
|
558
549
|
@on(Select.Changed, "#csv-delimiter")
|
|
559
550
|
def _delimiter_changed(self, event: Select.Changed) -> None:
|
|
560
551
|
if event.value != "custom":
|
|
@@ -644,9 +635,8 @@ class ConfigureScreen(Screen[None]):
|
|
|
644
635
|
loaded = app.loaded
|
|
645
636
|
assert loaded is not None
|
|
646
637
|
yield Header()
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
yield Button("← Change file", id="change-file")
|
|
638
|
+
with Horizontal(id="configure-header"):
|
|
639
|
+
yield Button("← Change file", id="change-file")
|
|
650
640
|
with VerticalScroll(id="configure-columns"):
|
|
651
641
|
for index, column in enumerate(loaded.report.columns):
|
|
652
642
|
yield ColumnPanel(column, app.service, loaded, id=f"panel-{index}")
|
|
@@ -682,8 +672,6 @@ class ConfigureScreen(Screen[None]):
|
|
|
682
672
|
|
|
683
673
|
def action_change_file(self) -> None:
|
|
684
674
|
app = cast("DtypeflowApp", self.app)
|
|
685
|
-
if app.file_locked:
|
|
686
|
-
return
|
|
687
675
|
app.loaded = None
|
|
688
676
|
self.app.pop_screen()
|
|
689
677
|
|
|
@@ -836,13 +824,12 @@ class DtypeflowApp(App[None]):
|
|
|
836
824
|
TITLE = "dtypeflow"
|
|
837
825
|
BINDINGS: ClassVar[list[Binding]] = [Binding("ctrl+q", "quit", "Quit")]
|
|
838
826
|
|
|
839
|
-
def __init__(self
|
|
827
|
+
def __init__(self) -> None:
|
|
840
828
|
super().__init__()
|
|
841
829
|
self.service = DtypeflowService()
|
|
842
830
|
self.loaded: LoadedDataset | None = None
|
|
843
831
|
self.selections: dict[str, ColumnSelection] | None = None
|
|
844
|
-
self.
|
|
845
|
-
self._pick_screen = PickFileScreen(initial_path=initial_path)
|
|
832
|
+
self._pick_screen = PickFileScreen()
|
|
846
833
|
|
|
847
834
|
def on_mount(self) -> None:
|
|
848
835
|
self.push_screen(self._pick_screen)
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import argparse
|
|
4
|
-
|
|
5
|
-
__all__: list[str] = ["run"]
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def run() -> None:
|
|
9
|
-
from dtypeflow.tui.app import DtypeflowApp
|
|
10
|
-
|
|
11
|
-
parser = argparse.ArgumentParser(
|
|
12
|
-
prog="dtypeflow",
|
|
13
|
-
description="Interactive terminal UI to convert a CSV file to Parquet.",
|
|
14
|
-
)
|
|
15
|
-
parser.add_argument("path", nargs="?", help="Path to a CSV file to load on startup")
|
|
16
|
-
args = parser.parse_args()
|
|
17
|
-
DtypeflowApp(initial_path=args.path).run()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|