validio-cli 10.0.0__tar.gz → 10.0.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 (27) hide show
  1. {validio_cli-10.0.0 → validio_cli-10.0.1}/PKG-INFO +1 -1
  2. {validio_cli-10.0.0 → validio_cli-10.0.1}/pyproject.toml +1 -1
  3. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/__init__.py +30 -3
  4. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/code.py +3 -3
  5. {validio_cli-10.0.0 → validio_cli-10.0.1}/README_PUBLIC.md +0 -0
  6. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/channels.py +0 -0
  7. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/config.py +0 -0
  8. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/credentials.py +0 -0
  9. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/dbt.py +0 -0
  10. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/filters.py +0 -0
  11. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/incidents.py +0 -0
  12. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/integrations.py +0 -0
  13. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/metrics.py +0 -0
  14. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/namespaces.py +0 -0
  15. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/notification_rules.py +0 -0
  16. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/resources.py +0 -0
  17. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/segmentations.py +0 -0
  18. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/segments.py +0 -0
  19. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/sources.py +0 -0
  20. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/users.py +0 -0
  21. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/validators.py +0 -0
  22. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/entities/windows.py +0 -0
  23. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/bin/main.py +0 -0
  24. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/components.py +0 -0
  25. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/metadata.py +0 -0
  26. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/namespace.py +0 -0
  27. {validio_cli-10.0.0 → validio_cli-10.0.1}/validio_cli/schema.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: validio-cli
3
- Version: 10.0.0
3
+ Version: 10.0.1
4
4
  Summary: CLI tool to interact with the Validio platform
5
5
  Author: Validio
6
6
  Author-email: Validio <support@validio.io>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "validio-cli"
3
- version = "10.0.0"
3
+ version = "10.0.1"
4
4
  description = "CLI tool to interact with the Validio platform"
5
5
  authors = [{ name = "Validio", email = "support@validio.io" }]
6
6
  requires-python = ">=3.10,<4"
@@ -11,6 +11,7 @@ from pathlib import Path
11
11
  from types import EllipsisType
12
12
  from typing import Any, TypeVar
13
13
 
14
+ import click
14
15
  import typer
15
16
  from camel_converter import to_snake
16
17
  from tabulate import tabulate
@@ -29,9 +30,12 @@ T = TypeVar("T", bound="OutputSettings")
29
30
  DEFAULT_NAMESPACE: str = "default"
30
31
 
31
32
  # User-Agent sent for all CLI requests. We report both the CLI version and the
32
- # SDK version it builds on. The CLI is only used for IaC, so this lets Surface
33
- # tell IaC traffic apart from direct SDK usage and see which versions are in use.
33
+ # SDK version it builds on.
34
34
  CLI_USER_AGENT = f"validio-cli@{cli_version()} {SDK_USER_AGENT}"
35
+ # Header reporting the CLI command (e.g. `channels get`)
36
+ CLI_COMMAND_HEADER = "x-validio-cli-command"
37
+ # Header flagging IaC operations (`validio code` plan/apply/import).
38
+ IAC_HEADER = "x-validio-iac"
35
39
 
36
40
 
37
41
  class OutputFormat(str, Enum):
@@ -97,12 +101,35 @@ class AsyncTyper(typer.Typer):
97
101
  return decorator
98
102
 
99
103
 
104
+ def _cli_headers(iac: bool = False) -> dict[str, str]:
105
+ """Build the CLI headers for an outgoing request.
106
+
107
+ :param iac: Whether the request originates from an IaC operation.
108
+ """
109
+ headers: dict[str, str] = {}
110
+
111
+ ctx = click.get_current_context(silent=True)
112
+ if ctx is not None:
113
+ # `command_path` is e.g. "validio channels get",
114
+ # drop the program name to get the command itself.
115
+ command = " ".join(ctx.command_path.split()[1:])
116
+ if command:
117
+ headers[CLI_COMMAND_HEADER] = command
118
+
119
+ if iac:
120
+ headers[IAC_HEADER] = "true"
121
+
122
+ return headers
123
+
124
+
100
125
  def get_client(
101
126
  config_dir: str = ConfigDir,
102
127
  user_agent: str = CLI_USER_AGENT,
128
+ iac: bool = False,
103
129
  ) -> tuple[APIClient, ValidioConfig]:
104
130
  cfg = Config(Path(config_dir)).read()
105
- return APIClient(config=cfg, user_agent=user_agent), cfg
131
+ headers = _cli_headers(iac=iac)
132
+ return APIClient(config=cfg, user_agent=user_agent, headers=headers), cfg
106
133
 
107
134
 
108
135
  @dataclass
@@ -188,7 +188,7 @@ async def plan(
188
188
  progress: bool = show_progress_option,
189
189
  ) -> None:
190
190
  dir_path = directory_or_default(directory)
191
- client, _ = get_client(config_dir)
191
+ client, _ = get_client(config_dir, iac=True)
192
192
 
193
193
  schema_reinference = create_source_schema_reinference(
194
194
  update_schema, update_all_schemas
@@ -258,7 +258,7 @@ async def apply(
258
258
  ),
259
259
  ) -> None:
260
260
  dir_path = directory_or_default(directory)
261
- client, _ = get_client(config_dir)
261
+ client, _ = get_client(config_dir, iac=True)
262
262
 
263
263
  schema_reinference = create_source_schema_reinference(
264
264
  update_schema, update_all_schemas
@@ -374,7 +374,7 @@ async def _import(
374
374
  )
375
375
 
376
376
  dir_path = directory_or_default(directory)
377
- client, _ = get_client(config_dir)
377
+ client, _ = get_client(config_dir, iac=True)
378
378
  namespace = get_namespace(dir_path)
379
379
 
380
380
  if import_namespace: