mvn-tree-visualizer 1.7.0__tar.gz → 1.8.5__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.
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/dependabot.yml +23 -4
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/workflows/ci.yml +3 -3
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/workflows/release.yml +4 -4
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/CHANGELOG.md +48 -4
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/PKG-INFO +19 -2
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/README.md +17 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/ROADMAP.md +23 -12
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/pyproject.toml +12 -11
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/cli.py +31 -2
- mvn_tree_visualizer-1.8.5/src/mvn_tree_visualizer/utils.py +29 -0
- mvn_tree_visualizer-1.8.5/tests/README.md +69 -0
- mvn_tree_visualizer-1.8.5/tests/cli/README.md +61 -0
- mvn_tree_visualizer-1.8.5/tests/cli/__init__.py +1 -0
- mvn_tree_visualizer-1.8.5/tests/cli/test_open.py +165 -0
- mvn_tree_visualizer-1.8.5/tests/cli/test_quiet.py +162 -0
- mvn_tree_visualizer-1.8.5/tests/cli/test_timestamp.py +253 -0
- mvn_tree_visualizer-1.7.0/tests/test_cli.py → mvn_tree_visualizer-1.8.5/tests/cli/test_version.py +1 -157
- mvn_tree_visualizer-1.8.5/tests/large_diagrams/README.md +63 -0
- mvn_tree_visualizer-1.8.5/tests/large_diagrams/__init__.py +1 -0
- mvn_tree_visualizer-1.8.5/tests/large_diagrams/test_compatibility.py +41 -0
- mvn_tree_visualizer-1.8.5/tests/large_diagrams/test_config.py +48 -0
- mvn_tree_visualizer-1.8.5/tests/large_diagrams/test_errors.py +35 -0
- mvn_tree_visualizer-1.8.5/tests/large_diagrams/test_navigation.py +88 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/uv.lock +88 -86
- mvn_tree_visualizer-1.7.0/tests/test_large_diagram_support.py +0 -199
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/FUNDING.yml +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.github/SECURITY.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.gitignore +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/.python-version +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/CODE_OF_CONDUCT.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/CONTRIBUTING.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/LICENSE +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/RELEASE.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/docs/INTEGRATION.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/docs/README.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/docs/THEMES.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/README.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/complex-project/diagram-dark.html +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/complex-project/diagram-minimal.html +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/complex-project/maven_dependency_file +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/simple-project/dependencies.json +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/simple-project/diagram-dark.html +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/simple-project/diagram-minimal.html +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/simple-project/maven_dependency_file +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/watch-test/README.md +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/examples/watch-test/test_maven_file +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/ruff.toml +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/__init__.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/__main__.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/diagram.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/enhanced_template.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/exceptions.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/file_watcher.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/get_dependencies_in_one_file.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/outputs/html_output.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/outputs/json_output.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/themes.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/src/mvn_tree_visualizer/validation.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/tests/test_github_issue_7.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/tests/test_html_output.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/tests/test_json_output.py +0 -0
- {mvn_tree_visualizer-1.7.0 → mvn_tree_visualizer-1.8.5}/tests/test_watch_mode.py +0 -0
|
@@ -5,26 +5,38 @@ updates:
|
|
|
5
5
|
directory: "/"
|
|
6
6
|
schedule:
|
|
7
7
|
interval: "weekly"
|
|
8
|
-
open-pull-requests-limit:
|
|
8
|
+
open-pull-requests-limit: 5
|
|
9
9
|
commit-message:
|
|
10
10
|
prefix: "deps"
|
|
11
|
-
prefix-development: "deps-dev"
|
|
12
11
|
labels:
|
|
13
12
|
- "dependencies"
|
|
14
13
|
- "python"
|
|
14
|
+
assignees:
|
|
15
|
+
- "dyka3773"
|
|
16
|
+
target-branch: "develop"
|
|
17
|
+
groups:
|
|
18
|
+
pip-dependencies:
|
|
19
|
+
patterns:
|
|
20
|
+
- "*"
|
|
15
21
|
|
|
16
22
|
- package-ecosystem: "uv"
|
|
17
23
|
directory: "/"
|
|
18
24
|
schedule:
|
|
19
25
|
interval: "weekly"
|
|
20
|
-
open-pull-requests-limit:
|
|
26
|
+
open-pull-requests-limit: 5
|
|
21
27
|
commit-message:
|
|
22
28
|
prefix: "deps"
|
|
23
|
-
prefix-development: "deps-dev"
|
|
24
29
|
labels:
|
|
25
30
|
- "dependencies"
|
|
26
31
|
- "uv"
|
|
27
32
|
- "python"
|
|
33
|
+
assignees:
|
|
34
|
+
- "dyka3773"
|
|
35
|
+
target-branch: "develop"
|
|
36
|
+
groups:
|
|
37
|
+
uv-dependencies:
|
|
38
|
+
patterns:
|
|
39
|
+
- "*"
|
|
28
40
|
|
|
29
41
|
# Enable version updates for GitHub Actions
|
|
30
42
|
- package-ecosystem: "github-actions"
|
|
@@ -37,3 +49,10 @@ updates:
|
|
|
37
49
|
labels:
|
|
38
50
|
- "dependencies"
|
|
39
51
|
- "github-actions"
|
|
52
|
+
assignees:
|
|
53
|
+
- "dyka3773"
|
|
54
|
+
target-branch: "develop"
|
|
55
|
+
groups:
|
|
56
|
+
github-actions:
|
|
57
|
+
patterns:
|
|
58
|
+
- "*"
|
|
@@ -12,13 +12,13 @@ jobs:
|
|
|
12
12
|
python-version: ["3.13"]
|
|
13
13
|
|
|
14
14
|
steps:
|
|
15
|
-
- uses: actions/checkout@
|
|
15
|
+
- uses: actions/checkout@v6
|
|
16
16
|
|
|
17
17
|
- name: Set up Python
|
|
18
|
-
uses: actions/setup-python@
|
|
18
|
+
uses: actions/setup-python@v6
|
|
19
19
|
|
|
20
20
|
- name: Install uv
|
|
21
|
-
uses: astral-sh/setup-uv@
|
|
21
|
+
uses: astral-sh/setup-uv@v7
|
|
22
22
|
with:
|
|
23
23
|
version: "latest"
|
|
24
24
|
|
|
@@ -18,18 +18,18 @@ jobs:
|
|
|
18
18
|
|
|
19
19
|
steps:
|
|
20
20
|
- name: Checkout
|
|
21
|
-
uses: actions/checkout@
|
|
21
|
+
uses: actions/checkout@v6
|
|
22
22
|
with:
|
|
23
23
|
fetch-depth: 0
|
|
24
24
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
25
25
|
|
|
26
26
|
- name: Set up Python
|
|
27
|
-
uses: actions/setup-python@
|
|
27
|
+
uses: actions/setup-python@v6
|
|
28
28
|
with:
|
|
29
29
|
python-version: '3.13'
|
|
30
30
|
|
|
31
31
|
- name: Install uv
|
|
32
|
-
uses: astral-sh/setup-uv@
|
|
32
|
+
uses: astral-sh/setup-uv@v7
|
|
33
33
|
|
|
34
34
|
- name: Install dependencies
|
|
35
35
|
run: |
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
|
|
38
38
|
- name: Python Semantic Release
|
|
39
39
|
id: release
|
|
40
|
-
uses: python-semantic-release/python-semantic-release@v10.
|
|
40
|
+
uses: python-semantic-release/python-semantic-release@v10.5.3
|
|
41
41
|
with:
|
|
42
42
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
43
43
|
|
|
@@ -6,13 +6,57 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
<!-- insertion marker -->
|
|
9
|
-
## [v1.
|
|
9
|
+
## [v1.8.4](https://github.com/dyka3773/mvn-tree-visualizer/releases/tag/v1.8.4) - 2025-11-24
|
|
10
|
+
|
|
11
|
+
<small>[Compare with v1.8.3](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.8.3...v1.8.4)</small>
|
|
12
|
+
|
|
13
|
+
## [v1.8.3](https://github.com/dyka3773/mvn-tree-visualizer/releases/tag/v1.8.3) - 2025-11-24
|
|
14
|
+
|
|
15
|
+
<small>[Compare with v1.8.2](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.8.2...v1.8.3)</small>
|
|
16
|
+
|
|
17
|
+
## [v1.8.2](https://github.com/dyka3773/mvn-tree-visualizer/releases/tag/v1.8.2) - 2025-11-10
|
|
18
|
+
|
|
19
|
+
<small>[Compare with v1.8.1](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.8.1...v1.8.2)</small>
|
|
20
|
+
|
|
21
|
+
## [v1.8.1](https://github.com/dyka3773/mvn-tree-visualizer/releases/tag/v1.8.1) - 2025-11-10
|
|
10
22
|
|
|
11
|
-
<small>[Compare with v1.
|
|
23
|
+
<small>[Compare with v1.8.0](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.8.0...v1.8.1)</small>
|
|
24
|
+
|
|
25
|
+
## [v1.8.0](https://github.com/dyka3773/mvn-tree-visualizer/releases/tag/v1.8.0) - 2025-08-13
|
|
26
|
+
|
|
27
|
+
<small>[Compare with v1.7.0](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.7.0...v1.8.0)</small>
|
|
28
|
+
|
|
29
|
+
### Features
|
|
30
|
+
|
|
31
|
+
- add --timestamp-output flag to append timestamp to output filenames ([0292ac5](https://github.com/dyka3773/mvn-tree-visualizer/commit/0292ac5209a6b16c281b8146acc32e47264a02a7) by Hercules Konsoulas).
|
|
32
|
+
- add --open flag to automatically open HTML diagrams in browser ([fb5237e](https://github.com/dyka3773/mvn-tree-visualizer/commit/fb5237ee5e3696bd550b08c1d8a4d5b428666b6f) by Hercules Konsoulas).
|
|
33
|
+
|
|
34
|
+
### Code Refactoring
|
|
12
35
|
|
|
13
|
-
|
|
36
|
+
- encode URL with proper built-in function ([eed841d](https://github.com/dyka3773/mvn-tree-visualizer/commit/eed841d007f1d2a0b0d6632d8a36b93e4524acc2) by Hercules Konsoulas).
|
|
37
|
+
- restructure test suite into modular architecture ([6d25b7b](https://github.com/dyka3773/mvn-tree-visualizer/commit/6d25b7b1948252615d32ff7076428dc520ed60de) by Hercules Konsoulas).
|
|
38
|
+
- moved timestamp creation to a separate util module for clarity ([cf8d188](https://github.com/dyka3773/mvn-tree-visualizer/commit/cf8d1885b0a4056988dba94496a4ac992af2b693) by Hercules Konsoulas).
|
|
39
|
+
|
|
40
|
+
## [v1.7.0](https://github.com/dyka3773/mvn-tree-visualizer/releases/tag/v1.7.0) - 2025-08-02
|
|
41
|
+
|
|
42
|
+
<small>[Compare with v1.6.0](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.6.0...v1.7.0)</small>
|
|
43
|
+
|
|
44
|
+
### Features
|
|
45
|
+
|
|
46
|
+
- add --quiet/-q flag for silent operation ([5dfc82c](https://github.com/dyka3773/mvn-tree-visualizer/commit/5dfc82c57987870ab6200a7ec6682bda3aaf06c7) by Hercules Konsoulas).
|
|
47
|
+
- add --version/-v flag to display current tool version ([6ee3e56](https://github.com/dyka3773/mvn-tree-visualizer/commit/6ee3e56302893aecb5ad87c115ea801acf03b4bc) by Hercules Konsoulas).
|
|
48
|
+
|
|
49
|
+
### Bug Fixes
|
|
50
|
+
|
|
51
|
+
- CLI test timeouts and file cleanup issues ([3d236d9](https://github.com/dyka3773/mvn-tree-visualizer/commit/3d236d93406e4bcc0a0ee6ea4c6f096ba5c0f861) by Hercules Konsoulas).
|
|
52
|
+
|
|
53
|
+
### Code Refactoring
|
|
54
|
+
|
|
55
|
+
- correct copilot's mistake for traceback ([d33b5a8](https://github.com/dyka3773/mvn-tree-visualizer/commit/d33b5a847399b34cb101f5650ff98af29e133db1) by Hercules Konsoulas).
|
|
56
|
+
|
|
57
|
+
## [v1.6.0](https://github.com/dyka3773/mvn-tree-visualizer/releases/tag/v1.6.0) - 2025-07-24
|
|
14
58
|
|
|
15
|
-
<small>[Compare with v1.5.2](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.5.2...v1.6.0
|
|
59
|
+
<small>[Compare with v1.5.2](https://github.com/dyka3773/mvn-tree-visualizer/compare/v1.5.2...v1.6.0)</small>
|
|
16
60
|
|
|
17
61
|
### Features
|
|
18
62
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mvn-tree-visualizer
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.5
|
|
4
4
|
Summary: A simple command line tool to visualize the dependency tree of a Maven project in a graphical format.
|
|
5
5
|
Project-URL: source, https://github.com/dyka3773/mvn-tree-visualizer
|
|
6
6
|
Author-email: Iraklis Konsoulas <dyka3773@gmail.com>
|
|
7
7
|
License-Expression: MIT
|
|
8
8
|
License-File: LICENSE
|
|
9
9
|
Keywords: cli,command-line,dependency,graph,maven,mermaid,tool,tree,visualization
|
|
10
|
-
Classifier: Development Status ::
|
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
@@ -124,6 +124,21 @@ mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" -
|
|
|
124
124
|
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" -q
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
+
#### Auto-Open in Browser
|
|
128
|
+
```bash
|
|
129
|
+
# Automatically open the generated HTML diagram in your default browser
|
|
130
|
+
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" --open
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### Timestamped Output Files
|
|
134
|
+
```bash
|
|
135
|
+
# Generate files with timestamps (e.g., diagram_20250813_143022.html)
|
|
136
|
+
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" --timestamp-output
|
|
137
|
+
|
|
138
|
+
# Combine with auto-open for immediate viewing
|
|
139
|
+
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" --timestamp-output --open
|
|
140
|
+
```
|
|
141
|
+
|
|
127
142
|
> **💡 Tip:** In watch mode, the tool will monitor for changes to your Maven dependency files and automatically regenerate the diagram. Perfect for development workflows! Press `Ctrl+C` to stop watching.
|
|
128
143
|
|
|
129
144
|
### Step 3: View the output
|
|
@@ -156,6 +171,8 @@ Each example includes:
|
|
|
156
171
|
| `--directory` | The directory to scan for the Maven dependency file(s) | current directory |
|
|
157
172
|
| `--keep-tree` | Keep the intermediate `dependency_tree.txt` file | `False` |
|
|
158
173
|
| `--quiet`, `-q` | Suppress all console output except errors | `False` |
|
|
174
|
+
| `--open` | Automatically open generated HTML files in default browser | `False` |
|
|
175
|
+
| `--timestamp-output` | Add timestamp to output filename (e.g., `diagram-2025-08-13-203045.html`) | `False` |
|
|
159
176
|
| `--version`, `-v` | Show the current version and exit | - |
|
|
160
177
|
| `--help` | Show the help message and exit | - |
|
|
161
178
|
|
|
@@ -101,6 +101,21 @@ mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" -
|
|
|
101
101
|
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" -q
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
+
#### Auto-Open in Browser
|
|
105
|
+
```bash
|
|
106
|
+
# Automatically open the generated HTML diagram in your default browser
|
|
107
|
+
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" --open
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
#### Timestamped Output Files
|
|
111
|
+
```bash
|
|
112
|
+
# Generate files with timestamps (e.g., diagram_20250813_143022.html)
|
|
113
|
+
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" --timestamp-output
|
|
114
|
+
|
|
115
|
+
# Combine with auto-open for immediate viewing
|
|
116
|
+
mvn-tree-visualizer --filename "maven_dependency_file" --output "diagram.html" --timestamp-output --open
|
|
117
|
+
```
|
|
118
|
+
|
|
104
119
|
> **💡 Tip:** In watch mode, the tool will monitor for changes to your Maven dependency files and automatically regenerate the diagram. Perfect for development workflows! Press `Ctrl+C` to stop watching.
|
|
105
120
|
|
|
106
121
|
### Step 3: View the output
|
|
@@ -133,6 +148,8 @@ Each example includes:
|
|
|
133
148
|
| `--directory` | The directory to scan for the Maven dependency file(s) | current directory |
|
|
134
149
|
| `--keep-tree` | Keep the intermediate `dependency_tree.txt` file | `False` |
|
|
135
150
|
| `--quiet`, `-q` | Suppress all console output except errors | `False` |
|
|
151
|
+
| `--open` | Automatically open generated HTML files in default browser | `False` |
|
|
152
|
+
| `--timestamp-output` | Add timestamp to output filename (e.g., `diagram-2025-08-13-203045.html`) | `False` |
|
|
136
153
|
| `--version`, `-v` | Show the current version and exit | - |
|
|
137
154
|
| `--help` | Show the help message and exit | - |
|
|
138
155
|
|
|
@@ -4,6 +4,28 @@ This document outlines the evolution and future direction of the `mvn-tree-visua
|
|
|
4
4
|
|
|
5
5
|
## 🎉 Recently Completed ✅
|
|
6
6
|
|
|
7
|
+
### v1.8.0 - User Experience & Test Architecture Improvements (In Progress)
|
|
8
|
+
|
|
9
|
+
**Focus:** Practical CLI enhancements and improved maintainability
|
|
10
|
+
|
|
11
|
+
**Status:** Ready for Release - August 13, 2025
|
|
12
|
+
|
|
13
|
+
**Completed Features:**
|
|
14
|
+
* [x] **`--open` flag:** Automatically open generated HTML diagrams in default browser
|
|
15
|
+
* Platform-agnostic implementation using Python's `webbrowser` module
|
|
16
|
+
* Intelligent handling: only works with HTML output, graceful error handling
|
|
17
|
+
* Combined functionality with quiet mode and other flags
|
|
18
|
+
* [x] **`--timestamp-output` flag:** Auto-append timestamp to output filenames
|
|
19
|
+
* Format: `diagram_20250813_143022.html` for version tracking
|
|
20
|
+
* Works with both HTML and JSON output formats
|
|
21
|
+
* Perfect for CI/CD and avoiding file overwrites
|
|
22
|
+
* [x] **Comprehensive Test Architecture Refactoring:**
|
|
23
|
+
* Modular test structure: Split monolithic test files into focused modules
|
|
24
|
+
* `tests/cli/` - Individual CLI feature testing (version, quiet, open, timestamp)
|
|
25
|
+
* `tests/large_diagrams/` - Focused large diagram feature testing
|
|
26
|
+
* Single-responsibility principle: Each test file has one clear purpose
|
|
27
|
+
* Improved maintainability and parallel test execution support
|
|
28
|
+
|
|
7
29
|
### v1.6.0 - Mistake Release (Released)
|
|
8
30
|
|
|
9
31
|
**Focus:** Enhance automatic documentation generation and prerelease configs
|
|
@@ -40,22 +62,11 @@ This document outlines the evolution and future direction of the `mvn-tree-visua
|
|
|
40
62
|
|
|
41
63
|
**Philosophy:** Small, practical improvements that provide immediate value to users. Features will be selected based on user feedback, development bandwidth, and priority.
|
|
42
64
|
|
|
43
|
-
#### Essential CLI Features
|
|
44
|
-
* [ ] **`--quiet` / `-q` flag:** Suppress all console output except errors
|
|
45
|
-
* **Use Case:** Perfect for CI/CD pipelines and scripted usage
|
|
46
|
-
* [ ] **`--version` / `-v` flag:** Display the current version of the tool
|
|
47
|
-
* **Use Case:** Essential for any CLI tool, currently missing
|
|
48
|
-
|
|
49
65
|
#### User Experience Enhancements
|
|
50
|
-
* [ ] **Alternative output filename patterns:** `--timestamp-output` flag to auto-append timestamp
|
|
51
|
-
* **Use Case:** Useful for version tracking (e.g., `diagram-2025-08-01-143022.html`)
|
|
52
|
-
* [ ] **`--open` flag:** Automatically open generated diagram in default browser
|
|
53
|
-
* **Implementation:** Platform-agnostic using Python's `webbrowser` module
|
|
54
66
|
* [ ] **Custom title support:** `--title "My Project Dependencies"`
|
|
55
67
|
* **Use Case:** Personalize diagrams with meaningful project names
|
|
56
68
|
* [ ] **Progress indicators:** Simple feedback during long operations
|
|
57
69
|
* **Implementation:** "Parsing dependencies..." → "Generating diagram..." → "Done!"
|
|
58
|
-
|
|
59
70
|
#### Configuration & Customization
|
|
60
71
|
* [ ] **Configuration file support:** `.mvnviz.conf` file for default options
|
|
61
72
|
* **Use Case:** Avoid typing same flags repeatedly, team consistency
|
|
@@ -116,4 +127,4 @@ If you're interested in contributing to any of these features, please check out
|
|
|
116
127
|
|
|
117
128
|
---
|
|
118
129
|
|
|
119
|
-
*Last updated: August
|
|
130
|
+
*Last updated: August 13, 2025*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mvn-tree-visualizer"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.8.5"
|
|
4
4
|
authors = [
|
|
5
5
|
{ name = "Iraklis Konsoulas", email = "dyka3773@gmail.com" },
|
|
6
6
|
]
|
|
@@ -20,7 +20,7 @@ keywords = [
|
|
|
20
20
|
"mermaid",
|
|
21
21
|
]
|
|
22
22
|
classifiers = [
|
|
23
|
-
"Development Status ::
|
|
23
|
+
"Development Status :: 5 - Production/Stable",
|
|
24
24
|
"Intended Audience :: Developers",
|
|
25
25
|
"Programming Language :: Python :: 3",
|
|
26
26
|
"Programming Language :: Python :: 3.10",
|
|
@@ -43,12 +43,12 @@ mvn-tree-visualizer = "mvn_tree_visualizer.cli:cli"
|
|
|
43
43
|
|
|
44
44
|
[dependency-groups]
|
|
45
45
|
dev = [
|
|
46
|
-
"twine>=6.
|
|
47
|
-
"python-semantic-release
|
|
48
|
-
"build>=1.
|
|
49
|
-
"git-changelog>=2.
|
|
50
|
-
"tox>=4.
|
|
51
|
-
"pytest>=
|
|
46
|
+
"twine>=6.2.0",
|
|
47
|
+
"python-semantic-release==10.5.3",
|
|
48
|
+
"build>=1.3.0",
|
|
49
|
+
"git-changelog>=2.7.0",
|
|
50
|
+
"tox>=4.32.0",
|
|
51
|
+
"pytest>=9.0.2",
|
|
52
52
|
]
|
|
53
53
|
|
|
54
54
|
[build-system]
|
|
@@ -71,9 +71,9 @@ match = "master"
|
|
|
71
71
|
prerelease = false
|
|
72
72
|
|
|
73
73
|
[tool.semantic_release.commit_parser_options]
|
|
74
|
-
allowed_tags = ["build", "chore", "ci", "docs", "feat", "fix", "perf", "style", "refactor", "test"]
|
|
74
|
+
allowed_tags = ["build", "chore", "deps", "ci", "docs", "feat", "fix", "perf", "style", "refactor", "test"]
|
|
75
75
|
minor_tags = ["feat"]
|
|
76
|
-
patch_tags = ["fix", "perf"]
|
|
76
|
+
patch_tags = ["fix", "perf", "deps"]
|
|
77
77
|
|
|
78
78
|
[tool.git-changelog]
|
|
79
79
|
convention = "conventional"
|
|
@@ -89,6 +89,7 @@ sections = [
|
|
|
89
89
|
{type = "build", section = "Build System", scopes = []},
|
|
90
90
|
{type = "test", section = "Tests", scopes = []},
|
|
91
91
|
{type = "style", section = "Style", scopes = []},
|
|
92
|
+
{type = "deps", section = "Dependencies", scopes = []},
|
|
92
93
|
]
|
|
93
94
|
|
|
94
95
|
[tool.tox]
|
|
@@ -97,7 +98,7 @@ env_list = ["lint", "3.10", "3.11", "3.12", "3.13"]
|
|
|
97
98
|
[tool.tox.env_run_base]
|
|
98
99
|
description = "Run tests with the current Python version"
|
|
99
100
|
deps = [
|
|
100
|
-
"pytest>=
|
|
101
|
+
"pytest>=9.0.2",
|
|
101
102
|
]
|
|
102
103
|
commands = [[ "pytest", "-v" ]]
|
|
103
104
|
|
|
@@ -2,6 +2,7 @@ import argparse
|
|
|
2
2
|
import sys
|
|
3
3
|
import time
|
|
4
4
|
import traceback
|
|
5
|
+
import webbrowser
|
|
5
6
|
from importlib import metadata
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
from typing import NoReturn
|
|
@@ -12,6 +13,7 @@ from .file_watcher import FileWatcher
|
|
|
12
13
|
from .get_dependencies_in_one_file import merge_files
|
|
13
14
|
from .outputs.html_output import create_html_diagram
|
|
14
15
|
from .outputs.json_output import create_json_output
|
|
16
|
+
from .utils import add_timestamp_to_filename
|
|
15
17
|
from .validation import find_dependency_files, validate_dependency_files, validate_output_directory
|
|
16
18
|
|
|
17
19
|
|
|
@@ -32,6 +34,7 @@ def generate_diagram(
|
|
|
32
34
|
show_versions: bool,
|
|
33
35
|
theme: str = "minimal",
|
|
34
36
|
quiet: bool = False,
|
|
37
|
+
open_browser: bool = False,
|
|
35
38
|
) -> None:
|
|
36
39
|
"""Generate the dependency diagram with comprehensive error handling."""
|
|
37
40
|
timestamp = time.strftime("%H:%M:%S")
|
|
@@ -118,6 +121,14 @@ def generate_diagram(
|
|
|
118
121
|
if not quiet:
|
|
119
122
|
print(f"[{timestamp}] SUCCESS: Diagram generated and saved to {output_file}")
|
|
120
123
|
|
|
124
|
+
# Open in browser if requested and format is HTML
|
|
125
|
+
if open_browser and output_format == "html" and not quiet:
|
|
126
|
+
try:
|
|
127
|
+
webbrowser.open(Path(output_file).resolve().as_uri())
|
|
128
|
+
print(f"[{timestamp}] Opening diagram in your default browser...")
|
|
129
|
+
except Exception as e:
|
|
130
|
+
print(f"[{timestamp}] WARNING: Could not open browser: {e}", file=sys.stderr)
|
|
131
|
+
|
|
121
132
|
except MvnTreeVisualizerError as e:
|
|
122
133
|
# Our custom errors already have helpful messages
|
|
123
134
|
print(f"[{timestamp}] ERROR: {e}", file=sys.stderr)
|
|
@@ -216,6 +227,18 @@ def cli() -> NoReturn:
|
|
|
216
227
|
help="Suppress all console output except errors. Perfect for CI/CD pipelines and scripted usage.",
|
|
217
228
|
)
|
|
218
229
|
|
|
230
|
+
parser.add_argument(
|
|
231
|
+
"--open",
|
|
232
|
+
action="store_true",
|
|
233
|
+
help="Automatically open the generated HTML diagram in your default browser. Only works with HTML output format.",
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
parser.add_argument(
|
|
237
|
+
"--timestamp-output",
|
|
238
|
+
action="store_true",
|
|
239
|
+
help="Append timestamp to output filename (e.g., diagram-2025-08-13-203045.html). Useful for version tracking and CI/CD.",
|
|
240
|
+
)
|
|
241
|
+
|
|
219
242
|
args = parser.parse_args()
|
|
220
243
|
directory: str = args.directory
|
|
221
244
|
output_file: str = args.output
|
|
@@ -226,6 +249,12 @@ def cli() -> NoReturn:
|
|
|
226
249
|
watch_mode: bool = args.watch
|
|
227
250
|
theme: str = args.theme
|
|
228
251
|
quiet: bool = args.quiet
|
|
252
|
+
open_browser: bool = args.open
|
|
253
|
+
timestamp_output: bool = args.timestamp_output
|
|
254
|
+
|
|
255
|
+
# Apply timestamp to output filename if requested
|
|
256
|
+
if timestamp_output:
|
|
257
|
+
output_file = add_timestamp_to_filename(output_file)
|
|
229
258
|
|
|
230
259
|
# Generate initial diagram
|
|
231
260
|
if not quiet:
|
|
@@ -233,7 +262,7 @@ def cli() -> NoReturn:
|
|
|
233
262
|
print(f"[{timestamp}] Generating initial diagram...")
|
|
234
263
|
|
|
235
264
|
try:
|
|
236
|
-
generate_diagram(directory, output_file, filename, keep_tree, output_format, show_versions, theme, quiet)
|
|
265
|
+
generate_diagram(directory, output_file, filename, keep_tree, output_format, show_versions, theme, quiet, open_browser)
|
|
237
266
|
except MvnTreeVisualizerError:
|
|
238
267
|
sys.exit(1)
|
|
239
268
|
except KeyboardInterrupt:
|
|
@@ -251,7 +280,7 @@ def cli() -> NoReturn:
|
|
|
251
280
|
def regenerate_callback():
|
|
252
281
|
"""Callback function for file watcher."""
|
|
253
282
|
try:
|
|
254
|
-
generate_diagram(directory, output_file, filename, keep_tree, output_format, show_versions, theme, quiet)
|
|
283
|
+
generate_diagram(directory, output_file, filename, keep_tree, output_format, show_versions, theme, quiet, open_browser)
|
|
255
284
|
except Exception:
|
|
256
285
|
# In watch mode, we don't want to exit on errors, just log them
|
|
257
286
|
print("Error during diagram regeneration:", file=sys.stderr)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import time
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def add_timestamp_to_filename(filename: str) -> str:
|
|
6
|
+
"""Add timestamp to filename before the extension.
|
|
7
|
+
|
|
8
|
+
Args:
|
|
9
|
+
filename: Original filename (e.g., 'diagram.html', 'output.json', 'folder/diagram.html')
|
|
10
|
+
|
|
11
|
+
Returns:
|
|
12
|
+
Timestamped filename (e.g., 'diagram-2025-08-13-203045.html')
|
|
13
|
+
"""
|
|
14
|
+
timestamp = time.strftime("%Y-%m-%d-%H%M%S")
|
|
15
|
+
path = Path(filename)
|
|
16
|
+
|
|
17
|
+
# Handle paths by preserving directory and only modifying the filename
|
|
18
|
+
if path.parent != Path("."):
|
|
19
|
+
# Has a directory component
|
|
20
|
+
directory = path.parent
|
|
21
|
+
stem = path.stem
|
|
22
|
+
suffix = path.suffix
|
|
23
|
+
timestamped_name = f"{stem}-{timestamp}{suffix}"
|
|
24
|
+
return str(directory / timestamped_name)
|
|
25
|
+
else:
|
|
26
|
+
# No directory component
|
|
27
|
+
stem = path.stem
|
|
28
|
+
suffix = path.suffix
|
|
29
|
+
return f"{stem}-{timestamp}{suffix}"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Test Structure Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This document describes the organization and structure of our test suite, which has been refactored to follow single-responsibility principles and improve maintainability.
|
|
5
|
+
|
|
6
|
+
## Test Organization
|
|
7
|
+
|
|
8
|
+
### Modular Test Structure
|
|
9
|
+
We have moved away from monolithic test files containing multiple test classes to focused, single-purpose modules:
|
|
10
|
+
|
|
11
|
+
#### CLI Tests (`tests/cli/`)
|
|
12
|
+
- **`test_version.py`** - Version flag functionality (`--version`, `-v`)
|
|
13
|
+
- **`test_quiet.py`** - Quiet mode functionality (`--quiet`, `-q`)
|
|
14
|
+
- **`test_open.py`** - Auto-open browser functionality (`--open`)
|
|
15
|
+
- **`test_timestamp.py`** - Timestamp output functionality (`--timestamp-output`)
|
|
16
|
+
|
|
17
|
+
Each CLI test module contains a single test class focused on one specific CLI feature.
|
|
18
|
+
|
|
19
|
+
#### Large Diagram Tests (`tests/large_diagrams/`)
|
|
20
|
+
- **`test_config.py`** - Mermaid configuration for large diagrams
|
|
21
|
+
- **`test_navigation.py`** - Enhanced navigation controls and zoom features
|
|
22
|
+
- **`test_compatibility.py`** - Backward compatibility testing
|
|
23
|
+
- **`test_errors.py`** - Error handling scenarios
|
|
24
|
+
|
|
25
|
+
Each large diagram test module contains a single test class focused on one aspect of large diagram support.
|
|
26
|
+
|
|
27
|
+
### Standalone Test Files
|
|
28
|
+
- **`test_github_issue_7.py`** - Specific GitHub issue #7 fix testing (single class)
|
|
29
|
+
- **`test_html_output.py`** - HTML output generation testing (function-based tests)
|
|
30
|
+
- **`test_json_output.py`** - JSON output generation testing (function-based tests)
|
|
31
|
+
- **`test_watch_mode.py`** - File watching mode testing (function-based tests)
|
|
32
|
+
|
|
33
|
+
## Benefits of Current Structure
|
|
34
|
+
|
|
35
|
+
1. **Single Responsibility**: Each test file has a clear, focused purpose
|
|
36
|
+
2. **Maintainability**: Changes to one feature don't affect tests for other features
|
|
37
|
+
3. **Readability**: Easier to find and understand tests for specific functionality
|
|
38
|
+
4. **Parallel Testing**: Better support for parallel test execution
|
|
39
|
+
5. **Modularity**: Easy to add new feature tests without modifying existing files
|
|
40
|
+
|
|
41
|
+
## Test Execution
|
|
42
|
+
|
|
43
|
+
### Run All Tests
|
|
44
|
+
```bash
|
|
45
|
+
python -m pytest tests/ -v
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Run Specific Module Tests
|
|
49
|
+
```bash
|
|
50
|
+
# CLI functionality tests
|
|
51
|
+
python -m pytest tests/cli/ -v
|
|
52
|
+
|
|
53
|
+
# Large diagram tests
|
|
54
|
+
python -m pytest tests/large_diagrams/ -v
|
|
55
|
+
|
|
56
|
+
# Specific feature tests
|
|
57
|
+
python -m pytest tests/cli/test_open.py -v
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Test Count Summary
|
|
61
|
+
- **CLI Tests**: 23 tests across 4 modules
|
|
62
|
+
- **Large Diagram Tests**: 14 tests across 4 modules
|
|
63
|
+
- **Other Tests**: 31 tests in standalone modules
|
|
64
|
+
- **Total**: 68 tests
|
|
65
|
+
|
|
66
|
+
## Refactoring History
|
|
67
|
+
- **Before**: Monolithic files with multiple test classes (e.g., `test_cli.py` with 4 classes)
|
|
68
|
+
- **After**: Focused modules with single test classes or related functions
|
|
69
|
+
- **Result**: Improved maintainability and clearer test organization
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# CLI Tests
|
|
2
|
+
|
|
3
|
+
This directory contains modular tests for CLI functionality. Each file focuses on a specific CLI feature or flag, making tests easier to maintain and understand.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
tests/cli/
|
|
9
|
+
├── __init__.py # Package initialization
|
|
10
|
+
├── test_version.py # Tests for --version/-v flag
|
|
11
|
+
├── test_quiet.py # Tests for --quiet/-q flag
|
|
12
|
+
├── test_open.py # Tests for --open flag
|
|
13
|
+
└── test_timestamp.py # Tests for --timestamp-output flag
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Test Organization
|
|
17
|
+
|
|
18
|
+
### `test_version.py`
|
|
19
|
+
- Tests version string formatting and validation
|
|
20
|
+
- Tests both `--version` and `-v` flags
|
|
21
|
+
- Tests version precedence over other arguments
|
|
22
|
+
- Tests edge cases like package not found
|
|
23
|
+
|
|
24
|
+
### `test_quiet.py`
|
|
25
|
+
- Tests output suppression with `--quiet`/`-q` flags
|
|
26
|
+
- Tests that errors still show in quiet mode
|
|
27
|
+
- Tests normal vs quiet behavior comparison
|
|
28
|
+
|
|
29
|
+
### `test_open.py`
|
|
30
|
+
- Tests automatic browser opening with `--open` flag
|
|
31
|
+
- Tests HTML vs JSON format behavior
|
|
32
|
+
- Tests quiet mode interaction
|
|
33
|
+
- Tests error handling for browser failures
|
|
34
|
+
|
|
35
|
+
### `test_timestamp.py`
|
|
36
|
+
- Tests timestamp filename generation with `--timestamp-output`
|
|
37
|
+
- Tests format consistency and path handling
|
|
38
|
+
- Tests interaction with other flags
|
|
39
|
+
- Tests both HTML and JSON output formats
|
|
40
|
+
|
|
41
|
+
## Benefits of This Structure
|
|
42
|
+
|
|
43
|
+
1. **Single Responsibility**: Each file tests one specific feature
|
|
44
|
+
2. **Easy Navigation**: Developers can quickly find tests for a specific flag
|
|
45
|
+
3. **Maintainable**: Changes to one feature don't affect other test files
|
|
46
|
+
4. **Modular**: Can run tests for specific features independently
|
|
47
|
+
5. **Clear Naming**: File names clearly indicate what functionality is tested
|
|
48
|
+
|
|
49
|
+
## Running Tests
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Run all CLI tests
|
|
53
|
+
pytest tests/cli/ -v
|
|
54
|
+
|
|
55
|
+
# Run specific feature tests
|
|
56
|
+
pytest tests/cli/test_version.py -v
|
|
57
|
+
pytest tests/cli/test_open.py -v
|
|
58
|
+
|
|
59
|
+
# Run specific test class
|
|
60
|
+
pytest tests/cli/test_version.py::TestVersionFlag -v
|
|
61
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""CLI tests package."""
|