tofui 1.5.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.
tofui-1.5.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Frank Smith
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
tofui-1.5.0/PKG-INFO ADDED
@@ -0,0 +1,172 @@
1
+ Metadata-Version: 2.4
2
+ Name: tofui
3
+ Version: 1.5.0
4
+ Summary: Beautiful Terraform Plan Reports
5
+ Author: tofUI
6
+ Maintainer: tofUI
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/65156/tofUI
9
+ Project-URL: Documentation, https://github.com/65156/tofUI#readme
10
+ Project-URL: Repository, https://github.com/65156/tofUI
11
+ Project-URL: Bug Reports, https://github.com/65156/tofUI/issues
12
+ Keywords: terraform,plan,html,report,visualization,infrastructure,tofui
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: System Administrators
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Topic :: Software Development :: Build Tools
26
+ Classifier: Topic :: System :: Systems Administration
27
+ Classifier: Topic :: Utilities
28
+ Requires-Python: >=3.8
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Provides-Extra: s3
32
+ Requires-Dist: boto3>=1.26.0; extra == "s3"
33
+ Provides-Extra: gcs
34
+ Requires-Dist: google-cloud-storage>=2.10.0; extra == "gcs"
35
+ Provides-Extra: ghpages
36
+ Requires-Dist: requests>=2.25.0; extra == "ghpages"
37
+ Provides-Extra: dashboard
38
+ Requires-Dist: requests>=2.25.0; extra == "dashboard"
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
41
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
42
+ Requires-Dist: black>=22.0.0; extra == "dev"
43
+ Requires-Dist: flake8>=5.0.0; extra == "dev"
44
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
45
+ Dynamic: license-file
46
+
47
+ # tofUI 🎨
48
+
49
+ [![Install](https://img.shields.io/badge/brew%20install-tofui-orange?logo=homebrew&logoColor=white)](https://github.com/65156/homebrew-tofui)
50
+ [![Release](https://img.shields.io/github/v/release/65156/tofUI?label=release)](https://github.com/65156/tofUI/releases/latest)
51
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](https://opensource.org/licenses/MIT)
52
+
53
+ Beautiful, interactive HTML reports from OpenTofu & Terraform plans.
54
+
55
+ 👉 **[Live example report](https://65156.github.io/tofUI/has-changes-example.html)** · more in [examples.md](examples.md)
56
+
57
+ ## Install
58
+
59
+ ```bash
60
+ brew tap 65156/tofui
61
+ brew install tofui
62
+ ```
63
+
64
+ > **Homebrew 6.0+** requires trusting third-party taps. If you see
65
+ > `Refusing to load formula … from untrusted tap`, run `brew trust 65156/tofui`
66
+ > and re-run the install.
67
+
68
+ <details>
69
+ <summary>Other install methods</summary>
70
+
71
+ ```bash
72
+ # Homebrew, without tapping first
73
+ brew install 65156/tofui/tofui
74
+
75
+ # pip (from PyPI) — generating reports needs no dependencies at all
76
+ pip install tofui
77
+
78
+ # pip (latest from GitHub)
79
+ pip install git+https://github.com/65156/tofUI.git
80
+ ```
81
+
82
+ Publishing backends are opt-in, so a plain install stays dependency-free.
83
+ Add only what you use:
84
+
85
+ | Extra | Installs | Needed for |
86
+ |---|---|---|
87
+ | `tofui[s3]` | boto3 | `--s3-bucket` |
88
+ | `tofui[gcs]` | google-cloud-storage | `--gcs-bucket` |
89
+ | `tofui[ghpages]` | requests | `--github-repo` |
90
+ | `tofui[dashboard]` | requests | `--dashboard-repo` |
91
+
92
+ ```bash
93
+ pip install 'tofui[gcs]' # one backend
94
+ pip install 'tofui[s3,ghpages]' # or combine
95
+ ```
96
+
97
+ </details>
98
+
99
+ ## Usage
100
+
101
+ **1. Produce a plan JSON** with OpenTofu or Terraform:
102
+
103
+ ```bash
104
+ # OpenTofu
105
+ tofu plan -out=plan.tfplan
106
+ tofu show -json plan.tfplan > plan.json
107
+
108
+ # Terraform
109
+ terraform plan -out=plan.tfplan
110
+ terraform show -json plan.tfplan > plan.json
111
+ ```
112
+
113
+ **2. Generate the report** (`--build-name` sets the output filename):
114
+
115
+ ```bash
116
+ tofui plan.json --build-name my-plan
117
+ ```
118
+
119
+ **3. Open it:**
120
+
121
+ ```bash
122
+ open my-plan.html
123
+ ```
124
+
125
+ That's the whole workflow. For S3/GCS/GitHub Pages uploads, dashboard publishing,
126
+ CI/CD, and configuration, see **[examples.md](examples.md)**.
127
+
128
+ ### Hosting reports on a private bucket
129
+
130
+ Upload to a private S3 or GCS bucket and get a signed link to share on a PR —
131
+ no public hosting required:
132
+
133
+ ```bash
134
+ # GCS (requires: pip install 'tofui[gcs]')
135
+ tofui plan.json --build-name "pr-42-$GITHUB_SHA" \
136
+ --gcs-bucket my-project-tf-plan-reports --gcs-prefix plans/pr-42
137
+
138
+ # S3
139
+ tofui plan.json --build-name "pr-42-$GITHUB_SHA" \
140
+ --s3-bucket my-tf-plan-reports --s3-prefix plans/pr-42
141
+ ```
142
+
143
+ Both upload with `Content-Type: text/html` so the report renders in the browser
144
+ rather than downloading, and print a signed URL valid for `--signed-url-expiry`
145
+ (default `7d`, which is the maximum both providers allow). Pass `--no-signed-url`
146
+ for a public bucket where a plain object URL is enough.
147
+
148
+ When `--stdout-tf-log` is used, the terraform log is uploaded and signed
149
+ alongside the report automatically, and the report is pointed at that signed URL
150
+ — so the log terminal works from the bucket with nothing extra to configure. The
151
+ log lands next to the report, so a single signed report link stays self-sufficient.
152
+
153
+ Signing GCS URLs needs a key to sign with: either a service-account key via
154
+ `GOOGLE_APPLICATION_CREDENTIALS`, or `roles/iam.serviceAccountTokenCreator` on
155
+ the active identity so tofUI can sign through the IAM API (e.g. under Workload
156
+ Identity Federation).
157
+
158
+ ## Contributing
159
+
160
+ ```bash
161
+ git clone https://github.com/65156/tofUI.git
162
+ cd tofUI
163
+ python -m venv venv && source venv/bin/activate
164
+ pip install -e '.[dev]'
165
+ python test_tofui.py
166
+ ```
167
+
168
+ Then fork, branch, and open a pull request.
169
+
170
+ ## License
171
+
172
+ [MIT](LICENSE)
tofui-1.5.0/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # tofUI 🎨
2
+
3
+ [![Install](https://img.shields.io/badge/brew%20install-tofui-orange?logo=homebrew&logoColor=white)](https://github.com/65156/homebrew-tofui)
4
+ [![Release](https://img.shields.io/github/v/release/65156/tofUI?label=release)](https://github.com/65156/tofUI/releases/latest)
5
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](https://opensource.org/licenses/MIT)
6
+
7
+ Beautiful, interactive HTML reports from OpenTofu & Terraform plans.
8
+
9
+ 👉 **[Live example report](https://65156.github.io/tofUI/has-changes-example.html)** · more in [examples.md](examples.md)
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ brew tap 65156/tofui
15
+ brew install tofui
16
+ ```
17
+
18
+ > **Homebrew 6.0+** requires trusting third-party taps. If you see
19
+ > `Refusing to load formula … from untrusted tap`, run `brew trust 65156/tofui`
20
+ > and re-run the install.
21
+
22
+ <details>
23
+ <summary>Other install methods</summary>
24
+
25
+ ```bash
26
+ # Homebrew, without tapping first
27
+ brew install 65156/tofui/tofui
28
+
29
+ # pip (from PyPI) — generating reports needs no dependencies at all
30
+ pip install tofui
31
+
32
+ # pip (latest from GitHub)
33
+ pip install git+https://github.com/65156/tofUI.git
34
+ ```
35
+
36
+ Publishing backends are opt-in, so a plain install stays dependency-free.
37
+ Add only what you use:
38
+
39
+ | Extra | Installs | Needed for |
40
+ |---|---|---|
41
+ | `tofui[s3]` | boto3 | `--s3-bucket` |
42
+ | `tofui[gcs]` | google-cloud-storage | `--gcs-bucket` |
43
+ | `tofui[ghpages]` | requests | `--github-repo` |
44
+ | `tofui[dashboard]` | requests | `--dashboard-repo` |
45
+
46
+ ```bash
47
+ pip install 'tofui[gcs]' # one backend
48
+ pip install 'tofui[s3,ghpages]' # or combine
49
+ ```
50
+
51
+ </details>
52
+
53
+ ## Usage
54
+
55
+ **1. Produce a plan JSON** with OpenTofu or Terraform:
56
+
57
+ ```bash
58
+ # OpenTofu
59
+ tofu plan -out=plan.tfplan
60
+ tofu show -json plan.tfplan > plan.json
61
+
62
+ # Terraform
63
+ terraform plan -out=plan.tfplan
64
+ terraform show -json plan.tfplan > plan.json
65
+ ```
66
+
67
+ **2. Generate the report** (`--build-name` sets the output filename):
68
+
69
+ ```bash
70
+ tofui plan.json --build-name my-plan
71
+ ```
72
+
73
+ **3. Open it:**
74
+
75
+ ```bash
76
+ open my-plan.html
77
+ ```
78
+
79
+ That's the whole workflow. For S3/GCS/GitHub Pages uploads, dashboard publishing,
80
+ CI/CD, and configuration, see **[examples.md](examples.md)**.
81
+
82
+ ### Hosting reports on a private bucket
83
+
84
+ Upload to a private S3 or GCS bucket and get a signed link to share on a PR —
85
+ no public hosting required:
86
+
87
+ ```bash
88
+ # GCS (requires: pip install 'tofui[gcs]')
89
+ tofui plan.json --build-name "pr-42-$GITHUB_SHA" \
90
+ --gcs-bucket my-project-tf-plan-reports --gcs-prefix plans/pr-42
91
+
92
+ # S3
93
+ tofui plan.json --build-name "pr-42-$GITHUB_SHA" \
94
+ --s3-bucket my-tf-plan-reports --s3-prefix plans/pr-42
95
+ ```
96
+
97
+ Both upload with `Content-Type: text/html` so the report renders in the browser
98
+ rather than downloading, and print a signed URL valid for `--signed-url-expiry`
99
+ (default `7d`, which is the maximum both providers allow). Pass `--no-signed-url`
100
+ for a public bucket where a plain object URL is enough.
101
+
102
+ When `--stdout-tf-log` is used, the terraform log is uploaded and signed
103
+ alongside the report automatically, and the report is pointed at that signed URL
104
+ — so the log terminal works from the bucket with nothing extra to configure. The
105
+ log lands next to the report, so a single signed report link stays self-sufficient.
106
+
107
+ Signing GCS URLs needs a key to sign with: either a service-account key via
108
+ `GOOGLE_APPLICATION_CREDENTIALS`, or `roles/iam.serviceAccountTokenCreator` on
109
+ the active identity so tofUI can sign through the IAM API (e.g. under Workload
110
+ Identity Federation).
111
+
112
+ ## Contributing
113
+
114
+ ```bash
115
+ git clone https://github.com/65156/tofUI.git
116
+ cd tofUI
117
+ python -m venv venv && source venv/bin/activate
118
+ pip install -e '.[dev]'
119
+ python test_tofui.py
120
+ ```
121
+
122
+ Then fork, branch, and open a pull request.
123
+
124
+ ## License
125
+
126
+ [MIT](LICENSE)
@@ -0,0 +1,106 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "tofui"
7
+ description = "Beautiful Terraform Plan Reports"
8
+ readme = "README.md"
9
+ requires-python = ">=3.8"
10
+ license = {text = "MIT"}
11
+ authors = [
12
+ {name = "tofUI"},
13
+ ]
14
+ maintainers = [
15
+ {name = "tofUI"},
16
+ ]
17
+ keywords = ["terraform", "plan", "html", "report", "visualization", "infrastructure", "tofui"]
18
+ classifiers = [
19
+ "Development Status :: 4 - Beta",
20
+ "Intended Audience :: Developers",
21
+ "Intended Audience :: System Administrators",
22
+ "License :: OSI Approved :: MIT License",
23
+ "Operating System :: OS Independent",
24
+ "Programming Language :: Python :: 3",
25
+ "Programming Language :: Python :: 3.8",
26
+ "Programming Language :: Python :: 3.9",
27
+ "Programming Language :: Python :: 3.10",
28
+ "Programming Language :: Python :: 3.11",
29
+ "Programming Language :: Python :: 3.12",
30
+ "Programming Language :: Python :: 3.13",
31
+ "Topic :: Software Development :: Build Tools",
32
+ "Topic :: System :: Systems Administration",
33
+ "Topic :: Utilities",
34
+ ]
35
+ # Generating a report needs nothing but the standard library. Each publishing
36
+ # backend is opt-in, so a local report install stays dependency-free.
37
+ dependencies = []
38
+ dynamic = ["version"]
39
+
40
+ [project.optional-dependencies]
41
+ s3 = [
42
+ "boto3>=1.26.0", # S3 upload & presigned URLs
43
+ ]
44
+ gcs = [
45
+ "google-cloud-storage>=2.10.0", # GCS upload & v4 signed URLs
46
+ ]
47
+ ghpages = [
48
+ "requests>=2.25.0", # GitHub Pages publishing via the GitHub API
49
+ ]
50
+ dashboard = [
51
+ "requests>=2.25.0", # dashboard publishing via the GitHub API
52
+ ]
53
+ dev = [
54
+ "pytest>=7.0.0",
55
+ "pytest-cov>=4.0.0",
56
+ "black>=22.0.0",
57
+ "flake8>=5.0.0",
58
+ "mypy>=1.0.0",
59
+ ]
60
+
61
+ [project.scripts]
62
+ tofui = "tofui.cli:main"
63
+
64
+ [project.urls]
65
+ Homepage = "https://github.com/65156/tofUI"
66
+ Documentation = "https://github.com/65156/tofUI#readme"
67
+ Repository = "https://github.com/65156/tofUI"
68
+ "Bug Reports" = "https://github.com/65156/tofUI/issues"
69
+
70
+ [tool.setuptools]
71
+ packages = ["tofui"]
72
+
73
+ [tool.setuptools.dynamic]
74
+ version = {attr = "tofui.__version__"}
75
+
76
+ [tool.setuptools.package-data]
77
+ tofui = ["*.py", "py.typed"]
78
+
79
+ [tool.black]
80
+ line-length = 88
81
+ target-version = ['py38']
82
+ include = '\.pyi?$'
83
+ extend-exclude = '''
84
+ /(
85
+ # directories
86
+ \.eggs
87
+ | \.git
88
+ | \.hg
89
+ | \.mypy_cache
90
+ | \.tox
91
+ | \.venv
92
+ | build
93
+ | dist
94
+ )/
95
+ '''
96
+
97
+ [tool.mypy]
98
+ python_version = "3.8"
99
+ warn_return_any = true
100
+ warn_unused_configs = true
101
+ disallow_untyped_defs = true
102
+
103
+ [tool.pytest.ini_options]
104
+ minversion = "6.0"
105
+ addopts = "-ra -q --strict-markers"
106
+ testpaths = ["tests"]
tofui-1.5.0/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,15 @@
1
+ """
2
+ tofUI - Beautiful Infrastructure Plans
3
+
4
+ A Python package for generating beautiful, interactive HTML reports from openTofu and terraform JSON plans.
5
+ """
6
+
7
+ __version__ = "1.5.0"
8
+ __author__ = "tofUI"
9
+ __description__ = "Beautiful OpenTofu and Terraform Infrastructure Plans"
10
+
11
+ from .parser import TerraformPlanParser
12
+ from .generator import HTMLGenerator
13
+ from .analyzer import PlanAnalyzer
14
+
15
+ __all__ = ['TerraformPlanParser', 'HTMLGenerator', 'PlanAnalyzer']
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ tofUI __main__.py
4
+
5
+ Entry point for python -m tofui execution.
6
+ """
7
+
8
+ from .cli import main
9
+
10
+ if __name__ == "__main__":
11
+ main()