dataframe-textual 2.6.0__tar.gz → 2.7.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.
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/PKG-INFO +10 -9
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/README.md +9 -8
- dataframe_textual-2.7.0/glycosmos_glycans_list.csv.gz +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/pyproject.toml +1 -1
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/__main__.py +24 -4
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/common.py +10 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/data_frame_table.py +12 -12
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/uv.lock +1 -1
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/.gitignore +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/1811.csv.gz +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/LICENSE +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/large_malformed.tsv.gz +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/main.py +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/__init__.py +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/data_frame_help_panel.py +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/data_frame_viewer.py +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/sql_screen.py +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/table_screen.py +0 -0
- {dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/yes_no_screen.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataframe-textual
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.0
|
|
4
4
|
Summary: Interactive terminal viewer/editor for tabular data
|
|
5
5
|
Project-URL: Homepage, https://github.com/need47/dataframe-textual
|
|
6
6
|
Project-URL: Repository, https://github.com/need47/dataframe-textual.git
|
|
@@ -184,14 +184,15 @@ options:
|
|
|
184
184
|
-t, --truncate-ragged-lines
|
|
185
185
|
Truncate ragged lines when reading CSV/TSV
|
|
186
186
|
-E, --ignore-errors Ignore errors when reading CSV/TSV
|
|
187
|
-
-c, --comment-prefix [
|
|
188
|
-
Comment lines are skipped when reading CSV/TSV
|
|
189
|
-
-q, --quote-char [
|
|
190
|
-
|
|
191
|
-
-
|
|
192
|
-
Skip lines when reading CSV/TSV
|
|
193
|
-
-
|
|
194
|
-
Skip rows after header when reading CSV/TSV
|
|
187
|
+
-c, --comment-prefix [PREFIX]
|
|
188
|
+
Comment lines starting with `PREFIX` are skipped when reading CSV/TSV
|
|
189
|
+
-q, --quote-char [C]
|
|
190
|
+
Use `C` as quote character for reading CSV/TSV
|
|
191
|
+
-L, --skip-lines N
|
|
192
|
+
Skip first N lines when reading CSV/TSV
|
|
193
|
+
-A, --skip-rows-after-header N
|
|
194
|
+
Skip N rows after header when reading CSV/TSV
|
|
195
|
+
-N, --n-rows N Stop after reading N rows from CSV/TSV
|
|
195
196
|
-n, --null NULL [NULL ...]
|
|
196
197
|
Values to interpret as null values when reading CSV/TSV
|
|
197
198
|
```
|
|
@@ -145,14 +145,15 @@ options:
|
|
|
145
145
|
-t, --truncate-ragged-lines
|
|
146
146
|
Truncate ragged lines when reading CSV/TSV
|
|
147
147
|
-E, --ignore-errors Ignore errors when reading CSV/TSV
|
|
148
|
-
-c, --comment-prefix [
|
|
149
|
-
Comment lines are skipped when reading CSV/TSV
|
|
150
|
-
-q, --quote-char [
|
|
151
|
-
|
|
152
|
-
-
|
|
153
|
-
Skip lines when reading CSV/TSV
|
|
154
|
-
-
|
|
155
|
-
Skip rows after header when reading CSV/TSV
|
|
148
|
+
-c, --comment-prefix [PREFIX]
|
|
149
|
+
Comment lines starting with `PREFIX` are skipped when reading CSV/TSV
|
|
150
|
+
-q, --quote-char [C]
|
|
151
|
+
Use `C` as quote character for reading CSV/TSV
|
|
152
|
+
-L, --skip-lines N
|
|
153
|
+
Skip first N lines when reading CSV/TSV
|
|
154
|
+
-A, --skip-rows-after-header N
|
|
155
|
+
Skip N rows after header when reading CSV/TSV
|
|
156
|
+
-N, --n-rows N Stop after reading N rows from CSV/TSV
|
|
156
157
|
-n, --null NULL [NULL ...]
|
|
157
158
|
Values to interpret as null values when reading CSV/TSV
|
|
158
159
|
```
|
|
Binary file
|
|
@@ -51,15 +51,34 @@ def cli() -> argparse.Namespace:
|
|
|
51
51
|
)
|
|
52
52
|
parser.add_argument("-E", "--ignore-errors", action="store_true", help="Ignore errors when reading CSV/TSV")
|
|
53
53
|
parser.add_argument(
|
|
54
|
-
"-c",
|
|
54
|
+
"-c",
|
|
55
|
+
"--comment-prefix",
|
|
56
|
+
metavar="PREFIX",
|
|
57
|
+
nargs="?",
|
|
58
|
+
const="#",
|
|
59
|
+
help="Comment lines starting with `PREFIX` are skipped when reading CSV/TSV",
|
|
55
60
|
)
|
|
56
61
|
parser.add_argument(
|
|
57
|
-
"-q",
|
|
62
|
+
"-q",
|
|
63
|
+
"--quote-char",
|
|
64
|
+
metavar="C",
|
|
65
|
+
nargs="?",
|
|
66
|
+
const=None,
|
|
67
|
+
default='"',
|
|
68
|
+
help="Use `C` as quote character for reading CSV/TSV",
|
|
58
69
|
)
|
|
59
|
-
parser.add_argument("-l", "--skip-lines", type=int, default=0, help="Skip lines when reading CSV/TSV")
|
|
60
70
|
parser.add_argument(
|
|
61
|
-
"-
|
|
71
|
+
"-L", "--skip-lines", metavar="N", type=int, default=0, help="Skip first N lines when reading CSV/TSV"
|
|
62
72
|
)
|
|
73
|
+
parser.add_argument(
|
|
74
|
+
"-A",
|
|
75
|
+
"--skip-rows-after-header",
|
|
76
|
+
metavar="N",
|
|
77
|
+
type=int,
|
|
78
|
+
default=0,
|
|
79
|
+
help="Skip N rows after header when reading CSV/TSV",
|
|
80
|
+
)
|
|
81
|
+
parser.add_argument("-N", "--n-rows", metavar="N", type=int, help="Stop after reading N rows from CSV/TSV")
|
|
63
82
|
parser.add_argument("-n", "--null", nargs="+", help="Values to interpret as null values when reading CSV/TSV")
|
|
64
83
|
|
|
65
84
|
args = parser.parse_args()
|
|
@@ -98,6 +117,7 @@ def main() -> None:
|
|
|
98
117
|
null_values=args.null,
|
|
99
118
|
ignore_errors=args.ignore_errors,
|
|
100
119
|
truncate_ragged_lines=args.truncate_ragged_lines,
|
|
120
|
+
n_rows=args.n_rows,
|
|
101
121
|
)
|
|
102
122
|
app = DataFrameViewer(*sources)
|
|
103
123
|
app.run()
|
|
@@ -485,6 +485,7 @@ def load_dataframe(
|
|
|
485
485
|
null_values: list[str] | None = None,
|
|
486
486
|
ignore_errors: bool = False,
|
|
487
487
|
truncate_ragged_lines: bool = False,
|
|
488
|
+
n_rows: int | None = None,
|
|
488
489
|
) -> list[Source]:
|
|
489
490
|
"""Load DataFrames from file specifications.
|
|
490
491
|
|
|
@@ -502,6 +503,8 @@ def load_dataframe(
|
|
|
502
503
|
skip_rows_after_header: Number of rows to skip after header. Defaults to 0.
|
|
503
504
|
null_values: List of values to interpret as null when reading CSV/TSV files. Defaults to None.
|
|
504
505
|
ignore_errors: Whether to ignore errors when reading CSV/TSV files. Defaults to False.
|
|
506
|
+
truncate_ragged_lines: Whether to truncate ragged lines when reading CSV/TSV files. Defaults to False.
|
|
507
|
+
n_rows: Number of rows to read from CSV/TSV files. Defaults to None (read all rows).
|
|
505
508
|
|
|
506
509
|
Returns:
|
|
507
510
|
List of `Source` objects.
|
|
@@ -551,6 +554,7 @@ def load_dataframe(
|
|
|
551
554
|
null_values=null_values,
|
|
552
555
|
ignore_errors=ignore_errors,
|
|
553
556
|
truncate_ragged_lines=truncate_ragged_lines,
|
|
557
|
+
n_rows=n_rows,
|
|
554
558
|
)
|
|
555
559
|
)
|
|
556
560
|
|
|
@@ -635,6 +639,7 @@ def load_file(
|
|
|
635
639
|
null_values: list[str] | None = None,
|
|
636
640
|
ignore_errors: bool = False,
|
|
637
641
|
truncate_ragged_lines: bool = False,
|
|
642
|
+
n_rows: int | None = None,
|
|
638
643
|
) -> list[Source]:
|
|
639
644
|
"""Load a single file.
|
|
640
645
|
|
|
@@ -660,6 +665,8 @@ def load_file(
|
|
|
660
665
|
schema_overrides: Optional dictionary of column name to Polars data type to override inferred schema.
|
|
661
666
|
null_values: List of values to interpret as null when reading CSV/TSV files. Defaults to None.
|
|
662
667
|
ignore_errors: Whether to ignore errors when reading CSV/TSV files.
|
|
668
|
+
truncate_ragged_lines: Whether to truncate ragged lines when reading CSV/TSV files. Defaults to False.
|
|
669
|
+
n_rows: Number of rows to read from CSV/TSV files. Defaults to None (read all rows).
|
|
663
670
|
|
|
664
671
|
Returns:
|
|
665
672
|
List of `Source` objects.
|
|
@@ -684,6 +691,7 @@ def load_file(
|
|
|
684
691
|
null_values=null_values,
|
|
685
692
|
ignore_errors=ignore_errors,
|
|
686
693
|
truncate_ragged_lines=truncate_ragged_lines,
|
|
694
|
+
n_rows=n_rows,
|
|
687
695
|
)
|
|
688
696
|
data.append(Source(lf, filename, filepath.stem))
|
|
689
697
|
elif file_format in ("xlsx", "xls"):
|
|
@@ -740,6 +748,8 @@ def load_file(
|
|
|
740
748
|
schema_overrides=schema_overrides,
|
|
741
749
|
null_values=null_values,
|
|
742
750
|
ignore_errors=ignore_errors,
|
|
751
|
+
truncate_ragged_lines=truncate_ragged_lines,
|
|
752
|
+
n_rows=n_rows,
|
|
743
753
|
)
|
|
744
754
|
|
|
745
755
|
return data
|
{dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/data_frame_table.py
RENAMED
|
@@ -1755,13 +1755,14 @@ class DataFrameTable(DataTable):
|
|
|
1755
1755
|
max_width = label_width
|
|
1756
1756
|
|
|
1757
1757
|
# Scan through all loaded rows that are visible to find max width
|
|
1758
|
-
for
|
|
1759
|
-
|
|
1760
|
-
|
|
1758
|
+
for row_start, row_end in self.loaded_ranges:
|
|
1759
|
+
for row_idx in range(row_start, row_end):
|
|
1760
|
+
cell_value = str(self.df.item(row_idx, col_idx))
|
|
1761
|
+
cell_width = measure(self.app.console, cell_value, 1)
|
|
1761
1762
|
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1763
|
+
if cell_width > max_width:
|
|
1764
|
+
need_expand = True
|
|
1765
|
+
max_width = cell_width
|
|
1765
1766
|
|
|
1766
1767
|
if not need_expand:
|
|
1767
1768
|
return
|
|
@@ -2198,9 +2199,8 @@ class DataFrameTable(DataTable):
|
|
|
2198
2199
|
|
|
2199
2200
|
# Also update the view if applicable
|
|
2200
2201
|
if self.df_view is not None:
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
)
|
|
2202
|
+
lf_updated = self.df.lazy().select(RID, pl.col(col_name))
|
|
2203
|
+
self.df_view = self.df_view.lazy().update(lf_updated, on=RID, include_nulls=True).collect()
|
|
2204
2204
|
|
|
2205
2205
|
# Recreate table for display
|
|
2206
2206
|
self.setup_table()
|
|
@@ -2997,10 +2997,10 @@ class DataFrameTable(DataTable):
|
|
|
2997
2997
|
# self.notify("No selections to clear", title="Clear Selections and Matches", severity="warning")
|
|
2998
2998
|
return
|
|
2999
2999
|
|
|
3000
|
-
row_count = len(self.selected_rows | set(self.matches.keys()))
|
|
3000
|
+
# row_count = len(self.selected_rows | set(self.matches.keys()))
|
|
3001
3001
|
|
|
3002
3002
|
# Add to history
|
|
3003
|
-
self.add_history("Cleared all
|
|
3003
|
+
self.add_history("Cleared all selections and matches")
|
|
3004
3004
|
|
|
3005
3005
|
# Clear all selections
|
|
3006
3006
|
self.selected_rows = set()
|
|
@@ -3009,7 +3009,7 @@ class DataFrameTable(DataTable):
|
|
|
3009
3009
|
# Recreate table for display
|
|
3010
3010
|
self.setup_table()
|
|
3011
3011
|
|
|
3012
|
-
self.notify(f"Cleared selections for [$success]{row_count}[/] rows", title="Clear Selections and Matches")
|
|
3012
|
+
# self.notify(f"Cleared selections for [$success]{row_count}[/] rows", title="Clear Selections and Matches")
|
|
3013
3013
|
|
|
3014
3014
|
# Find & Replace
|
|
3015
3015
|
def find_matches(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/data_frame_help_panel.py
RENAMED
|
File without changes
|
{dataframe_textual-2.6.0 → dataframe_textual-2.7.0}/src/dataframe_textual/data_frame_viewer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|