validio-cli 8.1.0__tar.gz → 8.2.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-8.1.0 → validio_cli-8.2.1}/PKG-INFO +1 -1
  2. {validio_cli-8.1.0 → validio_cli-8.2.1}/pyproject.toml +1 -1
  3. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/namespaces.py +28 -4
  4. {validio_cli-8.1.0 → validio_cli-8.2.1}/LICENSE +0 -0
  5. {validio_cli-8.1.0 → validio_cli-8.2.1}/README_PUBLIC.md +0 -0
  6. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/__init__.py +0 -0
  7. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/channels.py +0 -0
  8. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/code.py +0 -0
  9. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/config.py +0 -0
  10. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/credentials.py +0 -0
  11. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/dbt.py +0 -0
  12. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/filters.py +0 -0
  13. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/incidents.py +0 -0
  14. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/metrics.py +0 -0
  15. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/notification_rules.py +0 -0
  16. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/resources.py +0 -0
  17. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/segmentations.py +0 -0
  18. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/segments.py +0 -0
  19. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/sources.py +0 -0
  20. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/users.py +0 -0
  21. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/validators.py +0 -0
  22. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/entities/windows.py +0 -0
  23. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/bin/main.py +0 -0
  24. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/components.py +0 -0
  25. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/metadata.py +0 -0
  26. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/namespace.py +0 -0
  27. {validio_cli-8.1.0 → validio_cli-8.2.1}/validio_cli/schema.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: validio-cli
3
- Version: 8.1.0
3
+ Version: 8.2.1
4
4
  Summary: CLI tool to interact with the Validio platform
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -3,7 +3,7 @@ name = "validio-cli"
3
3
  # This version does not represent the released version or any tag. For each
4
4
  # release we automatically bump this before building and publishing so this
5
5
  # should be kept at 0.0.1dev1
6
- version = "8.1.0"
6
+ version = "8.2.1"
7
7
  description = "CLI tool to interact with the Validio platform"
8
8
  authors = ["Validio <support@validio.io>"]
9
9
  license = "Apache-2.0"
@@ -64,7 +64,7 @@ async def create(
64
64
  role: str = typer.Option(
65
65
  None,
66
66
  click_type=RoleSuggestion(),
67
- help="The role to assign --api-key and --member",
67
+ help="The role (name or id) to assign --api-key and --member",
68
68
  ),
69
69
  api_key: list[str] = typer.Option(
70
70
  [],
@@ -113,6 +113,8 @@ async def create(
113
113
  api_keys=ns_api_keys,
114
114
  )
115
115
 
116
+ _raise_on_errors(namespaces)
117
+
116
118
  if output_format == OutputFormat.JSON:
117
119
  return output_json(namespaces, identifier)
118
120
 
@@ -133,7 +135,7 @@ async def update(
133
135
  role: str = typer.Option(
134
136
  None,
135
137
  click_type=RoleSuggestion(),
136
- help="The role to assign --api-key and --member",
138
+ help="The role (name or id) to assign --api-key and --member",
137
139
  ),
138
140
  api_key: list[str] = typer.Option(
139
141
  [],
@@ -198,6 +200,8 @@ async def update(
198
200
  api_keys=api_keys,
199
201
  )
200
202
 
203
+ _raise_on_errors(namespaces)
204
+
201
205
  if output_format == OutputFormat.JSON:
202
206
  return output_json(namespaces, identifier)
203
207
 
@@ -234,11 +238,16 @@ async def remove(
234
238
 
235
239
 
236
240
  def _find_role_id(role_configs: list[dict[str, Any]], role_name: str) -> str:
241
+ # Accept either the role id or a case-insensitive role name — the server
242
+ # returns `role` as a scalar on existing members/apiKeys and the format is
243
+ # not guaranteed, so we tolerate both.
237
244
  for rc in role_configs:
238
- if rc["name"].upper() == role_name.upper():
245
+ if rc["id"] == role_name or rc["name"].casefold() == role_name.casefold():
239
246
  return rc["id"]
240
247
 
241
- raise ValidioError(f"role '{role_name}' not found")
248
+ available = ", ".join(sorted(rc["name"] for rc in role_configs))
249
+
250
+ raise ValidioError(f"role '{role_name}' not found. Available roles: {available}")
242
251
 
243
252
 
244
253
  def _find_admin_role_id(role_configs: list[dict[str, Any]]) -> str:
@@ -247,3 +256,18 @@ def _find_admin_role_id(role_configs: list[dict[str, Any]]) -> str:
247
256
  return rc["id"]
248
257
 
249
258
  raise ValidioError("could not find system Admin role for namespace")
259
+
260
+
261
+ def _raise_on_errors(response: Any) -> None:
262
+ if not isinstance(response, dict):
263
+ return
264
+
265
+ errors = response.get("errors") or []
266
+ if not errors:
267
+ return
268
+
269
+ messages = "; ".join(
270
+ f"{e.get('code', 'UNKNOWN')}: {e.get('message', '')}" for e in errors
271
+ )
272
+
273
+ raise ValidioError(f"server returned errors: {messages}")
File without changes