nbcat 0.13.2__tar.gz → 1.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.
- {nbcat-0.13.2 → nbcat-1.0.0}/.github/workflows/ci.yml +3 -1
- {nbcat-0.13.2 → nbcat-1.0.0}/PKG-INFO +35 -11
- {nbcat-0.13.2 → nbcat-1.0.0}/README.md +32 -8
- nbcat-1.0.0/docs/screenshot.png +0 -0
- nbcat-1.0.0/docs/screenshot2.png +0 -0
- nbcat-1.0.0/docs/screenshot3.png +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/pyproject.toml +5 -5
- nbcat-1.0.0/src/nbcat/__init__.py +1 -0
- nbcat-1.0.0/src/nbcat/image.py +26 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/src/nbcat/main.py +5 -3
- {nbcat-0.13.2 → nbcat-1.0.0}/src/nbcat/markdown.py +2 -5
- {nbcat-0.13.2 → nbcat-1.0.0}/uv.lock +14 -73
- nbcat-0.13.2/docs/screenshot.png +0 -0
- nbcat-0.13.2/docs/screenshot2.png +0 -0
- nbcat-0.13.2/src/nbcat/__init__.py +0 -1
- nbcat-0.13.2/src/nbcat/image.py +0 -31
- {nbcat-0.13.2 → nbcat-1.0.0}/.gitignore +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/LICENSE +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/Makefile +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/src/nbcat/enums.py +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/src/nbcat/exceptions.py +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/src/nbcat/pager.py +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/src/nbcat/py.typed +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/src/nbcat/schemas.py +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/invalid.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/many_tracebacks.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/no_min_version.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/sqlite.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test3.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test3_no_metadata.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test3_no_min_version.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test3_no_worksheets.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test3_worksheet_with_no_cells.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test4.5.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test4.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test4custom.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test4docinfo.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test4jupyter_metadata.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/assets/test4jupyter_metadata_timings.ipynb +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/conftest.py +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/test_read_notebook.py +0 -0
- {nbcat-0.13.2 → nbcat-1.0.0}/tests/test_render_cell.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: nbcat
|
3
|
-
Version: 0.
|
3
|
+
Version: 1.0.0
|
4
4
|
Summary: cat for jupyter notebooks
|
5
5
|
Project-URL: Homepage, https://github.com/akopdev/nbcat
|
6
6
|
Project-URL: Repository, https://github.com/akopdev/nbcat
|
@@ -28,14 +28,14 @@ License: MIT License
|
|
28
28
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
29
29
|
SOFTWARE.
|
30
30
|
License-File: LICENSE
|
31
|
-
Requires-Python: >=3.
|
31
|
+
Requires-Python: >=3.10
|
32
32
|
Requires-Dist: argcomplete
|
33
33
|
Requires-Dist: markdownify
|
34
34
|
Requires-Dist: pydantic
|
35
35
|
Requires-Dist: requests
|
36
36
|
Requires-Dist: rich
|
37
37
|
Requires-Dist: textual
|
38
|
-
Requires-Dist:
|
38
|
+
Requires-Dist: textual-image[textual]
|
39
39
|
Provides-Extra: dev
|
40
40
|
Requires-Dist: pytest; extra == 'dev'
|
41
41
|
Requires-Dist: pytest-cov; extra == 'dev'
|
@@ -44,9 +44,9 @@ Requires-Dist: pytest-responses; extra == 'dev'
|
|
44
44
|
Requires-Dist: ruff; extra == 'dev'
|
45
45
|
Description-Content-Type: text/markdown
|
46
46
|
|
47
|
-
|
47
|
+
<h1 align="center">nbcat: Jupyter notebooks viewer</h1>
|
48
48
|
|
49
|
-
|
49
|
+
[nbcat](https://github.com/akopdev/nbcat) let you preview Jupyter notebooks directly in your terminal. Think of it as `cat`, but for `.ipynb` files.
|
50
50
|
|
51
51
|
<p align="center">
|
52
52
|
<a href="docs/screenshot.png" target="blank"><img src="docs/screenshot.png" width="400" /></a>
|
@@ -58,7 +58,7 @@ Description-Content-Type: text/markdown
|
|
58
58
|
- Very fast and lightweight with minimal dependencies.
|
59
59
|
- Preview remote notebooks without downloading them.
|
60
60
|
- Enable paginated view mode with keyboard navigation (similar to `less`).
|
61
|
-
- Supports image rendering
|
61
|
+
- Supports image rendering in high resolution
|
62
62
|
- Supports for all Jupyter notebook versions, including old legacy formats.
|
63
63
|
|
64
64
|
## Motivation
|
@@ -74,12 +74,12 @@ Please note, that `nbcat` doesn't aim to replace JupyterLab. If you need a full-
|
|
74
74
|
## Installation
|
75
75
|
|
76
76
|
```bash
|
77
|
-
# Install from PyPI
|
78
|
-
pip install nbcat
|
77
|
+
# Install from PyPI (recommended)
|
78
|
+
$ pip install nbcat
|
79
79
|
|
80
80
|
# Install via Homebrew
|
81
|
-
brew tab akopdev/formulas/nbcat
|
82
|
-
brew install nbcat
|
81
|
+
$ brew tab akopdev/formulas/nbcat
|
82
|
+
$ brew install nbcat
|
83
83
|
```
|
84
84
|
|
85
85
|
## Quickstart
|
@@ -93,13 +93,37 @@ You can pass URLs as well.
|
|
93
93
|
```bash
|
94
94
|
$ nbcat https://raw.githubusercontent.com/akopdev/nbcat/refs/heads/main/tests/assets/test4.ipynb
|
95
95
|
```
|
96
|
+
In most cases system `less` will render images in low resolution. Consider using an internal pager instead:
|
96
97
|
|
97
|
-
|
98
|
+
```bash
|
99
|
+
$ nbcat notebook.ipynb --page
|
100
|
+
```
|
101
|
+
## Integrations
|
102
|
+
|
103
|
+
`nbcat` is designed to integrate seamlessly with other tools. Here are a few examples of how easily it can be done.
|
104
|
+
|
105
|
+
### FZF (Fuzzy finder)
|
106
|
+
|
107
|
+
List all `.ipynb` files and use `nbcat` to preview them:
|
98
108
|
|
99
109
|
```bash
|
100
110
|
find . -type f -name "*.ipynb" | fzf --preview 'nbcat {}'
|
101
111
|
```
|
102
112
|
|
113
|
+
### Ranger
|
114
|
+
To enable previews in Ranger, add the `ipynb` extension to the `handle_extension` function in `~/.config/ranger/scope.sh`:
|
115
|
+
|
116
|
+
```bash
|
117
|
+
...
|
118
|
+
|
119
|
+
handle_extension() {
|
120
|
+
case "${FILE_EXTENSION_LOWER}" in
|
121
|
+
ipynb)
|
122
|
+
nbcat "${FILE_PATH}" && exit 5
|
123
|
+
exit 1;;
|
124
|
+
...
|
125
|
+
```
|
126
|
+
|
103
127
|
## Testing & Development
|
104
128
|
|
105
129
|
Run the tests:
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
<h1 align="center">nbcat: Jupyter notebooks viewer</h1>
|
2
2
|
|
3
|
-
|
3
|
+
[nbcat](https://github.com/akopdev/nbcat) let you preview Jupyter notebooks directly in your terminal. Think of it as `cat`, but for `.ipynb` files.
|
4
4
|
|
5
5
|
<p align="center">
|
6
6
|
<a href="docs/screenshot.png" target="blank"><img src="docs/screenshot.png" width="400" /></a>
|
@@ -12,7 +12,7 @@
|
|
12
12
|
- Very fast and lightweight with minimal dependencies.
|
13
13
|
- Preview remote notebooks without downloading them.
|
14
14
|
- Enable paginated view mode with keyboard navigation (similar to `less`).
|
15
|
-
- Supports image rendering
|
15
|
+
- Supports image rendering in high resolution
|
16
16
|
- Supports for all Jupyter notebook versions, including old legacy formats.
|
17
17
|
|
18
18
|
## Motivation
|
@@ -28,12 +28,12 @@ Please note, that `nbcat` doesn't aim to replace JupyterLab. If you need a full-
|
|
28
28
|
## Installation
|
29
29
|
|
30
30
|
```bash
|
31
|
-
# Install from PyPI
|
32
|
-
pip install nbcat
|
31
|
+
# Install from PyPI (recommended)
|
32
|
+
$ pip install nbcat
|
33
33
|
|
34
34
|
# Install via Homebrew
|
35
|
-
brew tab akopdev/formulas/nbcat
|
36
|
-
brew install nbcat
|
35
|
+
$ brew tab akopdev/formulas/nbcat
|
36
|
+
$ brew install nbcat
|
37
37
|
```
|
38
38
|
|
39
39
|
## Quickstart
|
@@ -47,13 +47,37 @@ You can pass URLs as well.
|
|
47
47
|
```bash
|
48
48
|
$ nbcat https://raw.githubusercontent.com/akopdev/nbcat/refs/heads/main/tests/assets/test4.ipynb
|
49
49
|
```
|
50
|
+
In most cases system `less` will render images in low resolution. Consider using an internal pager instead:
|
50
51
|
|
51
|
-
|
52
|
+
```bash
|
53
|
+
$ nbcat notebook.ipynb --page
|
54
|
+
```
|
55
|
+
## Integrations
|
56
|
+
|
57
|
+
`nbcat` is designed to integrate seamlessly with other tools. Here are a few examples of how easily it can be done.
|
58
|
+
|
59
|
+
### FZF (Fuzzy finder)
|
60
|
+
|
61
|
+
List all `.ipynb` files and use `nbcat` to preview them:
|
52
62
|
|
53
63
|
```bash
|
54
64
|
find . -type f -name "*.ipynb" | fzf --preview 'nbcat {}'
|
55
65
|
```
|
56
66
|
|
67
|
+
### Ranger
|
68
|
+
To enable previews in Ranger, add the `ipynb` extension to the `handle_extension` function in `~/.config/ranger/scope.sh`:
|
69
|
+
|
70
|
+
```bash
|
71
|
+
...
|
72
|
+
|
73
|
+
handle_extension() {
|
74
|
+
case "${FILE_EXTENSION_LOWER}" in
|
75
|
+
ipynb)
|
76
|
+
nbcat "${FILE_PATH}" && exit 5
|
77
|
+
exit 1;;
|
78
|
+
...
|
79
|
+
```
|
80
|
+
|
57
81
|
## Testing & Development
|
58
82
|
|
59
83
|
Run the tests:
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "nbcat"
|
3
|
-
version = "0.
|
3
|
+
version = "1.0.0"
|
4
4
|
description = "cat for jupyter notebooks"
|
5
5
|
authors = [
|
6
6
|
{ name = "Akop Kesheshyan", email = "devnull@akop.dev" }
|
@@ -10,15 +10,15 @@ maintainers = [
|
|
10
10
|
]
|
11
11
|
license = {file = "LICENSE"}
|
12
12
|
readme = "README.md"
|
13
|
-
requires-python = ">=3.
|
13
|
+
requires-python = ">=3.10"
|
14
14
|
dependencies = [
|
15
15
|
"argcomplete",
|
16
|
-
"
|
16
|
+
"markdownify",
|
17
17
|
"pydantic",
|
18
|
+
"requests",
|
18
19
|
"rich",
|
19
|
-
"timg",
|
20
20
|
"textual",
|
21
|
-
"
|
21
|
+
"textual-image[textual]",
|
22
22
|
]
|
23
23
|
|
24
24
|
[project.optional-dependencies]
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "1.0.0"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import shutil
|
2
|
+
from io import BytesIO
|
3
|
+
|
4
|
+
from PIL import Image as PilImage
|
5
|
+
from textual_image.renderable import Image
|
6
|
+
from textual_image.renderable.halfcell import Image as HalfcellImage
|
7
|
+
from textual_image.renderable.sixel import Image as SixelImage
|
8
|
+
from textual_image.renderable.tgp import Image as TGPImage
|
9
|
+
from textual_image.renderable.unicode import Image as UnicodeImage
|
10
|
+
|
11
|
+
|
12
|
+
def render_image(image_content: bytes) -> TGPImage | SixelImage | HalfcellImage | UnicodeImage:
|
13
|
+
"""
|
14
|
+
Render an image from raw byte content and adjusts it to fit the terminal width.
|
15
|
+
|
16
|
+
Args:
|
17
|
+
image_content (bytes): The raw byte content of the image.
|
18
|
+
|
19
|
+
Returns
|
20
|
+
-------
|
21
|
+
TGPImage | SixelImage | HalfcellImage | UnicodeImage: A terminal-compatible image
|
22
|
+
object adjusted to the current terminal width.
|
23
|
+
"""
|
24
|
+
image = PilImage.open(BytesIO(image_content))
|
25
|
+
width = min(image.size[0], shutil.get_terminal_size()[0])
|
26
|
+
return Image(image, width=width, height="auto")
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import argparse
|
2
|
+
import base64
|
2
3
|
import sys
|
3
4
|
from pathlib import Path
|
4
5
|
|
@@ -14,6 +15,8 @@ from rich.pretty import Pretty
|
|
14
15
|
from rich.syntax import Syntax
|
15
16
|
from rich.text import Text
|
16
17
|
|
18
|
+
from nbcat.image import render_image
|
19
|
+
|
17
20
|
from . import __version__
|
18
21
|
from .enums import CellType, OutputCellType
|
19
22
|
from .exceptions import (
|
@@ -21,7 +24,6 @@ from .exceptions import (
|
|
21
24
|
NotebookNotFoundError,
|
22
25
|
UnsupportedNotebookTypeError,
|
23
26
|
)
|
24
|
-
from .image import Image
|
25
27
|
from .markdown import Markdown
|
26
28
|
from .pager import Pager
|
27
29
|
from .schemas import Cell, Notebook
|
@@ -94,8 +96,8 @@ def render_cell(cell: Cell) -> RenderableType:
|
|
94
96
|
def _render_raw(input: str) -> Text:
|
95
97
|
return Text(input)
|
96
98
|
|
97
|
-
def _render_image(input: str) ->
|
98
|
-
return
|
99
|
+
def _render_image(input: str) -> RenderableType:
|
100
|
+
return render_image(base64.b64decode(input.replace("\n", "")))
|
99
101
|
|
100
102
|
def _render_json(input: str) -> Pretty:
|
101
103
|
return Pretty(input)
|
@@ -10,7 +10,6 @@
|
|
10
10
|
|
11
11
|
from __future__ import annotations
|
12
12
|
|
13
|
-
import base64
|
14
13
|
from pathlib import Path
|
15
14
|
from typing import ClassVar
|
16
15
|
|
@@ -19,7 +18,7 @@ from rich import markdown as md
|
|
19
18
|
from rich.console import Console, ConsoleOptions, RenderResult
|
20
19
|
from rich.text import Text
|
21
20
|
|
22
|
-
from .image import
|
21
|
+
from .image import render_image
|
23
22
|
|
24
23
|
|
25
24
|
class Heading(md.Heading):
|
@@ -53,9 +52,7 @@ class ImageItem(md.ImageItem):
|
|
53
52
|
except requests.RequestException:
|
54
53
|
return super().__rich_console__(console, options)
|
55
54
|
if image_content:
|
56
|
-
|
57
|
-
image = base64.b64encode(image_content).decode("utf-8")
|
58
|
-
return Image(image).__rich_console__(console, options)
|
55
|
+
return render_image(image_content).__rich_console__(console, options)
|
59
56
|
return super().__rich_console__(console, options)
|
60
57
|
|
61
58
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
version = 1
|
2
2
|
revision = 2
|
3
|
-
requires-python = ">=3.
|
3
|
+
requires-python = ">=3.10"
|
4
4
|
|
5
5
|
[[package]]
|
6
6
|
name = "annotated-types"
|
@@ -100,19 +100,6 @@ wheels = [
|
|
100
100
|
{ url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732, upload-time = "2024-12-24T18:11:22.774Z" },
|
101
101
|
{ url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391, upload-time = "2024-12-24T18:11:24.139Z" },
|
102
102
|
{ url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702, upload-time = "2024-12-24T18:11:26.535Z" },
|
103
|
-
{ url = "https://files.pythonhosted.org/packages/7f/c0/b913f8f02836ed9ab32ea643c6fe4d3325c3d8627cf6e78098671cafff86/charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", size = 197867, upload-time = "2024-12-24T18:12:10.438Z" },
|
104
|
-
{ url = "https://files.pythonhosted.org/packages/0f/6c/2bee440303d705b6fb1e2ec789543edec83d32d258299b16eed28aad48e0/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", size = 141385, upload-time = "2024-12-24T18:12:11.847Z" },
|
105
|
-
{ url = "https://files.pythonhosted.org/packages/3d/04/cb42585f07f6f9fd3219ffb6f37d5a39b4fd2db2355b23683060029c35f7/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", size = 151367, upload-time = "2024-12-24T18:12:13.177Z" },
|
106
|
-
{ url = "https://files.pythonhosted.org/packages/54/54/2412a5b093acb17f0222de007cc129ec0e0df198b5ad2ce5699355269dfe/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", size = 143928, upload-time = "2024-12-24T18:12:14.497Z" },
|
107
|
-
{ url = "https://files.pythonhosted.org/packages/5a/6d/e2773862b043dcf8a221342954f375392bb2ce6487bcd9f2c1b34e1d6781/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", size = 146203, upload-time = "2024-12-24T18:12:15.731Z" },
|
108
|
-
{ url = "https://files.pythonhosted.org/packages/b9/f8/ca440ef60d8f8916022859885f231abb07ada3c347c03d63f283bec32ef5/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", size = 148082, upload-time = "2024-12-24T18:12:18.641Z" },
|
109
|
-
{ url = "https://files.pythonhosted.org/packages/04/d2/42fd330901aaa4b805a1097856c2edf5095e260a597f65def493f4b8c833/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", size = 142053, upload-time = "2024-12-24T18:12:20.036Z" },
|
110
|
-
{ url = "https://files.pythonhosted.org/packages/9e/af/3a97a4fa3c53586f1910dadfc916e9c4f35eeada36de4108f5096cb7215f/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", size = 150625, upload-time = "2024-12-24T18:12:22.804Z" },
|
111
|
-
{ url = "https://files.pythonhosted.org/packages/26/ae/23d6041322a3556e4da139663d02fb1b3c59a23ab2e2b56432bd2ad63ded/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", size = 153549, upload-time = "2024-12-24T18:12:24.163Z" },
|
112
|
-
{ url = "https://files.pythonhosted.org/packages/94/22/b8f2081c6a77cb20d97e57e0b385b481887aa08019d2459dc2858ed64871/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", size = 150945, upload-time = "2024-12-24T18:12:25.415Z" },
|
113
|
-
{ url = "https://files.pythonhosted.org/packages/c7/0b/c5ec5092747f801b8b093cdf5610e732b809d6cb11f4c51e35fc28d1d389/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", size = 146595, upload-time = "2024-12-24T18:12:28.03Z" },
|
114
|
-
{ url = "https://files.pythonhosted.org/packages/0c/5a/0b59704c38470df6768aa154cc87b1ac7c9bb687990a1559dc8765e8627e/charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", size = 95453, upload-time = "2024-12-24T18:12:29.569Z" },
|
115
|
-
{ url = "https://files.pythonhosted.org/packages/85/2d/a9790237cb4d01a6d57afadc8573c8b73c609ade20b80f4cda30802009ee/charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", size = 102811, upload-time = "2024-12-24T18:12:30.83Z" },
|
116
103
|
{ url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload-time = "2024-12-24T18:12:32.852Z" },
|
117
104
|
]
|
118
105
|
|
@@ -181,16 +168,6 @@ wheels = [
|
|
181
168
|
{ url = "https://files.pythonhosted.org/packages/58/e9/8fb8e0ff6bef5e170ee19d59ca694f9001b2ec085dc99b4f65c128bb3f9a/coverage-7.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", size = 255116, upload-time = "2025-03-30T20:36:18.033Z" },
|
182
169
|
{ url = "https://files.pythonhosted.org/packages/56/b0/d968ecdbe6fe0a863de7169bbe9e8a476868959f3af24981f6a10d2b6924/coverage-7.8.0-cp313-cp313t-win32.whl", hash = "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", size = 214909, upload-time = "2025-03-30T20:36:19.644Z" },
|
183
170
|
{ url = "https://files.pythonhosted.org/packages/87/e9/d6b7ef9fecf42dfb418d93544af47c940aa83056c49e6021a564aafbc91f/coverage-7.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", size = 216068, upload-time = "2025-03-30T20:36:21.282Z" },
|
184
|
-
{ url = "https://files.pythonhosted.org/packages/60/0c/5da94be095239814bf2730a28cffbc48d6df4304e044f80d39e1ae581997/coverage-7.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f", size = 211377, upload-time = "2025-03-30T20:36:23.298Z" },
|
185
|
-
{ url = "https://files.pythonhosted.org/packages/d5/cb/b9e93ebf193a0bb89dbcd4f73d7b0e6ecb7c1b6c016671950e25f041835e/coverage-7.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", size = 211803, upload-time = "2025-03-30T20:36:25.74Z" },
|
186
|
-
{ url = "https://files.pythonhosted.org/packages/78/1a/cdbfe9e1bb14d3afcaf6bb6e1b9ba76c72666e329cd06865bbd241efd652/coverage-7.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", size = 240561, upload-time = "2025-03-30T20:36:27.548Z" },
|
187
|
-
{ url = "https://files.pythonhosted.org/packages/59/04/57f1223f26ac018d7ce791bfa65b0c29282de3e041c1cd3ed430cfeac5a5/coverage-7.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", size = 238488, upload-time = "2025-03-30T20:36:29.175Z" },
|
188
|
-
{ url = "https://files.pythonhosted.org/packages/b7/b1/0f25516ae2a35e265868670384feebe64e7857d9cffeeb3887b0197e2ba2/coverage-7.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", size = 239589, upload-time = "2025-03-30T20:36:30.876Z" },
|
189
|
-
{ url = "https://files.pythonhosted.org/packages/e0/a4/99d88baac0d1d5a46ceef2dd687aac08fffa8795e4c3e71b6f6c78e14482/coverage-7.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", size = 239366, upload-time = "2025-03-30T20:36:32.563Z" },
|
190
|
-
{ url = "https://files.pythonhosted.org/packages/ea/9e/1db89e135feb827a868ed15f8fc857160757f9cab140ffee21342c783ceb/coverage-7.8.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", size = 237591, upload-time = "2025-03-30T20:36:34.721Z" },
|
191
|
-
{ url = "https://files.pythonhosted.org/packages/1b/6d/ac4d6fdfd0e201bc82d1b08adfacb1e34b40d21a22cdd62cfaf3c1828566/coverage-7.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", size = 238572, upload-time = "2025-03-30T20:36:36.805Z" },
|
192
|
-
{ url = "https://files.pythonhosted.org/packages/25/5e/917cbe617c230f7f1745b6a13e780a3a1cd1cf328dbcd0fd8d7ec52858cd/coverage-7.8.0-cp39-cp39-win32.whl", hash = "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", size = 213966, upload-time = "2025-03-30T20:36:38.551Z" },
|
193
|
-
{ url = "https://files.pythonhosted.org/packages/bd/93/72b434fe550135869f9ea88dd36068af19afce666db576e059e75177e813/coverage-7.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", size = 214852, upload-time = "2025-03-30T20:36:40.209Z" },
|
194
171
|
{ url = "https://files.pythonhosted.org/packages/c4/f1/1da77bb4c920aa30e82fa9b6ea065da3467977c2e5e032e38e66f1c57ffd/coverage-7.8.0-pp39.pp310.pp311-none-any.whl", hash = "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", size = 203443, upload-time = "2025-03-30T20:36:41.959Z" },
|
195
172
|
{ url = "https://files.pythonhosted.org/packages/59/f1/4da7717f0063a222db253e7121bd6a56f6fb1ba439dcc36659088793347c/coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", size = 203435, upload-time = "2025-03-30T20:36:43.61Z" },
|
196
173
|
]
|
@@ -295,7 +272,7 @@ wheels = [
|
|
295
272
|
|
296
273
|
[[package]]
|
297
274
|
name = "nbcat"
|
298
|
-
version = "0.
|
275
|
+
version = "1.0.0"
|
299
276
|
source = { editable = "." }
|
300
277
|
dependencies = [
|
301
278
|
{ name = "argcomplete" },
|
@@ -304,7 +281,7 @@ dependencies = [
|
|
304
281
|
{ name = "requests" },
|
305
282
|
{ name = "rich" },
|
306
283
|
{ name = "textual" },
|
307
|
-
{ name = "
|
284
|
+
{ name = "textual-image", extra = ["textual"] },
|
308
285
|
]
|
309
286
|
|
310
287
|
[package.optional-dependencies]
|
@@ -329,7 +306,7 @@ requires-dist = [
|
|
329
306
|
{ name = "rich" },
|
330
307
|
{ name = "ruff", marker = "extra == 'dev'" },
|
331
308
|
{ name = "textual" },
|
332
|
-
{ name = "
|
309
|
+
{ name = "textual-image", extras = ["textual"] },
|
333
310
|
]
|
334
311
|
provides-extras = ["dev"]
|
335
312
|
|
@@ -403,17 +380,6 @@ wheels = [
|
|
403
380
|
{ url = "https://files.pythonhosted.org/packages/b3/92/1ca0c3f09233bd7decf8f7105a1c4e3162fb9142128c74adad0fb361b7eb/pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd", size = 2335774, upload-time = "2025-04-12T17:49:04.889Z" },
|
404
381
|
{ url = "https://files.pythonhosted.org/packages/a5/ac/77525347cb43b83ae905ffe257bbe2cc6fd23acb9796639a1f56aa59d191/pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e", size = 2681895, upload-time = "2025-04-12T17:49:06.635Z" },
|
405
382
|
{ url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234, upload-time = "2025-04-12T17:49:08.399Z" },
|
406
|
-
{ url = "https://files.pythonhosted.org/packages/21/3a/c1835d1c7cf83559e95b4f4ed07ab0bb7acc689712adfce406b3f456e9fd/pillow-11.2.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:7491cf8a79b8eb867d419648fff2f83cb0b3891c8b36da92cc7f1931d46108c8", size = 3198391, upload-time = "2025-04-12T17:49:10.122Z" },
|
407
|
-
{ url = "https://files.pythonhosted.org/packages/b6/4d/dcb7a9af3fc1e8653267c38ed622605d9d1793349274b3ef7af06457e257/pillow-11.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b02d8f9cb83c52578a0b4beadba92e37d83a4ef11570a8688bbf43f4ca50909", size = 3030573, upload-time = "2025-04-12T17:49:11.938Z" },
|
408
|
-
{ url = "https://files.pythonhosted.org/packages/9d/29/530ca098c1a1eb31d4e163d317d0e24e6d2ead907991c69ca5b663de1bc5/pillow-11.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:014ca0050c85003620526b0ac1ac53f56fc93af128f7546623cc8e31875ab928", size = 4398677, upload-time = "2025-04-12T17:49:13.861Z" },
|
409
|
-
{ url = "https://files.pythonhosted.org/packages/8b/ee/0e5e51db34de1690264e5f30dcd25328c540aa11d50a3bc0b540e2a445b6/pillow-11.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3692b68c87096ac6308296d96354eddd25f98740c9d2ab54e1549d6c8aea9d79", size = 4484986, upload-time = "2025-04-12T17:49:15.948Z" },
|
410
|
-
{ url = "https://files.pythonhosted.org/packages/93/7d/bc723b41ce3d2c28532c47678ec988974f731b5c6fadd5b3a4fba9015e4f/pillow-11.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f781dcb0bc9929adc77bad571b8621ecb1e4cdef86e940fe2e5b5ee24fd33b35", size = 4501897, upload-time = "2025-04-12T17:49:17.839Z" },
|
411
|
-
{ url = "https://files.pythonhosted.org/packages/be/0b/532e31abc7389617ddff12551af625a9b03cd61d2989fa595e43c470ec67/pillow-11.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:2b490402c96f907a166615e9a5afacf2519e28295f157ec3a2bb9bd57de638cb", size = 4592618, upload-time = "2025-04-12T17:49:19.7Z" },
|
412
|
-
{ url = "https://files.pythonhosted.org/packages/4c/f0/21ed6499a6216fef753e2e2254a19d08bff3747108ba042422383f3e9faa/pillow-11.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dd6b20b93b3ccc9c1b597999209e4bc5cf2853f9ee66e3fc9a400a78733ffc9a", size = 4570493, upload-time = "2025-04-12T17:49:21.703Z" },
|
413
|
-
{ url = "https://files.pythonhosted.org/packages/68/de/17004ddb8ab855573fe1127ab0168d11378cdfe4a7ee2a792a70ff2e9ba7/pillow-11.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4b835d89c08a6c2ee7781b8dd0a30209a8012b5f09c0a665b65b0eb3560b6f36", size = 4647748, upload-time = "2025-04-12T17:49:23.579Z" },
|
414
|
-
{ url = "https://files.pythonhosted.org/packages/c7/23/82ecb486384bb3578115c509d4a00bb52f463ee700a5ca1be53da3c88c19/pillow-11.2.1-cp39-cp39-win32.whl", hash = "sha256:b10428b3416d4f9c61f94b494681280be7686bda15898a3a9e08eb66a6d92d67", size = 2331731, upload-time = "2025-04-12T17:49:25.58Z" },
|
415
|
-
{ url = "https://files.pythonhosted.org/packages/58/bb/87efd58b3689537a623d44dbb2550ef0bb5ff6a62769707a0fe8b1a7bdeb/pillow-11.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:6ebce70c3f486acf7591a3d73431fa504a4e18a9b97ff27f5f47b7368e4b9dd1", size = 2676346, upload-time = "2025-04-12T17:49:27.342Z" },
|
416
|
-
{ url = "https://files.pythonhosted.org/packages/80/08/dc268475b22887b816e5dcfae31bce897f524b4646bab130c2142c9b2400/pillow-11.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:c27476257b2fdcd7872d54cfd119b3a9ce4610fb85c8e32b70b42e3680a29a1e", size = 2414623, upload-time = "2025-04-12T17:49:29.139Z" },
|
417
383
|
{ url = "https://files.pythonhosted.org/packages/33/49/c8c21e4255b4f4a2c0c68ac18125d7f5460b109acc6dfdef1a24f9b960ef/pillow-11.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9b7b0d4fd2635f54ad82785d56bc0d94f147096493a79985d0ab57aedd563156", size = 3181727, upload-time = "2025-04-12T17:49:31.898Z" },
|
418
384
|
{ url = "https://files.pythonhosted.org/packages/6d/f1/f7255c0838f8c1ef6d55b625cfb286835c17e8136ce4351c5577d02c443b/pillow-11.2.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:aa442755e31c64037aa7c1cb186e0b369f8416c567381852c63444dd666fb772", size = 2999833, upload-time = "2025-04-12T17:49:34.2Z" },
|
419
385
|
{ url = "https://files.pythonhosted.org/packages/e2/57/9968114457bd131063da98d87790d080366218f64fa2943b65ac6739abb3/pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d3348c95b766f54b76116d53d4cb171b52992a1027e7ca50c81b43b9d9e363", size = 3437472, upload-time = "2025-04-12T17:49:36.294Z" },
|
@@ -530,19 +496,6 @@ wheels = [
|
|
530
496
|
{ url = "https://files.pythonhosted.org/packages/ef/fd/24ea4302d7a527d672c5be06e17df16aabfb4e9fdc6e0b345c21580f3d2a/pydantic_core-2.33.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d", size = 1812963, upload-time = "2025-04-02T09:48:14.553Z" },
|
531
497
|
{ url = "https://files.pythonhosted.org/packages/5f/95/4fbc2ecdeb5c1c53f1175a32d870250194eb2fdf6291b795ab08c8646d5d/pydantic_core-2.33.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c", size = 1986896, upload-time = "2025-04-02T09:48:16.222Z" },
|
532
498
|
{ url = "https://files.pythonhosted.org/packages/71/ae/fe31e7f4a62431222d8f65a3bd02e3fa7e6026d154a00818e6d30520ea77/pydantic_core-2.33.1-cp313-cp313t-win_amd64.whl", hash = "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18", size = 1931810, upload-time = "2025-04-02T09:48:17.97Z" },
|
533
|
-
{ url = "https://files.pythonhosted.org/packages/49/78/b86bad645cc3e8dfa6858c70ec38939bf350e54004837c48de09474b2b9e/pydantic_core-2.33.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5ab77f45d33d264de66e1884fca158bc920cb5e27fd0764a72f72f5756ae8bdb", size = 2044282, upload-time = "2025-04-02T09:48:19.849Z" },
|
534
|
-
{ url = "https://files.pythonhosted.org/packages/3b/00/a02531331773b2bf08743d84c6b776bd6a449d23b3ae6b0e3229d568bac4/pydantic_core-2.33.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7aaba1b4b03aaea7bb59e1b5856d734be011d3e6d98f5bcaa98cb30f375f2ad", size = 1877598, upload-time = "2025-04-02T09:48:22.863Z" },
|
535
|
-
{ url = "https://files.pythonhosted.org/packages/a1/fa/32cc152b84a1f420f8a7d80161373e8d87d4ffa077e67d6c8aab3ce1a6ab/pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fb66263e9ba8fea2aa85e1e5578980d127fb37d7f2e292773e7bc3a38fb0c7b", size = 1911021, upload-time = "2025-04-02T09:48:24.592Z" },
|
536
|
-
{ url = "https://files.pythonhosted.org/packages/5e/87/ea553e0d98bce6c4876f8c50f65cb45597eff6e0aaa8b15813e9972bb19d/pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3f2648b9262607a7fb41d782cc263b48032ff7a03a835581abbf7a3bec62bcf5", size = 1997276, upload-time = "2025-04-02T09:48:26.314Z" },
|
537
|
-
{ url = "https://files.pythonhosted.org/packages/f7/9b/60cb9f4b52158b3adac0066492bbadd0b8473f4f8da5bcc73972655b76ef/pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:723c5630c4259400818b4ad096735a829074601805d07f8cafc366d95786d331", size = 2141348, upload-time = "2025-04-02T09:48:28.298Z" },
|
538
|
-
{ url = "https://files.pythonhosted.org/packages/9b/38/374d254e270d4de0add68a8239f4ed0f444fdd7b766ea69244fb9491dccb/pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d100e3ae783d2167782391e0c1c7a20a31f55f8015f3293647544df3f9c67824", size = 2753708, upload-time = "2025-04-02T09:48:29.987Z" },
|
539
|
-
{ url = "https://files.pythonhosted.org/packages/05/a8/fd79111eb5ab9bc4ef98d8fb0b3a2ffdc80107b2c59859a741ab379c96f8/pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177d50460bc976a0369920b6c744d927b0ecb8606fb56858ff542560251b19e5", size = 2008699, upload-time = "2025-04-02T09:48:31.76Z" },
|
540
|
-
{ url = "https://files.pythonhosted.org/packages/35/31/2e06619868eb4c18642c5601db420599c1cf9cf50fe868c9ac09cd298e24/pydantic_core-2.33.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3edde68d1a1f9af1273b2fe798997b33f90308fb6d44d8550c89fc6a3647cf6", size = 2123426, upload-time = "2025-04-02T09:48:33.623Z" },
|
541
|
-
{ url = "https://files.pythonhosted.org/packages/4a/d0/3531e8783a311802e3db7ee5a1a5ed79e5706e930b1b4e3109ce15eeb681/pydantic_core-2.33.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a62c3c3ef6a7e2c45f7853b10b5bc4ddefd6ee3cd31024754a1a5842da7d598d", size = 2087330, upload-time = "2025-04-02T09:48:35.387Z" },
|
542
|
-
{ url = "https://files.pythonhosted.org/packages/ac/32/5ff252ed73bacd7677a706ab17723e261a76793f98b305aa20cfc10bbd56/pydantic_core-2.33.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:c91dbb0ab683fa0cd64a6e81907c8ff41d6497c346890e26b23de7ee55353f96", size = 2258171, upload-time = "2025-04-02T09:48:37.559Z" },
|
543
|
-
{ url = "https://files.pythonhosted.org/packages/c9/f9/e96e00f92b8f5b3e2cddc80c5ee6cf038f8a0f238c44b67b01759943a7b4/pydantic_core-2.33.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f466e8bf0a62dc43e068c12166281c2eca72121dd2adc1040f3aa1e21ef8599", size = 2258745, upload-time = "2025-04-02T09:48:39.413Z" },
|
544
|
-
{ url = "https://files.pythonhosted.org/packages/54/1e/51c86688e809d94797fdf0efc41514f001caec982a05f62d90c180a9639d/pydantic_core-2.33.1-cp39-cp39-win32.whl", hash = "sha256:ab0277cedb698749caada82e5d099dc9fed3f906a30d4c382d1a21725777a1e5", size = 1923626, upload-time = "2025-04-02T09:48:41.24Z" },
|
545
|
-
{ url = "https://files.pythonhosted.org/packages/57/18/c2da959fd8d019b70cadafdda2bf845378ada47973e0bad6cc84f56dbe6e/pydantic_core-2.33.1-cp39-cp39-win_amd64.whl", hash = "sha256:5773da0ee2d17136b1f1c6fbde543398d452a6ad2a7b54ea1033e2daa739b8d2", size = 1953703, upload-time = "2025-04-02T09:48:43.196Z" },
|
546
499
|
{ url = "https://files.pythonhosted.org/packages/9c/c7/8b311d5adb0fe00a93ee9b4e92a02b0ec08510e9838885ef781ccbb20604/pydantic_core-2.33.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c834f54f8f4640fd7e4b193f80eb25a0602bba9e19b3cd2fc7ffe8199f5ae02", size = 2041659, upload-time = "2025-04-02T09:48:45.342Z" },
|
547
500
|
{ url = "https://files.pythonhosted.org/packages/8a/d6/4f58d32066a9e26530daaf9adc6664b01875ae0691570094968aaa7b8fcc/pydantic_core-2.33.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:049e0de24cf23766f12cc5cc71d8abc07d4a9deb9061b334b62093dedc7cb068", size = 1873294, upload-time = "2025-04-02T09:48:47.548Z" },
|
548
501
|
{ url = "https://files.pythonhosted.org/packages/f7/3f/53cc9c45d9229da427909c751f8ed2bf422414f7664ea4dde2d004f596ba/pydantic_core-2.33.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a28239037b3d6f16916a4c831a5a0eadf856bdd6d2e92c10a0da3a59eadcf3e", size = 1903771, upload-time = "2025-04-02T09:48:49.468Z" },
|
@@ -561,15 +514,6 @@ wheels = [
|
|
561
514
|
{ url = "https://files.pythonhosted.org/packages/0b/cd/c59707e35a47ba4cbbf153c3f7c56420c58653b5801b055dc52cccc8e2dc/pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:52928d8c1b6bda03cc6d811e8923dffc87a2d3c8b3bfd2ce16471c7147a24850", size = 2250175, upload-time = "2025-04-02T09:49:15.597Z" },
|
562
515
|
{ url = "https://files.pythonhosted.org/packages/84/32/e4325a6676b0bed32d5b084566ec86ed7fd1e9bcbfc49c578b1755bde920/pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1b30d92c9412beb5ac6b10a3eb7ef92ccb14e3f2a8d7732e2d739f58b3aa7544", size = 2254674, upload-time = "2025-04-02T09:49:17.61Z" },
|
563
516
|
{ url = "https://files.pythonhosted.org/packages/12/6f/5596dc418f2e292ffc661d21931ab34591952e2843e7168ea5a52591f6ff/pydantic_core-2.33.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f995719707e0e29f0f41a8aa3bcea6e761a36c9136104d3189eafb83f5cec5e5", size = 2080951, upload-time = "2025-04-02T09:49:19.559Z" },
|
564
|
-
{ url = "https://files.pythonhosted.org/packages/2d/a8/c2c8f29bd18f7ef52de32a6deb9e3ee87ba18b7b2122636aa9f4438cf627/pydantic_core-2.33.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7edbc454a29fc6aeae1e1eecba4f07b63b8d76e76a748532233c4c167b4cb9ea", size = 2041791, upload-time = "2025-04-02T09:49:21.617Z" },
|
565
|
-
{ url = "https://files.pythonhosted.org/packages/08/ad/328081b1c82543ae49d0650048305058583c51f1a9a56a0d6e87bb3a2443/pydantic_core-2.33.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad05b683963f69a1d5d2c2bdab1274a31221ca737dbbceaa32bcb67359453cdd", size = 1873579, upload-time = "2025-04-02T09:49:23.667Z" },
|
566
|
-
{ url = "https://files.pythonhosted.org/packages/6e/8a/bc65dbf7e501e88367cdab06a2c1340457c785f0c72288cae737fd80c0fa/pydantic_core-2.33.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df6a94bf9452c6da9b5d76ed229a5683d0306ccb91cca8e1eea883189780d568", size = 1904189, upload-time = "2025-04-02T09:49:25.821Z" },
|
567
|
-
{ url = "https://files.pythonhosted.org/packages/9a/db/30ca6aefda211fb01ef185ca73cb7a0c6e7fe952c524025c8782b5acd771/pydantic_core-2.33.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7965c13b3967909a09ecc91f21d09cfc4576bf78140b988904e94f130f188396", size = 2084446, upload-time = "2025-04-02T09:49:27.866Z" },
|
568
|
-
{ url = "https://files.pythonhosted.org/packages/f2/89/a12b55286e30c9f476eab7c53c9249ec76faf70430596496ab0309f28629/pydantic_core-2.33.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3f1fdb790440a34f6ecf7679e1863b825cb5ffde858a9197f851168ed08371e5", size = 2118215, upload-time = "2025-04-02T09:49:30.321Z" },
|
569
|
-
{ url = "https://files.pythonhosted.org/packages/8e/55/12721c4a8d7951584ad3d9848b44442559cf1876e0bb424148d1060636b3/pydantic_core-2.33.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5277aec8d879f8d05168fdd17ae811dd313b8ff894aeeaf7cd34ad28b4d77e33", size = 2079963, upload-time = "2025-04-02T09:49:32.804Z" },
|
570
|
-
{ url = "https://files.pythonhosted.org/packages/bd/0c/3391bd5d6ff62ea998db94732528d9bc32c560b0ed861c39119759461946/pydantic_core-2.33.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8ab581d3530611897d863d1a649fb0644b860286b4718db919bfd51ece41f10b", size = 2249388, upload-time = "2025-04-02T09:49:34.906Z" },
|
571
|
-
{ url = "https://files.pythonhosted.org/packages/d3/5f/3e4feb042998d7886a9b523b372d83955cbc192a07013dcd24276db078ee/pydantic_core-2.33.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0483847fa9ad5e3412265c1bd72aad35235512d9ce9d27d81a56d935ef489672", size = 2255226, upload-time = "2025-04-02T09:49:37.412Z" },
|
572
|
-
{ url = "https://files.pythonhosted.org/packages/25/f2/1647933efaaad61846109a27619f3704929e758a09e6431b8f932a053d40/pydantic_core-2.33.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:de9e06abe3cc5ec6a2d5f75bc99b0bdca4f5c719a5b34026f8c57efbdecd2ee3", size = 2081073, upload-time = "2025-04-02T09:49:39.531Z" },
|
573
517
|
]
|
574
518
|
|
575
519
|
[[package]]
|
@@ -677,15 +621,6 @@ wheels = [
|
|
677
621
|
{ url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" },
|
678
622
|
{ url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" },
|
679
623
|
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" },
|
680
|
-
{ url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777, upload-time = "2024-08-06T20:33:25.896Z" },
|
681
|
-
{ url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318, upload-time = "2024-08-06T20:33:27.212Z" },
|
682
|
-
{ url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891, upload-time = "2024-08-06T20:33:28.974Z" },
|
683
|
-
{ url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614, upload-time = "2024-08-06T20:33:34.157Z" },
|
684
|
-
{ url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360, upload-time = "2024-08-06T20:33:35.84Z" },
|
685
|
-
{ url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006, upload-time = "2024-08-06T20:33:37.501Z" },
|
686
|
-
{ url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577, upload-time = "2024-08-06T20:33:39.389Z" },
|
687
|
-
{ url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593, upload-time = "2024-08-06T20:33:46.63Z" },
|
688
|
-
{ url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312, upload-time = "2024-08-06T20:33:49.073Z" },
|
689
624
|
]
|
690
625
|
|
691
626
|
[[package]]
|
@@ -790,15 +725,21 @@ wheels = [
|
|
790
725
|
]
|
791
726
|
|
792
727
|
[[package]]
|
793
|
-
name = "
|
794
|
-
version = "
|
728
|
+
name = "textual-image"
|
729
|
+
version = "0.8.2"
|
795
730
|
source = { registry = "https://pypi.org/simple" }
|
796
731
|
dependencies = [
|
797
732
|
{ name = "pillow" },
|
733
|
+
{ name = "rich" },
|
798
734
|
]
|
799
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
735
|
+
sdist = { url = "https://files.pythonhosted.org/packages/40/e1/ad90ae431c615dd1ec5cdbf21ae573f8af68283619cf6c0f404e684d61ab/textual_image-0.8.2.tar.gz", hash = "sha256:484fe6ab4a19cf243ea397dd34255092783231f3fbce91f50800faa5852254a0", size = 108636, upload-time = "2025-04-01T19:39:38.336Z" }
|
800
736
|
wheels = [
|
801
|
-
{ url = "https://files.pythonhosted.org/packages/
|
737
|
+
{ url = "https://files.pythonhosted.org/packages/8b/81/a0685932473a7a626bd4d27c73f0b8593881391b68ac2fe6f1dc69037c4b/textual_image-0.8.2-py3-none-any.whl", hash = "sha256:35ab95076d2edcd9e59d66e1881bf177ab8acd7f131446a129f55cae9c81c447", size = 109372, upload-time = "2025-04-01T19:39:36.93Z" },
|
738
|
+
]
|
739
|
+
|
740
|
+
[package.optional-dependencies]
|
741
|
+
textual = [
|
742
|
+
{ name = "textual" },
|
802
743
|
]
|
803
744
|
|
804
745
|
[[package]]
|
nbcat-0.13.2/docs/screenshot.png
DELETED
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.13.2"
|
nbcat-0.13.2/src/nbcat/image.py
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
import base64
|
2
|
-
import shutil
|
3
|
-
from io import BytesIO
|
4
|
-
from platform import system
|
5
|
-
|
6
|
-
from PIL import Image as PilImage
|
7
|
-
from rich.console import Console, ConsoleOptions, RenderResult
|
8
|
-
from rich.text import Text
|
9
|
-
from timg import METHODS, Renderer
|
10
|
-
|
11
|
-
|
12
|
-
class Image:
|
13
|
-
def __init__(self, image: str, method: str = "a24h"):
|
14
|
-
img = BytesIO(base64.b64decode(image.replace("\n", "")))
|
15
|
-
self.image = PilImage.open(img)
|
16
|
-
self.method = method if system() != "Windows" else "ascii"
|
17
|
-
|
18
|
-
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
|
19
|
-
renderer = Renderer()
|
20
|
-
renderer.load_image(self.image)
|
21
|
-
width = shutil.get_terminal_size()[0] - 1
|
22
|
-
if self.method == "sixel":
|
23
|
-
width = width * 6
|
24
|
-
|
25
|
-
renderer.resize(width)
|
26
|
-
|
27
|
-
if self.method == "sixel":
|
28
|
-
renderer.reduce_colors(16)
|
29
|
-
|
30
|
-
output = renderer.to_string(METHODS[self.method]["class"])
|
31
|
-
yield Text.from_ansi(output, no_wrap=True, end="")
|
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
|