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.
Files changed (44) hide show
  1. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/PKG-INFO +3 -12
  2. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/README.md +2 -11
  3. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/pyproject.toml +1 -1
  4. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/pyproject.toml.orig +1 -1
  5. dtypeflow-1.2.0/src/dtypeflow/tui/__init__.py +9 -0
  6. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/app.py +7 -20
  7. dtypeflow-1.1.0/src/dtypeflow/tui/__init__.py +0 -17
  8. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/LICENSE +0 -0
  9. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/__init__.py +0 -0
  10. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/__init__.py +0 -0
  11. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/__init__.py +0 -0
  12. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/base.py +0 -0
  13. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/factory.py +0 -0
  14. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/candidate/primitive.py +0 -0
  15. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dataset.py +0 -0
  16. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/__init__.py +0 -0
  17. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/base.py +0 -0
  18. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/hierachy.md +0 -0
  19. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/nested/__init__.py +0 -0
  20. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/nested/dictionary.py +0 -0
  21. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/__init__.py +0 -0
  22. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/base.py +0 -0
  23. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/boolean.py +0 -0
  24. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/float.py +0 -0
  25. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/__init__.py +0 -0
  26. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/base.py +0 -0
  27. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/signed.py +0 -0
  28. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/integer/unsigned.py +0 -0
  29. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/dtype/primitive/string.py +0 -0
  30. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/override/__init__.py +0 -0
  31. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/override/base.py +0 -0
  32. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/override/primitive.py +0 -0
  33. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profile/__init__.py +0 -0
  34. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profile/base.py +0 -0
  35. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profile/primitive.py +0 -0
  36. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/profiler.py +0 -0
  37. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/schema.py +0 -0
  38. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/core/table.py +0 -0
  39. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/py.typed +0 -0
  40. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/app.tcss +0 -0
  41. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/compatibility.py +0 -0
  42. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/dto.py +0 -0
  43. {dtypeflow-1.1.0 → dtypeflow-1.2.0}/src/dtypeflow/tui/service.py +0 -0
  44. {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.1.0
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. The delimiter is
76
- auto-detected from the first 64 KiB; you can also pick comma, semicolon,
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. The delimiter is
51
- auto-detected from the first 64 KiB; you can also pick comma, semicolon,
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).
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dtypeflow"
3
- version = "1.1.0"
3
+ version = "1.2.0"
4
4
  description = "Terminal UI to infer CSV column dtypes and convert CSV to Parquet, locally."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dtypeflow"
3
- version = "1.1.0"
3
+ version = "1.2.0"
4
4
  description = "Terminal UI to infer CSV column dtypes and convert CSV to Parquet, locally."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ __all__: list[str] = ["run"]
4
+
5
+
6
+ def run() -> None:
7
+ from dtypeflow.tui.app import DtypeflowApp
8
+
9
+ DtypeflowApp().run()
@@ -518,20 +518,15 @@ class DelimiterSelect(Select[str]):
518
518
 
519
519
 
520
520
  class PickFileScreen(Screen[None]):
521
- def __init__(self, initial_path: str | None = None) -> None:
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="auto",
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
- if not app.file_locked:
648
- with Horizontal(id="configure-header"):
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, initial_path: str | None = None) -> None:
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.file_locked = initial_path is not None
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