nbcat 0.8.1__tar.gz → 0.8.2__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 (32) hide show
  1. {nbcat-0.8.1 → nbcat-0.8.2}/PKG-INFO +1 -1
  2. {nbcat-0.8.1 → nbcat-0.8.2}/pyproject.toml +1 -1
  3. nbcat-0.8.2/src/nbcat/__init__.py +1 -0
  4. {nbcat-0.8.1 → nbcat-0.8.2}/src/nbcat/schemas.py +0 -1
  5. nbcat-0.8.2/tests/test_render_cell.py +67 -0
  6. {nbcat-0.8.1 → nbcat-0.8.2}/uv.lock +316 -316
  7. nbcat-0.8.1/src/nbcat/__init__.py +0 -1
  8. {nbcat-0.8.1 → nbcat-0.8.2}/.github/workflows/ci.yml +0 -0
  9. {nbcat-0.8.1 → nbcat-0.8.2}/.gitignore +0 -0
  10. {nbcat-0.8.1 → nbcat-0.8.2}/LICENSE +0 -0
  11. {nbcat-0.8.1 → nbcat-0.8.2}/Makefile +0 -0
  12. {nbcat-0.8.1 → nbcat-0.8.2}/README.md +0 -0
  13. {nbcat-0.8.1 → nbcat-0.8.2}/src/nbcat/enums.py +0 -0
  14. {nbcat-0.8.1 → nbcat-0.8.2}/src/nbcat/exceptions.py +0 -0
  15. {nbcat-0.8.1 → nbcat-0.8.2}/src/nbcat/main.py +0 -0
  16. {nbcat-0.8.1 → nbcat-0.8.2}/src/nbcat/py.typed +0 -0
  17. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/invalid.ipynb +0 -0
  18. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/many_tracebacks.ipynb +0 -0
  19. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/no_min_version.ipynb +0 -0
  20. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test3.ipynb +0 -0
  21. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test3_no_metadata.ipynb +0 -0
  22. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test3_no_min_version.ipynb +0 -0
  23. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test3_no_worksheets.ipynb +0 -0
  24. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test3_worksheet_with_no_cells.ipynb +0 -0
  25. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test4.5.ipynb +0 -0
  26. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test4.ipynb +0 -0
  27. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test4custom.ipynb +0 -0
  28. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test4docinfo.ipynb +0 -0
  29. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test4jupyter_metadata.ipynb +0 -0
  30. {nbcat-0.8.1 → nbcat-0.8.2}/tests/assets/test4jupyter_metadata_timings.ipynb +0 -0
  31. {nbcat-0.8.1 → nbcat-0.8.2}/tests/conftest.py +0 -0
  32. {nbcat-0.8.1 → nbcat-0.8.2}/tests/test_read_notebook.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nbcat
3
- Version: 0.8.1
3
+ Version: 0.8.2
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nbcat"
3
- version = "0.8.1"
3
+ version = "0.8.2"
4
4
  description = "cat for jupyter notebooks"
5
5
  authors = [
6
6
  { name = "Akop Kesheshyan", email = "devnull@akop.dev" }
@@ -0,0 +1 @@
1
+ __version__ = "0.8.2"
@@ -12,7 +12,6 @@ class BaseOutput(BaseModel):
12
12
 
13
13
 
14
14
  class StreamOutput(BaseOutput):
15
- name: str
16
15
  text: list[str] | str
17
16
 
18
17
  @computed_field
@@ -0,0 +1,67 @@
1
+ import pytest
2
+ from rich.markdown import Markdown
3
+ from rich.panel import Panel
4
+ from rich.text import Text
5
+
6
+ from nbcat.main import render_cell
7
+ from nbcat.schemas import Cell, StreamOutput
8
+
9
+
10
+ @pytest.mark.parametrize(
11
+ "cell_type,source,expected",
12
+ [
13
+ ("markdown", "# Heading", Markdown),
14
+ ("code", "print('Hello')", Panel),
15
+ ("raw", "Raw content", Text),
16
+ ("heading", "Heading text", Text),
17
+ ],
18
+ )
19
+ def test_render_cell_input_rendering(cell_type: str, source: str, expected):
20
+ cell = Cell(cell_type=cell_type, source=source, execution_count=42, outputs=[])
21
+ rendered = render_cell(cell)
22
+
23
+ assert len(rendered) == 1
24
+ label, content = rendered[0]
25
+ assert label == "[green][42][/]:"
26
+ assert isinstance(content, expected)
27
+
28
+
29
+ def test_render_cell_with_outputs():
30
+ output_1 = StreamOutput(text=["First output"], execution_count=7, output_type="stream")
31
+ output_2 = StreamOutput(text=["Second output"], output_type="stream")
32
+
33
+ cell = Cell(
34
+ cell_type="code",
35
+ source="print('Hello')",
36
+ execution_count=None,
37
+ outputs=[output_1, output_2],
38
+ )
39
+
40
+ rendered = render_cell(cell)
41
+
42
+ print(rendered)
43
+ assert len(rendered) == 3
44
+ assert rendered[0][0] is None
45
+ assert isinstance(rendered[0][1], Panel)
46
+
47
+ assert rendered[1][0] == "[blue][7][/]:"
48
+ assert isinstance(rendered[1][1], str)
49
+
50
+ assert rendered[2][0] is None
51
+ assert isinstance(rendered[2][1], str)
52
+
53
+
54
+ def test_render_cell_skips_empty_outputs():
55
+ output = StreamOutput(text="", execution_count=99, output_type="stream")
56
+ cell = Cell(
57
+ cell_type="raw",
58
+ source="Raw input",
59
+ execution_count=1,
60
+ outputs=[output],
61
+ )
62
+
63
+ rendered = render_cell(cell)
64
+
65
+ assert len(rendered) == 1 # Only source input is rendered
66
+ assert rendered[0][0] == "[green][1][/]:"
67
+ assert isinstance(rendered[0][1], Text)