convoviz 0.3.0__tar.gz → 0.3.1__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 (61) hide show
  1. {convoviz-0.3.0 → convoviz-0.3.1}/PKG-INFO +12 -17
  2. {convoviz-0.3.0 → convoviz-0.3.1}/README.md +8 -12
  3. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/__init__.py +10 -1
  4. convoviz-0.3.1/convoviz/analysis/__init__.py +22 -0
  5. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/pipeline.py +15 -3
  6. {convoviz-0.3.0 → convoviz-0.3.1}/pyproject.toml +9 -4
  7. convoviz-0.3.0/convoviz/analysis/__init__.py +0 -9
  8. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/__main__.py +0 -0
  9. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/analysis/graphs.py +0 -0
  10. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/analysis/wordcloud.py +0 -0
  11. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/colormaps.txt +0 -0
  12. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/AmaticSC-Regular.ttf +0 -0
  13. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/ArchitectsDaughter-Regular.ttf +0 -0
  14. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/BebasNeue-Regular.ttf +0 -0
  15. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Borel-Regular.ttf +0 -0
  16. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Courgette-Regular.ttf +0 -0
  17. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/CroissantOne-Regular.ttf +0 -0
  18. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Handjet-Regular.ttf +0 -0
  19. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/IndieFlower-Regular.ttf +0 -0
  20. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Kalam-Regular.ttf +0 -0
  21. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Lobster-Regular.ttf +0 -0
  22. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/MartianMono-Regular.ttf +0 -0
  23. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/MartianMono-Thin.ttf +0 -0
  24. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Montserrat-Regular.ttf +0 -0
  25. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Mooli-Regular.ttf +0 -0
  26. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Pacifico-Regular.ttf +0 -0
  27. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/PlayfairDisplay-Regular.ttf +0 -0
  28. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Raleway-Regular.ttf +0 -0
  29. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoMono-Regular.ttf +0 -0
  30. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoMono-Thin.ttf +0 -0
  31. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoSlab-Regular.ttf +0 -0
  32. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/RobotoSlab-Thin.ttf +0 -0
  33. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Ruwudu-Regular.ttf +0 -0
  34. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Sacramento-Regular.ttf +0 -0
  35. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/SedgwickAveDisplay-Regular.ttf +0 -0
  36. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/ShadowsIntoLight-Regular.ttf +0 -0
  37. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/TitilliumWeb-Regular.ttf +0 -0
  38. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Yellowtail-Regular.ttf +0 -0
  39. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/YsabeauOffice-Regular.ttf +0 -0
  40. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/YsabeauSC-Regular.ttf +0 -0
  41. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/YsabeauSC-Thin.ttf +0 -0
  42. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/fonts/Zeyada-Regular.ttf +0 -0
  43. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/assets/stopwords.txt +0 -0
  44. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/cli.py +0 -0
  45. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/config.py +0 -0
  46. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/exceptions.py +0 -0
  47. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/interactive.py +0 -0
  48. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/__init__.py +0 -0
  49. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/assets.py +0 -0
  50. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/loaders.py +0 -0
  51. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/io/writers.py +0 -0
  52. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/__init__.py +0 -0
  53. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/collection.py +0 -0
  54. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/conversation.py +0 -0
  55. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/message.py +0 -0
  56. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/models/node.py +0 -0
  57. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/py.typed +0 -0
  58. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/renderers/__init__.py +0 -0
  59. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/renderers/markdown.py +0 -0
  60. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/renderers/yaml.py +0 -0
  61. {convoviz-0.3.0 → convoviz-0.3.1}/convoviz/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convoviz
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Get analytics and visualizations on your ChatGPT data!
5
5
  Keywords: markdown,chatgpt,openai,visualization,analytics,json,export,data-analysis,obsidian
6
6
  Author: Mohamed Cheikh Sidiya
@@ -9,19 +9,18 @@ License-Expression: MIT
9
9
  Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.12
12
- Requires-Dist: matplotlib>=3.9.4
13
- Requires-Dist: nltk>=3.9.2
14
12
  Requires-Dist: orjson>=3.11.5
15
- Requires-Dist: pillow>=11.3.0
16
13
  Requires-Dist: pydantic>=2.12.5
17
14
  Requires-Dist: pydantic-settings>=2.7.0
18
15
  Requires-Dist: questionary>=2.1.1
19
16
  Requires-Dist: rich>=14.2.0
20
17
  Requires-Dist: tqdm>=4.67.1
21
18
  Requires-Dist: typer>=0.21.0
22
- Requires-Dist: wordcloud>=1.9.5
19
+ Requires-Dist: nltk>=3.9.2 ; extra == 'viz'
20
+ Requires-Dist: wordcloud>=1.9.5 ; extra == 'viz'
23
21
  Requires-Python: >=3.12
24
22
  Project-URL: Repository, https://github.com/mohamed-chs/chatgpt-history-export-to-md
23
+ Provides-Extra: viz
25
24
  Description-Content-Type: text/markdown
26
25
 
27
26
  # Convoviz 📊: Visualize your entire ChatGPT data
@@ -49,23 +48,19 @@ See examples [here](demo).
49
48
 
50
49
  ### 2. Install the tool 🛠
51
50
 
52
- Try it without installing using uv ([astral-sh/uv](https://github.com/astral-sh/uv?tab=readme-ov-file#highlights)):
51
+ With uv ([astral-sh/uv](https://github.com/astral-sh/uv?tab=readme-ov-file#highlights)):
53
52
 
54
53
  ```bash
55
- uvx convoviz
56
- ```
57
-
58
- You can install it with uv (Recommended):
59
-
60
- ```bash
61
- uv tool install convoviz
54
+ uv tool install convoviz[viz]
62
55
  ```
63
56
 
64
57
  or pipx:
65
58
  ```bash
66
- pipx install convoviz
59
+ pipx install convoviz[viz]
67
60
  ```
68
61
 
62
+ The `[viz]` extra includes graphs and word clouds. If you only need markdown conversion, you can skip it for a faster install (`uv tool install convoviz`).
63
+
69
64
  ### 3. Run the tool 🏃‍♂️
70
65
 
71
66
  Simply run the command and follow the prompts:
@@ -137,12 +132,12 @@ It should(?) also work as library, so you can import and use the models and func
137
132
 
138
133
  ### Offline / reproducible runs
139
134
 
140
- Convoviz uses NLTK stopwords for word clouds. If youre offline and NLTK data isnt already installed, pre-download it once:
135
+ Word clouds use NLTK stopwords. If you're offline and NLTK data isn't installed yet, pre-download it:
141
136
 
142
137
  ```bash
143
- uv run python -c "import nltk; nltk.download('stopwords')"
138
+ python -c "import nltk; nltk.download('stopwords')"
144
139
  ```
145
140
 
146
141
  ### Bookmarklet
147
142
 
148
- Theres also a JavaScript bookmarklet flow under `js/` (experimental) for exporting additional conversation data outside the official ZIP export.
143
+ There's also a JavaScript bookmarklet flow under `js/` (experimental) for exporting additional conversation data outside the official ZIP export.
@@ -23,23 +23,19 @@ See examples [here](demo).
23
23
 
24
24
  ### 2. Install the tool 🛠
25
25
 
26
- Try it without installing using uv ([astral-sh/uv](https://github.com/astral-sh/uv?tab=readme-ov-file#highlights)):
26
+ With uv ([astral-sh/uv](https://github.com/astral-sh/uv?tab=readme-ov-file#highlights)):
27
27
 
28
28
  ```bash
29
- uvx convoviz
30
- ```
31
-
32
- You can install it with uv (Recommended):
33
-
34
- ```bash
35
- uv tool install convoviz
29
+ uv tool install convoviz[viz]
36
30
  ```
37
31
 
38
32
  or pipx:
39
33
  ```bash
40
- pipx install convoviz
34
+ pipx install convoviz[viz]
41
35
  ```
42
36
 
37
+ The `[viz]` extra includes graphs and word clouds. If you only need markdown conversion, you can skip it for a faster install (`uv tool install convoviz`).
38
+
43
39
  ### 3. Run the tool 🏃‍♂️
44
40
 
45
41
  Simply run the command and follow the prompts:
@@ -111,12 +107,12 @@ It should(?) also work as library, so you can import and use the models and func
111
107
 
112
108
  ### Offline / reproducible runs
113
109
 
114
- Convoviz uses NLTK stopwords for word clouds. If youre offline and NLTK data isnt already installed, pre-download it once:
110
+ Word clouds use NLTK stopwords. If you're offline and NLTK data isn't installed yet, pre-download it:
115
111
 
116
112
  ```bash
117
- uv run python -c "import nltk; nltk.download('stopwords')"
113
+ python -c "import nltk; nltk.download('stopwords')"
118
114
  ```
119
115
 
120
116
  ### Bookmarklet
121
117
 
122
- Theres also a JavaScript bookmarklet flow under `js/` (experimental) for exporting additional conversation data outside the official ZIP export.
118
+ There's also a JavaScript bookmarklet flow under `js/` (experimental) for exporting additional conversation data outside the official ZIP export.
@@ -1,6 +1,6 @@
1
1
  """Convoviz - ChatGPT data visualization and export tool."""
2
2
 
3
- from convoviz import analysis, config, io, models, renderers, utils
3
+ from convoviz import config, io, models, renderers, utils
4
4
  from convoviz.config import ConvovizConfig, get_default_config
5
5
  from convoviz.models import Conversation, ConversationCollection, Message, Node
6
6
  from convoviz.pipeline import run_pipeline
@@ -23,3 +23,12 @@ __all__ = [
23
23
  "get_default_config",
24
24
  "run_pipeline",
25
25
  ]
26
+
27
+
28
+ def __getattr__(name: str):
29
+ """Lazy import for optional submodules like analysis."""
30
+ if name == "analysis":
31
+ from convoviz import analysis
32
+
33
+ return analysis
34
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,22 @@
1
+ """Data analysis and visualization for convoviz.
2
+
3
+ Requires the [viz] extra: pip install convoviz[viz]
4
+ """
5
+
6
+ __all__ = [
7
+ "generate_week_barplot",
8
+ "generate_wordcloud",
9
+ ]
10
+
11
+
12
+ def __getattr__(name: str):
13
+ """Lazy import for visualization functions requiring optional dependencies."""
14
+ if name == "generate_week_barplot":
15
+ from convoviz.analysis.graphs import generate_week_barplot
16
+
17
+ return generate_week_barplot
18
+ if name == "generate_wordcloud":
19
+ from convoviz.analysis.wordcloud import generate_wordcloud
20
+
21
+ return generate_wordcloud
22
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -6,7 +6,7 @@ from shutil import rmtree
6
6
  from rich.console import Console
7
7
 
8
8
  from convoviz.config import ConvovizConfig, OutputKind
9
- from convoviz.exceptions import InvalidZipError
9
+ from convoviz.exceptions import ConfigurationError, InvalidZipError
10
10
  from convoviz.io.loaders import (
11
11
  find_latest_bookmarklet_json,
12
12
  load_collection_from_json,
@@ -122,7 +122,13 @@ def run_pipeline(config: ConvovizConfig) -> None:
122
122
  # Generate graphs (if selected)
123
123
  if OutputKind.GRAPHS in selected_outputs:
124
124
  # Lazy import to allow markdown-only usage without matplotlib
125
- from convoviz.analysis.graphs import generate_graphs
125
+ try:
126
+ from convoviz.analysis.graphs import generate_graphs
127
+ except ModuleNotFoundError as e:
128
+ raise ConfigurationError(
129
+ "Graph generation requires matplotlib. "
130
+ "Install with: pip install convoviz[viz]"
131
+ ) from e
126
132
 
127
133
  graph_folder = output_folder / "Graphs"
128
134
  graph_folder.mkdir(parents=True, exist_ok=True)
@@ -140,7 +146,13 @@ def run_pipeline(config: ConvovizConfig) -> None:
140
146
  # Generate word clouds (if selected)
141
147
  if OutputKind.WORDCLOUDS in selected_outputs:
142
148
  # Lazy import to allow markdown-only usage without wordcloud/nltk
143
- from convoviz.analysis.wordcloud import generate_wordclouds
149
+ try:
150
+ from convoviz.analysis.wordcloud import generate_wordclouds
151
+ except ModuleNotFoundError as e:
152
+ raise ConfigurationError(
153
+ "Word cloud generation requires wordcloud and nltk. "
154
+ "Install with: pip install convoviz[viz]"
155
+ ) from e
144
156
 
145
157
  wordcloud_folder = output_folder / "Word-Clouds"
146
158
  wordcloud_folder.mkdir(parents=True, exist_ok=True)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "convoviz"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "Get analytics and visualizations on your ChatGPT data!"
5
5
  license = "MIT"
6
6
  keywords = [
@@ -18,16 +18,18 @@ authors = [
18
18
  { name = "Mohamed Cheikh Sidiya", email = "mohamedcheikhsidiya77@gmail.com" }
19
19
  ]
20
20
  dependencies = [
21
- "matplotlib>=3.9.4",
22
- "nltk>=3.9.2",
23
21
  "orjson>=3.11.5",
24
- "pillow>=11.3.0",
25
22
  "pydantic>=2.12.5",
26
23
  "pydantic-settings>=2.7.0",
27
24
  "questionary>=2.1.1",
28
25
  "rich>=14.2.0",
29
26
  "tqdm>=4.67.1",
30
27
  "typer>=0.21.0",
28
+ ]
29
+
30
+ [project.optional-dependencies]
31
+ viz = [
32
+ "nltk>=3.9.2",
31
33
  "wordcloud>=1.9.5",
32
34
  ]
33
35
 
@@ -66,6 +68,9 @@ dev = [
66
68
  "ruff>=0.14.10",
67
69
  "ty>=0.0.11",
68
70
  "types-tqdm>=4.67.0.20250809",
71
+ # Viz extras for testing (wordcloud pulls in matplotlib + pillow)
72
+ "nltk>=3.9.2",
73
+ "wordcloud>=1.9.5",
69
74
  ]
70
75
 
71
76
  [tool.ruff]
@@ -1,9 +0,0 @@
1
- """Data analysis and visualization for convoviz."""
2
-
3
- from convoviz.analysis.graphs import generate_week_barplot
4
- from convoviz.analysis.wordcloud import generate_wordcloud
5
-
6
- __all__ = [
7
- "generate_week_barplot",
8
- "generate_wordcloud",
9
- ]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes