cloudwright-ai-cli 0.2.23__tar.gz → 0.2.25__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.
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/.gitignore +5 -1
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/PKG-INFO +1 -1
- cloudwright_ai_cli-0.2.25/cloudwright_cli/__init__.py +1 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/chat.py +0 -1
- cloudwright_ai_cli-0.2.25/cloudwright_cli/commands/databricks_cmd.py +56 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/main.py +2 -0
- cloudwright_ai_cli-0.2.23/CLAUDE.md +0 -23
- cloudwright_ai_cli-0.2.23/cloudwright_cli/__init__.py +0 -1
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/README.md +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/__main__.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/__init__.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/analyze_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/catalog_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/compare.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/cost.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/design.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/diff.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/drift_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/export.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/import_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/init_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/lint_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/modify_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/policy.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/refresh_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/score_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/validate.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/project.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/py.typed +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/utils.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/pyproject.toml +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/__init__.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_cli.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_drift_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_init.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_modify_cmd.py +0 -0
- {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_project.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cloudwright-ai-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.25
|
|
4
4
|
Summary: CLI for Cloudwright architecture intelligence
|
|
5
5
|
Project-URL: Homepage, https://github.com/xmpuspus/cloudwright
|
|
6
6
|
Project-URL: Repository, https://github.com/xmpuspus/cloudwright
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.25"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Annotated
|
|
5
|
+
|
|
6
|
+
import typer
|
|
7
|
+
from rich.console import Console
|
|
8
|
+
|
|
9
|
+
console = Console()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def databricks_validate(
|
|
13
|
+
ctx: typer.Context,
|
|
14
|
+
spec_file: Annotated[Path, typer.Argument(help="Path to architecture spec YAML file", exists=True)],
|
|
15
|
+
host: Annotated[
|
|
16
|
+
str | None, typer.Option("--host", envvar="DATABRICKS_HOST", help="Databricks workspace URL")
|
|
17
|
+
] = None,
|
|
18
|
+
token: Annotated[
|
|
19
|
+
str | None, typer.Option("--token", envvar="DATABRICKS_TOKEN", help="Databricks access token")
|
|
20
|
+
] = None,
|
|
21
|
+
) -> None:
|
|
22
|
+
"""Validate Databricks components against a live workspace."""
|
|
23
|
+
from cloudwright import ArchSpec
|
|
24
|
+
|
|
25
|
+
spec = ArchSpec.from_file(spec_file)
|
|
26
|
+
|
|
27
|
+
dbx_components = [c for c in spec.components if c.provider == "databricks"]
|
|
28
|
+
if not dbx_components:
|
|
29
|
+
console.print("No Databricks components found in spec.")
|
|
30
|
+
raise typer.Exit(0)
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
from cloudwright.adapters.databricks import DatabricksWorkspaceAdapter
|
|
34
|
+
|
|
35
|
+
adapter = DatabricksWorkspaceAdapter(host=host, token=token)
|
|
36
|
+
except ImportError:
|
|
37
|
+
console.print(
|
|
38
|
+
"[red]Error:[/red] databricks-sdk not installed. Run: pip install cloudwright-ai[databricks]",
|
|
39
|
+
err=True,
|
|
40
|
+
)
|
|
41
|
+
raise typer.Exit(1)
|
|
42
|
+
|
|
43
|
+
with console.status(f"Validating {len(dbx_components)} Databricks component(s)..."):
|
|
44
|
+
issues = adapter.validate_spec(spec)
|
|
45
|
+
|
|
46
|
+
if not issues:
|
|
47
|
+
console.print("[green]All Databricks components validated successfully.[/green]")
|
|
48
|
+
else:
|
|
49
|
+
severity_style = {"error": "red", "warning": "yellow", "info": "cyan"}
|
|
50
|
+
for issue in issues:
|
|
51
|
+
sev = issue["severity"]
|
|
52
|
+
style = severity_style.get(sev, "white")
|
|
53
|
+
console.print(f" [{style}][{sev.upper()}][/{style}] {issue['component']}: {issue['message']}")
|
|
54
|
+
|
|
55
|
+
has_errors = any(i["severity"] == "error" for i in issues)
|
|
56
|
+
raise typer.Exit(1 if has_errors else 0)
|
|
@@ -6,6 +6,7 @@ from cloudwright_cli.commands.catalog_cmd import catalog_app
|
|
|
6
6
|
from cloudwright_cli.commands.chat import chat
|
|
7
7
|
from cloudwright_cli.commands.compare import compare
|
|
8
8
|
from cloudwright_cli.commands.cost import cost
|
|
9
|
+
from cloudwright_cli.commands.databricks_cmd import databricks_validate
|
|
9
10
|
from cloudwright_cli.commands.design import design
|
|
10
11
|
from cloudwright_cli.commands.diff import diff
|
|
11
12
|
from cloudwright_cli.commands.drift_cmd import drift
|
|
@@ -63,4 +64,5 @@ app.command()(score)
|
|
|
63
64
|
app.command()(analyze)
|
|
64
65
|
app.command()(refresh)
|
|
65
66
|
app.command()(lint)
|
|
67
|
+
app.command()(databricks_validate)
|
|
66
68
|
app.add_typer(catalog_app, name="catalog")
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# cloudwright-cli
|
|
2
|
-
|
|
3
|
-
CLI interface for Cloudwright. Wraps core package with Typer commands and Rich formatting.
|
|
4
|
-
|
|
5
|
-
## Commands
|
|
6
|
-
|
|
7
|
-
All commands are in `cloudwright_cli/commands/`. Each is a standalone module registered in `main.py`.
|
|
8
|
-
|
|
9
|
-
- `design` — Generate architecture from natural language
|
|
10
|
-
- `cost` — Price an ArchSpec, optional multi-cloud comparison
|
|
11
|
-
- `compare` — Full multi-cloud architecture comparison
|
|
12
|
-
- `validate` — Compliance and Well-Architected checks
|
|
13
|
-
- `export` — Export to Terraform, CFN, Mermaid, SBOM, AIBOM
|
|
14
|
-
- `diff` — Compare two ArchSpec files
|
|
15
|
-
- `chat` — Interactive terminal chat or web UI launcher
|
|
16
|
-
- `catalog` — Subgroup with `search` and `compare` subcommands
|
|
17
|
-
|
|
18
|
-
## Conventions
|
|
19
|
-
|
|
20
|
-
- Typer for argument parsing, Rich for output formatting
|
|
21
|
-
- All output goes through Rich Console for consistent formatting
|
|
22
|
-
- Errors shown as `[red]Error:[/red] message`
|
|
23
|
-
- Tables for data, Panels for summaries, Syntax blocks for YAML/HCL
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.23"
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/__init__.py
RENAMED
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/analyze_cmd.py
RENAMED
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/catalog_cmd.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/drift_cmd.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/import_cmd.py
RENAMED
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/init_cmd.py
RENAMED
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/lint_cmd.py
RENAMED
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/modify_cmd.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/refresh_cmd.py
RENAMED
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/score_cmd.py
RENAMED
|
File without changes
|
{cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/validate.py
RENAMED
|
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
|