dataframe-textual 0.1.0__tar.gz → 0.3.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-0.1.0 → dataframe_textual-0.3.0}/PKG-INFO +60 -34
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/README.md +54 -27
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/main.py +1 -1
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/pyproject.toml +13 -9
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/table_screen.py +9 -5
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/uv.lock +10 -4
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/.gitignore +0 -0
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/.python-version +0 -0
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/LICENSE +0 -0
- {dataframe_textual-0.1.0 → dataframe_textual-0.3.0}/screenshot.png +0 -0
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/__init__.py +0 -0
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/__main__.py +0 -0
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/common.py +0 -0
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/data_frame_help_panel.py +0 -0
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/data_frame_table.py +0 -0
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/data_frame_viewer.py +0 -0
- {dataframe_textual-0.1.0/src/dataframe_viewer → dataframe_textual-0.3.0/src/dataframe_textual}/yes_no_screen.py +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataframe-textual
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Interactive CSV/Excel viewer for the terminal (Textual TUI)
|
|
5
|
-
Project-URL: Homepage, https://github.com/need47/dataframe-
|
|
6
|
-
Project-URL: Repository, https://github.com/need47/dataframe-
|
|
7
|
-
Project-URL: Documentation, https://github.com/need47/dataframe-
|
|
8
|
-
Project-URL: Bug Tracker, https://github.com/need47/dataframe-
|
|
5
|
+
Project-URL: Homepage, https://github.com/need47/dataframe-textual
|
|
6
|
+
Project-URL: Repository, https://github.com/need47/dataframe-textual.git
|
|
7
|
+
Project-URL: Documentation, https://github.com/need47/dataframe-textual#readme
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/need47/dataframe-textual/issues
|
|
9
9
|
Author-email: Tiejun Cheng <need47@gmail.com>
|
|
10
10
|
License: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Keywords: csv,data-analysis,interactive,polars,terminal,textual,tui,viewer
|
|
12
|
+
Keywords: csv,data-analysis,excel,interactive,polars,terminal,textual,tui,viewer
|
|
13
13
|
Classifier: Development Status :: 3 - Alpha
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -29,7 +29,6 @@ Classifier: Topic :: Utilities
|
|
|
29
29
|
Classifier: Typing :: Typed
|
|
30
30
|
Requires-Python: >=3.11
|
|
31
31
|
Requires-Dist: polars>=1.34.0
|
|
32
|
-
Requires-Dist: rich>=14.2.0
|
|
33
32
|
Requires-Dist: textual>=1.0.0
|
|
34
33
|
Provides-Extra: dev
|
|
35
34
|
Requires-Dist: textual-dev>=1.8.0; extra == 'dev'
|
|
@@ -38,11 +37,11 @@ Requires-Dist: fastexcel>=0.16.0; extra == 'excel'
|
|
|
38
37
|
Requires-Dist: xlsxwriter>=3.2.9; extra == 'excel'
|
|
39
38
|
Description-Content-Type: text/markdown
|
|
40
39
|
|
|
41
|
-
# DataFrame Viewer
|
|
40
|
+
# DataFrame Viewer/Editor
|
|
42
41
|
|
|
43
|
-
A powerful, interactive terminal-based CSV viewer built with Python, Polars, and Textual. Inspired by VisiData, this tool provides smooth keyboard navigation, data manipulation, and a clean interface for exploring
|
|
42
|
+
A powerful, interactive terminal-based CSV/Excel viewer/editor built with Python, Polars, and Textual. Inspired by VisiData, this tool provides smooth keyboard navigation, data manipulation, and a clean interface for exploring tabular data directly in your terminal. Now with **multi-file support for simultaneous data comparison**!
|
|
44
43
|
|
|
45
|
-

|
|
46
45
|
|
|
47
46
|
## Features
|
|
48
47
|
|
|
@@ -68,21 +67,48 @@ A powerful, interactive terminal-based CSV viewer built with Python, Polars, and
|
|
|
68
67
|
|
|
69
68
|
## Installation
|
|
70
69
|
|
|
71
|
-
### Using
|
|
70
|
+
### Using pip
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Install from PyPI
|
|
74
|
+
pip install dataframe-textual
|
|
75
|
+
|
|
76
|
+
# With Excel support (fastexcel, xlsxwriter)
|
|
77
|
+
pip install dataframe-textual[excel]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then run:
|
|
81
|
+
```bash
|
|
82
|
+
dataframe-textual <csv_file>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Using uv
|
|
72
86
|
|
|
73
87
|
```bash
|
|
88
|
+
# Quick run using uvx without installation
|
|
89
|
+
uvx https://github.com/need47/dataframe-textual.git <csvfile>
|
|
90
|
+
|
|
74
91
|
# Clone or download the project
|
|
75
|
-
cd dataframe-
|
|
92
|
+
cd dataframe-textual
|
|
76
93
|
|
|
77
94
|
# Run directly with uv
|
|
78
95
|
uv run python main.py <csv_file>
|
|
96
|
+
|
|
97
|
+
#
|
|
79
98
|
```
|
|
80
99
|
|
|
81
|
-
###
|
|
100
|
+
### Development installation
|
|
82
101
|
|
|
83
102
|
```bash
|
|
84
|
-
|
|
85
|
-
|
|
103
|
+
# Clone the repository
|
|
104
|
+
git clone https://github.com/need47/dataframe-textual.git
|
|
105
|
+
cd dataframe-textual
|
|
106
|
+
|
|
107
|
+
# Install from local source
|
|
108
|
+
pip install -e .
|
|
109
|
+
|
|
110
|
+
# Or with development dependencies
|
|
111
|
+
pip install -e ".[excel,dev]"
|
|
86
112
|
```
|
|
87
113
|
|
|
88
114
|
## Usage
|
|
@@ -90,31 +116,31 @@ python main.py <csv_file>
|
|
|
90
116
|
### Basic Usage - Single File
|
|
91
117
|
|
|
92
118
|
```bash
|
|
93
|
-
#
|
|
119
|
+
# After pip install dataframe-textual
|
|
120
|
+
dataframe-textual pokemon.csv
|
|
121
|
+
|
|
122
|
+
# Or if running from source
|
|
94
123
|
python main.py pokemon.csv
|
|
95
124
|
|
|
96
125
|
# Or with uv
|
|
97
126
|
uv run python main.py pokemon.csv
|
|
98
127
|
|
|
99
128
|
# Read from stdin
|
|
100
|
-
cat data.csv |
|
|
101
|
-
|
|
129
|
+
cat data.csv | dataframe-textual
|
|
130
|
+
dataframe-textual < data.csv
|
|
102
131
|
```
|
|
103
132
|
|
|
104
133
|
### Multi-File Usage - Multiple Tabs
|
|
105
134
|
|
|
106
135
|
```bash
|
|
107
136
|
# Open multiple files in tabs
|
|
108
|
-
|
|
137
|
+
dataframe-textual file1.csv file2.csv file3.csv
|
|
109
138
|
|
|
110
139
|
# Open multiple sheets in tabs in an Excel file
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
# Or with uv
|
|
114
|
-
uv run python main.py file1.csv file2.csv file3.csv
|
|
140
|
+
dataframe-textual file.xlsx
|
|
115
141
|
|
|
116
142
|
# Mix files and stdin (file opens first, then read from stdin)
|
|
117
|
-
|
|
143
|
+
dataframe-textual data1.csv < data2.csv
|
|
118
144
|
```
|
|
119
145
|
|
|
120
146
|
When multiple files are opened:
|
|
@@ -411,35 +437,35 @@ Press `c` to copy:
|
|
|
411
437
|
|
|
412
438
|
```bash
|
|
413
439
|
# View Pokemon dataset
|
|
414
|
-
|
|
440
|
+
dataframe-textual pokemon.csv
|
|
415
441
|
|
|
416
442
|
# View Titanic dataset with analysis
|
|
417
|
-
|
|
443
|
+
dataframe-textual titanic.csv
|
|
418
444
|
|
|
419
445
|
# Filter and view specific columns
|
|
420
|
-
cut -d',' -f1,2,3 pokemon.csv |
|
|
446
|
+
cut -d',' -f1,2,3 pokemon.csv | dataframe-textual
|
|
421
447
|
|
|
422
448
|
# View with grep filter (then use | search in viewer)
|
|
423
|
-
grep "Fire" pokemon.csv |
|
|
449
|
+
grep "Fire" pokemon.csv | dataframe-textual
|
|
424
450
|
|
|
425
451
|
# Chain with other commands
|
|
426
|
-
cat data.csv | sort -t',' -k2 |
|
|
452
|
+
cat data.csv | sort -t',' -k2 | dataframe-textual
|
|
427
453
|
```
|
|
428
454
|
|
|
429
455
|
### Multi-File Examples
|
|
430
456
|
|
|
431
457
|
```bash
|
|
432
458
|
# Compare two versions of a dataset
|
|
433
|
-
|
|
459
|
+
dataframe-textual pokemon_v1.csv pokemon_v2.csv
|
|
434
460
|
|
|
435
461
|
# Side-by-side analysis of related files
|
|
436
|
-
|
|
462
|
+
dataframe-textual sales_2022.csv sales_2023.csv forecast_2024.csv
|
|
437
463
|
|
|
438
464
|
# Cross-reference datasets
|
|
439
|
-
|
|
465
|
+
dataframe-textual customers.csv orders.csv products.csv
|
|
440
466
|
|
|
441
467
|
# Start with one file, open others using Ctrl+O
|
|
442
|
-
|
|
468
|
+
dataframe-textual initial_data.csv
|
|
443
469
|
# Then press Ctrl+O to open more files interactively
|
|
444
470
|
```
|
|
445
471
|
|
|
@@ -448,7 +474,7 @@ python main.py initial_data.csv
|
|
|
448
474
|
```bash
|
|
449
475
|
# Start with a filtered file, compare with original
|
|
450
476
|
grep "status=active" data.csv > filtered.csv
|
|
451
|
-
|
|
477
|
+
dataframe-textual data.csv filtered.csv
|
|
452
478
|
# Now compare the full dataset with the filtered version in separate tabs
|
|
453
479
|
|
|
454
480
|
# Multi-step analysis
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# DataFrame Viewer
|
|
1
|
+
# DataFrame Viewer/Editor
|
|
2
2
|
|
|
3
|
-
A powerful, interactive terminal-based CSV viewer built with Python, Polars, and Textual. Inspired by VisiData, this tool provides smooth keyboard navigation, data manipulation, and a clean interface for exploring
|
|
3
|
+
A powerful, interactive terminal-based CSV/Excel viewer/editor built with Python, Polars, and Textual. Inspired by VisiData, this tool provides smooth keyboard navigation, data manipulation, and a clean interface for exploring tabular data directly in your terminal. Now with **multi-file support for simultaneous data comparison**!
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
@@ -28,21 +28,48 @@ A powerful, interactive terminal-based CSV viewer built with Python, Polars, and
|
|
|
28
28
|
|
|
29
29
|
## Installation
|
|
30
30
|
|
|
31
|
-
### Using
|
|
31
|
+
### Using pip
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Install from PyPI
|
|
35
|
+
pip install dataframe-textual
|
|
36
|
+
|
|
37
|
+
# With Excel support (fastexcel, xlsxwriter)
|
|
38
|
+
pip install dataframe-textual[excel]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Then run:
|
|
42
|
+
```bash
|
|
43
|
+
dataframe-textual <csv_file>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Using uv
|
|
32
47
|
|
|
33
48
|
```bash
|
|
49
|
+
# Quick run using uvx without installation
|
|
50
|
+
uvx https://github.com/need47/dataframe-textual.git <csvfile>
|
|
51
|
+
|
|
34
52
|
# Clone or download the project
|
|
35
|
-
cd dataframe-
|
|
53
|
+
cd dataframe-textual
|
|
36
54
|
|
|
37
55
|
# Run directly with uv
|
|
38
56
|
uv run python main.py <csv_file>
|
|
57
|
+
|
|
58
|
+
#
|
|
39
59
|
```
|
|
40
60
|
|
|
41
|
-
###
|
|
61
|
+
### Development installation
|
|
42
62
|
|
|
43
63
|
```bash
|
|
44
|
-
|
|
45
|
-
|
|
64
|
+
# Clone the repository
|
|
65
|
+
git clone https://github.com/need47/dataframe-textual.git
|
|
66
|
+
cd dataframe-textual
|
|
67
|
+
|
|
68
|
+
# Install from local source
|
|
69
|
+
pip install -e .
|
|
70
|
+
|
|
71
|
+
# Or with development dependencies
|
|
72
|
+
pip install -e ".[excel,dev]"
|
|
46
73
|
```
|
|
47
74
|
|
|
48
75
|
## Usage
|
|
@@ -50,31 +77,31 @@ python main.py <csv_file>
|
|
|
50
77
|
### Basic Usage - Single File
|
|
51
78
|
|
|
52
79
|
```bash
|
|
53
|
-
#
|
|
80
|
+
# After pip install dataframe-textual
|
|
81
|
+
dataframe-textual pokemon.csv
|
|
82
|
+
|
|
83
|
+
# Or if running from source
|
|
54
84
|
python main.py pokemon.csv
|
|
55
85
|
|
|
56
86
|
# Or with uv
|
|
57
87
|
uv run python main.py pokemon.csv
|
|
58
88
|
|
|
59
89
|
# Read from stdin
|
|
60
|
-
cat data.csv |
|
|
61
|
-
|
|
90
|
+
cat data.csv | dataframe-textual
|
|
91
|
+
dataframe-textual < data.csv
|
|
62
92
|
```
|
|
63
93
|
|
|
64
94
|
### Multi-File Usage - Multiple Tabs
|
|
65
95
|
|
|
66
96
|
```bash
|
|
67
97
|
# Open multiple files in tabs
|
|
68
|
-
|
|
98
|
+
dataframe-textual file1.csv file2.csv file3.csv
|
|
69
99
|
|
|
70
100
|
# Open multiple sheets in tabs in an Excel file
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
# Or with uv
|
|
74
|
-
uv run python main.py file1.csv file2.csv file3.csv
|
|
101
|
+
dataframe-textual file.xlsx
|
|
75
102
|
|
|
76
103
|
# Mix files and stdin (file opens first, then read from stdin)
|
|
77
|
-
|
|
104
|
+
dataframe-textual data1.csv < data2.csv
|
|
78
105
|
```
|
|
79
106
|
|
|
80
107
|
When multiple files are opened:
|
|
@@ -371,35 +398,35 @@ Press `c` to copy:
|
|
|
371
398
|
|
|
372
399
|
```bash
|
|
373
400
|
# View Pokemon dataset
|
|
374
|
-
|
|
401
|
+
dataframe-textual pokemon.csv
|
|
375
402
|
|
|
376
403
|
# View Titanic dataset with analysis
|
|
377
|
-
|
|
404
|
+
dataframe-textual titanic.csv
|
|
378
405
|
|
|
379
406
|
# Filter and view specific columns
|
|
380
|
-
cut -d',' -f1,2,3 pokemon.csv |
|
|
407
|
+
cut -d',' -f1,2,3 pokemon.csv | dataframe-textual
|
|
381
408
|
|
|
382
409
|
# View with grep filter (then use | search in viewer)
|
|
383
|
-
grep "Fire" pokemon.csv |
|
|
410
|
+
grep "Fire" pokemon.csv | dataframe-textual
|
|
384
411
|
|
|
385
412
|
# Chain with other commands
|
|
386
|
-
cat data.csv | sort -t',' -k2 |
|
|
413
|
+
cat data.csv | sort -t',' -k2 | dataframe-textual
|
|
387
414
|
```
|
|
388
415
|
|
|
389
416
|
### Multi-File Examples
|
|
390
417
|
|
|
391
418
|
```bash
|
|
392
419
|
# Compare two versions of a dataset
|
|
393
|
-
|
|
420
|
+
dataframe-textual pokemon_v1.csv pokemon_v2.csv
|
|
394
421
|
|
|
395
422
|
# Side-by-side analysis of related files
|
|
396
|
-
|
|
423
|
+
dataframe-textual sales_2022.csv sales_2023.csv forecast_2024.csv
|
|
397
424
|
|
|
398
425
|
# Cross-reference datasets
|
|
399
|
-
|
|
426
|
+
dataframe-textual customers.csv orders.csv products.csv
|
|
400
427
|
|
|
401
428
|
# Start with one file, open others using Ctrl+O
|
|
402
|
-
|
|
429
|
+
dataframe-textual initial_data.csv
|
|
403
430
|
# Then press Ctrl+O to open more files interactively
|
|
404
431
|
```
|
|
405
432
|
|
|
@@ -408,7 +435,7 @@ python main.py initial_data.csv
|
|
|
408
435
|
```bash
|
|
409
436
|
# Start with a filtered file, compare with original
|
|
410
437
|
grep "status=active" data.csv > filtered.csv
|
|
411
|
-
|
|
438
|
+
dataframe-textual data.csv filtered.csv
|
|
412
439
|
# Now compare the full dataset with the filtered version in separate tabs
|
|
413
440
|
|
|
414
441
|
# Multi-step analysis
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dataframe-textual"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Interactive CSV/Excel viewer for the terminal (Textual TUI)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -12,7 +12,7 @@ license = {text = "MIT"}
|
|
|
12
12
|
authors = [
|
|
13
13
|
{name = "Tiejun Cheng", email = "need47@gmail.com"}
|
|
14
14
|
]
|
|
15
|
-
keywords = ["csv", "viewer", "terminal", "tui", "textual", "data-analysis", "polars", "interactive"]
|
|
15
|
+
keywords = ["csv", "excel", "viewer", "terminal", "tui", "textual", "data-analysis", "polars", "interactive"]
|
|
16
16
|
classifiers = [
|
|
17
17
|
"Development Status :: 3 - Alpha",
|
|
18
18
|
"Environment :: Console",
|
|
@@ -34,15 +34,14 @@ classifiers = [
|
|
|
34
34
|
]
|
|
35
35
|
dependencies = [
|
|
36
36
|
"polars>=1.34.0",
|
|
37
|
-
"rich>=14.2.0",
|
|
38
37
|
"textual>=1.0.0",
|
|
39
38
|
]
|
|
40
39
|
|
|
41
40
|
[project.urls]
|
|
42
|
-
Homepage = "https://github.com/need47/dataframe-
|
|
43
|
-
Repository = "https://github.com/need47/dataframe-
|
|
44
|
-
Documentation = "https://github.com/need47/dataframe-
|
|
45
|
-
"Bug Tracker" = "https://github.com/need47/dataframe-
|
|
41
|
+
Homepage = "https://github.com/need47/dataframe-textual"
|
|
42
|
+
Repository = "https://github.com/need47/dataframe-textual.git"
|
|
43
|
+
Documentation = "https://github.com/need47/dataframe-textual#readme"
|
|
44
|
+
"Bug Tracker" = "https://github.com/need47/dataframe-textual/issues"
|
|
46
45
|
|
|
47
46
|
[project.optional-dependencies]
|
|
48
47
|
excel = [
|
|
@@ -54,7 +53,12 @@ dev = [
|
|
|
54
53
|
]
|
|
55
54
|
|
|
56
55
|
[tool.hatch.build.targets.wheel]
|
|
57
|
-
packages = ["src/
|
|
56
|
+
packages = ["src/dataframe_textual"]
|
|
57
|
+
|
|
58
|
+
[dependency-groups]
|
|
59
|
+
dev = [
|
|
60
|
+
"textual-dev>=1.8.0",
|
|
61
|
+
]
|
|
58
62
|
|
|
59
63
|
[project.scripts]
|
|
60
|
-
dataframe-textual = "
|
|
64
|
+
dataframe-textual = "dataframe_textual.__main__:main"
|
|
@@ -6,6 +6,7 @@ import polars as pl
|
|
|
6
6
|
from rich.text import Text
|
|
7
7
|
from textual.app import ComposeResult
|
|
8
8
|
from textual.coordinate import Coordinate
|
|
9
|
+
from textual.renderables.bar import Bar
|
|
9
10
|
from textual.screen import ModalScreen
|
|
10
11
|
from textual.widgets import DataTable
|
|
11
12
|
|
|
@@ -136,6 +137,8 @@ class RowDetailScreen(TableScreen):
|
|
|
136
137
|
*_format_row([col, val], [None, dtype], apply_justify=False)
|
|
137
138
|
)
|
|
138
139
|
|
|
140
|
+
self.table.cursor_type = "row"
|
|
141
|
+
|
|
139
142
|
def on_key(self, event):
|
|
140
143
|
if event.key == "v":
|
|
141
144
|
# Filter the main table by the selected value
|
|
@@ -188,6 +191,7 @@ class FrequencyScreen(TableScreen):
|
|
|
188
191
|
self.table.add_column(Text(column, justify=dc.justify), key=column)
|
|
189
192
|
self.table.add_column(Text("Count", justify="right"), key="Count")
|
|
190
193
|
self.table.add_column(Text("%", justify="right"), key="%")
|
|
194
|
+
self.table.add_column(Text("Histogram", justify="left"), key="Histogram")
|
|
191
195
|
|
|
192
196
|
# Get style config for Int64 and Float64
|
|
193
197
|
ds_int = DtypeConfig("Int64")
|
|
@@ -204,16 +208,16 @@ class FrequencyScreen(TableScreen):
|
|
|
204
208
|
style=dc.style,
|
|
205
209
|
justify=dc.justify,
|
|
206
210
|
),
|
|
207
|
-
Text(
|
|
208
|
-
str(count),
|
|
209
|
-
style=ds_int.style,
|
|
210
|
-
justify=ds_int.justify,
|
|
211
|
-
),
|
|
211
|
+
Text(str(count), style=ds_int.style, justify=ds_int.justify),
|
|
212
212
|
Text(
|
|
213
213
|
f"{percentage:.2f}",
|
|
214
214
|
style=ds_float.style,
|
|
215
215
|
justify=ds_float.justify,
|
|
216
216
|
),
|
|
217
|
+
Bar(
|
|
218
|
+
highlight_range=(0.0, percentage / 100 * 10),
|
|
219
|
+
width=10,
|
|
220
|
+
),
|
|
217
221
|
key=str(row_idx + 1),
|
|
218
222
|
)
|
|
219
223
|
|
|
@@ -170,12 +170,11 @@ wheels = [
|
|
|
170
170
|
]
|
|
171
171
|
|
|
172
172
|
[[package]]
|
|
173
|
-
name = "dataframe-
|
|
174
|
-
version = "0.
|
|
173
|
+
name = "dataframe-textual"
|
|
174
|
+
version = "0.3.0"
|
|
175
175
|
source = { editable = "." }
|
|
176
176
|
dependencies = [
|
|
177
177
|
{ name = "polars" },
|
|
178
|
-
{ name = "rich" },
|
|
179
178
|
{ name = "textual" },
|
|
180
179
|
]
|
|
181
180
|
|
|
@@ -188,17 +187,24 @@ excel = [
|
|
|
188
187
|
{ name = "xlsxwriter" },
|
|
189
188
|
]
|
|
190
189
|
|
|
190
|
+
[package.dev-dependencies]
|
|
191
|
+
dev = [
|
|
192
|
+
{ name = "textual-dev" },
|
|
193
|
+
]
|
|
194
|
+
|
|
191
195
|
[package.metadata]
|
|
192
196
|
requires-dist = [
|
|
193
197
|
{ name = "fastexcel", marker = "extra == 'excel'", specifier = ">=0.16.0" },
|
|
194
198
|
{ name = "polars", specifier = ">=1.34.0" },
|
|
195
|
-
{ name = "rich", specifier = ">=14.2.0" },
|
|
196
199
|
{ name = "textual", specifier = ">=1.0.0" },
|
|
197
200
|
{ name = "textual-dev", marker = "extra == 'dev'", specifier = ">=1.8.0" },
|
|
198
201
|
{ name = "xlsxwriter", marker = "extra == 'excel'", specifier = ">=3.2.9" },
|
|
199
202
|
]
|
|
200
203
|
provides-extras = ["excel", "dev"]
|
|
201
204
|
|
|
205
|
+
[package.metadata.requires-dev]
|
|
206
|
+
dev = [{ name = "textual-dev", specifier = ">=1.8.0" }]
|
|
207
|
+
|
|
202
208
|
[[package]]
|
|
203
209
|
name = "fastexcel"
|
|
204
210
|
version = "0.16.0"
|
|
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
|