peak-sdk 1.15.0__py3-none-any.whl → 1.16.0__py3-none-any.whl

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 (64) hide show
  1. peak/__init__.py +1 -1
  2. peak/_version.py +1 -1
  3. peak/auth.py +1 -1
  4. peak/base_client.py +1 -1
  5. peak/callbacks.py +1 -1
  6. peak/cli/__init_.py +1 -1
  7. peak/cli/args.py +1 -1
  8. peak/cli/cli.py +1 -1
  9. peak/cli/helpers.py +1 -1
  10. peak/cli/metrics/__init__.py +1 -1
  11. peak/cli/metrics/metrics.py +1 -1
  12. peak/cli/press/__init__.py +1 -1
  13. peak/cli/press/apps/__init__.py +1 -1
  14. peak/cli/press/apps/deployments.py +1 -1
  15. peak/cli/press/blocks/__init__.py +1 -1
  16. peak/cli/press/blocks/deployments.py +1 -1
  17. peak/cli/press/specs.py +1 -1
  18. peak/cli/resources/__init__.py +1 -1
  19. peak/cli/resources/alerts/__init__.py +1 -1
  20. peak/cli/resources/alerts/emails.py +1 -1
  21. peak/cli/resources/artifacts.py +1 -1
  22. peak/cli/resources/images.py +1 -1
  23. peak/cli/resources/services.py +1 -1
  24. peak/cli/resources/tenants.py +1 -1
  25. peak/cli/resources/users.py +1 -1
  26. peak/cli/resources/webapps.py +1 -1
  27. peak/cli/resources/workflows.py +70 -5
  28. peak/cli/version.py +1 -1
  29. peak/compression.py +1 -1
  30. peak/config.py +1 -1
  31. peak/constants.py +1 -1
  32. peak/exceptions.py +1 -1
  33. peak/handler.py +1 -1
  34. peak/helpers.py +15 -1
  35. peak/logger.py +1 -1
  36. peak/metrics/__init__.py +1 -1
  37. peak/metrics/metrics.py +1 -1
  38. peak/output.py +1 -1
  39. peak/press/__init__.py +1 -1
  40. peak/press/specs.py +1 -1
  41. peak/resources/__init__.py +1 -1
  42. peak/resources/alerts.py +1 -1
  43. peak/resources/artifacts.py +1 -1
  44. peak/resources/images.py +1 -1
  45. peak/resources/services.py +1 -1
  46. peak/resources/tenants.py +1 -1
  47. peak/resources/users.py +1 -1
  48. peak/resources/webapps.py +1 -1
  49. peak/resources/workflows.py +103 -4
  50. peak/session.py +31 -11
  51. peak/telemetry.py +4 -3
  52. peak/template.py +1 -1
  53. peak/tools/__init__.py +1 -1
  54. peak/tools/logging/__init__.py +1 -1
  55. peak/tools/logging/log_handler.py +1 -1
  56. peak/tools/logging/log_level.py +1 -1
  57. peak/tools/logging/logger.py +1 -1
  58. peak/tools/logging/utils.py +1 -1
  59. peak/validators.py +1 -1
  60. {peak_sdk-1.15.0.dist-info → peak_sdk-1.16.0.dist-info}/METADATA +3 -3
  61. {peak_sdk-1.15.0.dist-info → peak_sdk-1.16.0.dist-info}/RECORD +64 -64
  62. {peak_sdk-1.15.0.dist-info → peak_sdk-1.16.0.dist-info}/LICENSE +0 -0
  63. {peak_sdk-1.15.0.dist-info → peak_sdk-1.16.0.dist-info}/WHEEL +0 -0
  64. {peak_sdk-1.15.0.dist-info → peak_sdk-1.16.0.dist-info}/entry_points.txt +0 -0
peak/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/_version.py CHANGED
@@ -18,4 +18,4 @@
18
18
  # # You should have received a copy of the APACHE LICENSE, VERSION 2.0
19
19
  # # along with this program. If not, see <https://apache.org/licenses/LICENSE-2.0>
20
20
  #
21
- __version__: str = "1.15.0"
21
+ __version__: str = "1.16.0"
peak/auth.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/base_client.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/callbacks.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/cli/__init_.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/cli/args.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/cli/cli.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/cli/helpers.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/cli/press/specs.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1035,6 +1035,71 @@ def describe(
1035
1035
  writer.write(response)
1036
1036
 
1037
1037
 
1038
+ @app.command(short_help="Pause a scheduled workflow.")
1039
+ def pause(
1040
+ ctx: typer.Context,
1041
+ workflow_id: int = _WORKFLOW_ID,
1042
+ dry_run: Optional[bool] = DRY_RUN, # noqa: ARG001
1043
+ paging: Optional[bool] = PAGING, # noqa: ARG001
1044
+ output_type: Optional[OutputTypesNoTable] = OUTPUT_TYPES, # noqa: ARG001
1045
+ ) -> None:
1046
+ """***Pause*** a scheduled workflow.
1047
+
1048
+ \b
1049
+ 📝 ***Example usage:***<br/>
1050
+ ```bash
1051
+ peak workflows pause 9999
1052
+ ```
1053
+
1054
+ \b
1055
+ 🆗 ***Response:***
1056
+ ```json
1057
+ {}
1058
+ ```
1059
+
1060
+ 🔗 [**API Documentation**](https://service.dev.peak.ai/workflows/api-docs/index.htm#/Workflows/post_api_v1_workflows__workflowId__pause)
1061
+ """
1062
+ workflow_client: Workflow = ctx.obj["client"]
1063
+ writer: Writer = ctx.obj["writer"]
1064
+
1065
+ with writer.pager():
1066
+ response = workflow_client.pause_workflow(workflow_id=workflow_id)
1067
+
1068
+ writer.write(response)
1069
+
1070
+
1071
+ @app.command(short_help="Resume a paused workflow.")
1072
+ def resume(
1073
+ ctx: typer.Context,
1074
+ workflow_id: int = _WORKFLOW_ID,
1075
+ dry_run: Optional[bool] = DRY_RUN, # noqa: ARG001
1076
+ paging: Optional[bool] = PAGING, # noqa: ARG001
1077
+ output_type: Optional[OutputTypesNoTable] = OUTPUT_TYPES, # noqa: ARG001
1078
+ ) -> None:
1079
+ """***Resume*** a paused workflow.
1080
+
1081
+ \b
1082
+ 📝 ***Example usage:***<br/>
1083
+ ```bash
1084
+ peak workflows resume 9999
1085
+ ```
1086
+
1087
+ \b
1088
+ 🆗 ***Response:***
1089
+ ```json
1090
+ {}
1091
+ ```
1092
+
1093
+ 🔗 [**API Documentation**](https://service.dev.peak.ai/workflows/api-docs/index.htm#/Workflows/post_api_v1_workflows__workflowId__resume)
1094
+ """
1095
+ workflow_client: Workflow = ctx.obj["client"]
1096
+ writer: Writer = ctx.obj["writer"]
1097
+
1098
+ with writer.pager():
1099
+ response = workflow_client.resume_workflow(workflow_id=workflow_id)
1100
+ writer.write(response)
1101
+
1102
+
1038
1103
  @app.command(short_help="Delete a workflow.")
1039
1104
  def delete(
1040
1105
  ctx: typer.Context,
@@ -1303,12 +1368,12 @@ def get_execution_logs(
1303
1368
  "nextToken": "f/37846375578651780454915234936364900527730394239380553728/s"
1304
1369
  }
1305
1370
  ```
1306
-
1307
- 🔗 [**API Documentation**](https://service.peak.ai/workflows/api-docs/index.htm#/Executions/get-workflow-step-logs)
1308
1371
  """
1309
1372
  workflow_client: Workflow = ctx.obj["client"]
1310
1373
  writer = Writer()
1311
1374
 
1375
+ is_spoke_tenant = workflow_client.session.is_spoke_tenant
1376
+
1312
1377
  pager = writer.pager() # Create pager context
1313
1378
 
1314
1379
  with pager:
@@ -1322,11 +1387,11 @@ def get_execution_logs(
1322
1387
  file_name=file_name,
1323
1388
  )
1324
1389
 
1325
- if save or not response or "stepRunStatus" not in response or "logs" not in response:
1390
+ if save or not response or "logs" not in response:
1326
1391
  break
1327
1392
 
1328
1393
  if follow:
1329
- if (response["stepRunStatus"] != "Running") and (
1394
+ if (is_spoke_tenant or response["stepRunStatus"] != "Running") and (
1330
1395
  response["logs"] is None or len(response["logs"]) == 0
1331
1396
  ):
1332
1397
  break
peak/cli/version.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/compression.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/config.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/constants.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/exceptions.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/handler.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/helpers.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -303,3 +303,17 @@ def search_action(current_path: str, current_dict: Dict[str, Any], action: str)
303
303
  return {"has_permission": has_permission, "deeper_levels": False}
304
304
 
305
305
  return {"has_permission": False, "deeper_levels": True}
306
+
307
+
308
+ def safe_json(response: requests.Response) -> Optional[Any]:
309
+ """Safely attempts to decode JSON from the given response.
310
+
311
+ Returns the decoded JSON if available; otherwise, returns None.
312
+ """
313
+ headers = getattr(response, "headers", {})
314
+ if headers.get("Content-Type", "").startswith("application/json"):
315
+ try:
316
+ return response.json()
317
+ except (ValueError, json.JSONDecodeError):
318
+ return None
319
+ return None
peak/logger.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/metrics/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/metrics/metrics.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/output.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/press/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/press/specs.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/resources/alerts.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/resources/images.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/resources/tenants.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/resources/users.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/resources/webapps.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -24,6 +24,7 @@ from __future__ import annotations
24
24
 
25
25
  from typing import Any, Dict, Iterator, List, Literal, Optional, overload
26
26
 
27
+ from peak import exceptions
27
28
  from peak.base_client import BaseClient
28
29
  from peak.constants import ContentType, HttpMethods
29
30
  from peak.exceptions import InvalidParameterException
@@ -1367,6 +1368,66 @@ class Workflow(BaseClient):
1367
1368
 
1368
1369
  return self.update_workflow(workflow_id=workflow_id, body=updated_body)
1369
1370
 
1371
+ def pause_workflow(
1372
+ self: Workflow,
1373
+ workflow_id: int,
1374
+ ) -> Dict[None, None]:
1375
+ """Pause a scheduled workflow.
1376
+
1377
+ REFERENCE:
1378
+ 🔗 `API Documentation <https://service.peak.ai/workflows/api-docs/index.htm#/Workflows/post_api_v1_workflows__workflowId__pause>`__
1379
+
1380
+ Args:
1381
+ workflow_id (int): The ID of the workflow to pause.
1382
+
1383
+ Returns:
1384
+ dict: Empty dictionary object.
1385
+
1386
+ Raises:
1387
+ UnauthorizedException: The credentials are invalid.
1388
+ ForbiddenException: The user does not have permission to perform the operation.
1389
+ NotFoundException: The given workflow does not exist.
1390
+ ConflictException: If the workflow is in a conflicting state while pausing.
1391
+ InternalServerErrorException: The server failed to process the request.
1392
+ """
1393
+ method, endpoint = HttpMethods.POST, f"{self.BASE_ENDPOINT}/workflows/{workflow_id}/pause"
1394
+
1395
+ return self.session.create_request( # type: ignore[no-any-return]
1396
+ endpoint,
1397
+ method,
1398
+ content_type=ContentType.APPLICATION_JSON,
1399
+ )
1400
+
1401
+ def resume_workflow(
1402
+ self: Workflow,
1403
+ workflow_id: int,
1404
+ ) -> Dict[None, None]:
1405
+ """Resume a paused workflow.
1406
+
1407
+ REFERENCE:
1408
+ 🔗 `API Documentation <https://service.peak.ai/workflows/api-docs/index.htm#/Workflows/post_api_v1_workflows__workflowId__resume>`__
1409
+
1410
+ Args:
1411
+ workflow_id (int): The ID of the workflow to resume.
1412
+
1413
+ Returns:
1414
+ dict: Empty dictionary object.
1415
+
1416
+ Raises:
1417
+ UnauthorizedException: The credentials are invalid.
1418
+ ForbiddenException: The user does not have permission to perform the operation.
1419
+ NotFoundException: The given workflow does not exist.
1420
+ ConflictException: If the workflow is in a conflicting state while resuming.
1421
+ InternalServerErrorException: The server failed to process the request.
1422
+ """
1423
+ method, endpoint = HttpMethods.POST, f"{self.BASE_ENDPOINT}/workflows/{workflow_id}/resume"
1424
+
1425
+ return self.session.create_request( # type: ignore[no-any-return]
1426
+ endpoint,
1427
+ method,
1428
+ content_type=ContentType.APPLICATION_JSON,
1429
+ )
1430
+
1370
1431
  def delete_workflow(
1371
1432
  self: Workflow,
1372
1433
  workflow_id: int,
@@ -1611,9 +1672,6 @@ class Workflow(BaseClient):
1611
1672
  ) -> Dict[str, Any] | None:
1612
1673
  """Get workflow execution logs.
1613
1674
 
1614
- REFERENCE:
1615
- 🔗 `API Documentation <https://service.peak.ai/workflows/api-docs/index.htm#/Executions/get-workflow-step-logs>`__
1616
-
1617
1675
  Args:
1618
1676
  workflow_id (int): ID of the workflow to fetch executions.
1619
1677
  execution_id (str): ID of the execution to fetch logs.
@@ -1635,8 +1693,12 @@ class Workflow(BaseClient):
1635
1693
  method = HttpMethods.GET
1636
1694
  get_logs_endpoint = f"{self.BASE_ENDPOINT}/workflows/{workflow_id}/executions/{execution_id}/logs"
1637
1695
  download_logs_endpoint = f"{get_logs_endpoint}/download"
1696
+ is_spoke_tenant = self.session.is_spoke_tenant
1638
1697
 
1639
1698
  if save:
1699
+ if is_spoke_tenant:
1700
+ err = "Cannot save logs for this tenant"
1701
+ raise exceptions.BadRequestException(err)
1640
1702
  response = self.session.create_request(
1641
1703
  download_logs_endpoint,
1642
1704
  method,
@@ -1651,6 +1713,43 @@ class Workflow(BaseClient):
1651
1713
  download_logs_helper(response=response, file_name=updated_file_name)
1652
1714
  return None
1653
1715
 
1716
+ if is_spoke_tenant:
1717
+ log_source = ""
1718
+ start_time = ""
1719
+ end_time = ""
1720
+
1721
+ spoke_domain = self.session.spoke_domain
1722
+ logs_endpoint_spoke = "spoke/api/v1/logs/workflow"
1723
+ logs_subdomain_spoke = f"service.{spoke_domain.split('.')[0]}"
1724
+
1725
+ execution_details = self.get_execution_details(workflow_id, execution_id)
1726
+ if execution_details:
1727
+ step_details: Optional[Dict[str, str]] = next(
1728
+ (step for step in execution_details["steps"] if step["name"] == step_name),
1729
+ None,
1730
+ )
1731
+ else:
1732
+ step_details = None
1733
+ if step_details is not None:
1734
+ log_source = step_details.get("nodeId", "")
1735
+ start_time = step_details.get("startedAt", "")
1736
+ end_time = step_details.get("finishedAt", "")
1737
+
1738
+ spoke_params: Dict[str, Any] = {
1739
+ "logSource": log_source,
1740
+ "startTime": start_time,
1741
+ "endTime": end_time,
1742
+ "nextToken": next_token,
1743
+ }
1744
+
1745
+ return self.session.create_request( # type: ignore[no-any-return]
1746
+ endpoint=logs_endpoint_spoke,
1747
+ method=method,
1748
+ content_type=ContentType.APPLICATION_JSON,
1749
+ params=spoke_params,
1750
+ subdomain=logs_subdomain_spoke,
1751
+ )
1752
+
1654
1753
  params: Dict[str, Any] = {
1655
1754
  "stepName": step_name,
1656
1755
  "nextToken": next_token,
peak/session.py CHANGED
@@ -22,6 +22,7 @@
22
22
 
23
23
  from __future__ import annotations
24
24
 
25
+ import json
25
26
  import os
26
27
  from pathlib import Path
27
28
  from typing import Any, Dict, Iterator, List, Optional
@@ -61,6 +62,8 @@ class Session:
61
62
  stage: Stage
62
63
  base_domain: str
63
64
  handler: Handler
65
+ is_spoke_tenant: bool
66
+ spoke_domain: str
64
67
 
65
68
  def __init__(
66
69
  self,
@@ -79,6 +82,7 @@ class Session:
79
82
  self._set_stage(stage)
80
83
  self._set_base_domain()
81
84
  self.handler = Handler()
85
+ self._set_spoke_domain()
82
86
 
83
87
  def create_request(
84
88
  self,
@@ -115,7 +119,7 @@ class Session:
115
119
  headers: Dict[str, str] = {"Authorization": self.auth_token}
116
120
  base_domain: str = get_base_domain(stage=self.stage.value, subdomain=subdomain)
117
121
  url: str = f"{base_domain}/{endpoint}"
118
- return self.handler.make_request(
122
+ response = self.handler.make_request(
119
123
  url,
120
124
  method,
121
125
  content_type=content_type,
@@ -124,11 +128,14 @@ class Session:
124
128
  body=body or {},
125
129
  path=path,
126
130
  ignore_files=ignore_files,
127
- session_meta={
128
- "stage": self.stage,
129
- },
131
+ session_meta={"stage": self.stage},
130
132
  file_key=file_key,
131
- ).json()
133
+ )
134
+
135
+ try:
136
+ return response.json()
137
+ except (ValueError, json.JSONDecodeError):
138
+ return {}
132
139
 
133
140
  def create_generator_request(
134
141
  self,
@@ -255,12 +262,25 @@ class Session:
255
262
  self.stage = Stage(stage)
256
263
  return
257
264
 
258
- logger.info("stage not given, searching for PEAK__STAGE in env variables")
259
- if not os.environ.get("PEAK__STAGE"):
260
- logger.info("PEAK__STAGE environment variable is not set, defaulting to PROD")
261
- self.stage = Stage.PROD
262
- return
263
- self.stage = Stage(os.environ["PEAK__STAGE"])
265
+ logger.info("stage not given, searching for PEAK__STAGE or STAGE in env variables")
266
+ final_stage = os.environ.get("PEAK__STAGE", os.environ.get("STAGE", Stage.PROD))
267
+ self.stage = Stage(final_stage)
268
+
269
+ def _set_spoke_domain(self) -> None:
270
+ endpoint = "tenant-management/api/v1/external/tenants/tenant-metadata"
271
+ tenant_metadata: Dict[str, Any] = self.create_request(
272
+ endpoint,
273
+ method=HttpMethods.GET,
274
+ content_type=ContentType.APPLICATION_JSON,
275
+ )
276
+
277
+ if "spokeDetails" in tenant_metadata:
278
+ self.is_spoke_tenant = True
279
+ spoke_details: Dict[str, Any] = tenant_metadata["spokeDetails"]
280
+ self.spoke_domain = spoke_details.get("domain", "")
281
+ else:
282
+ self.is_spoke_tenant = False
283
+ self.spoke_domain = ""
264
284
 
265
285
 
266
286
  __all__: List[str] = ["Session", "_get_default_session"]
peak/telemetry.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -19,6 +19,7 @@
19
19
  # # along with this program. If not, see <https://apache.org/licenses/LICENSE-2.0>
20
20
  #
21
21
  """Decorator for sending telemetry data for each request."""
22
+
22
23
  from __future__ import annotations
23
24
 
24
25
  import platform
@@ -33,7 +34,7 @@ import requests
33
34
  import peak.config
34
35
  from peak.constants import ContentType, HttpMethods, Stage
35
36
  from peak.exceptions import BaseHttpException
36
- from peak.helpers import get_base_domain
37
+ from peak.helpers import get_base_domain, safe_json
37
38
 
38
39
  from ._version import __version__
39
40
 
@@ -140,7 +141,7 @@ def telemetry(make_request: F) -> F:
140
141
  telemetry_url = get_telemetry_url(session_meta)
141
142
 
142
143
  telemetry_body = {
143
- "response": res.json() if method != HttpMethods.GET and res else None,
144
+ "response": safe_json(res) if method != HttpMethods.GET and res else None,
144
145
  "error": str(error) if error else None,
145
146
  "url": url,
146
147
  "requestMethod": method.value,
peak/template.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/tools/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -84,7 +84,7 @@ def peak_contexts_processor(
84
84
  "press_deployment_id": os.getenv("PRESS_DEPLOYMENT_ID"),
85
85
  "run_id": os.getenv("PEAK_RUN_ID"),
86
86
  "exec_id": os.getenv("PEAK_EXEC_ID"),
87
- "stage": os.getenv("PEAK__STAGE"),
87
+ "stage": os.getenv("PEAK__STAGE", os.getenv("STAGE")),
88
88
  "tenant_name": os.getenv("TENANT_NAME", os.getenv("TENANT")),
89
89
  "tenant_id": os.getenv("TENANT_ID"),
90
90
  "api_name": os.getenv("PEAK_API_NAME"),
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
peak/validators.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
2
+ # # Copyright © 2025 Peak AI Limited. or its affiliates. All Rights Reserved.
3
3
  # #
4
4
  # # Licensed under the Apache License, Version 2.0 (the "License"). You
5
5
  # # may not use this file except in compliance with the License. A copy of
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: peak-sdk
3
- Version: 1.15.0
3
+ Version: 1.16.0
4
4
  Summary: Python SDK for interacting with the Peak platform
5
5
  Home-page: https://docs.peak.ai/sdk/latest/
6
6
  License: Apache-2.0
@@ -106,7 +106,7 @@ Follow these steps to create a virtual environment using Python's built-in `venv
106
106
  This should return a response of the following format
107
107
 
108
108
  ```bash
109
- peak-cli==1.15.0
109
+ peak-cli==1.16.0
110
110
  Python==3.12.3
111
111
  System==Darwin(23.6.0)
112
112
  ```
@@ -122,7 +122,7 @@ Follow these steps to create a virtual environment using Python's built-in `venv
122
122
  This should print the version of the SDK
123
123
 
124
124
  ```
125
- 1.15.0
125
+ 1.16.0
126
126
  ```
127
127
 
128
128
  ### Using the SDK and CLI
@@ -1,61 +1,61 @@
1
- peak/__init__.py,sha256=lxS3Xqyj9yvZdI3DVWbfn8i_Lw4t2Ujw9HbKe44-LY8,1284
1
+ peak/__init__.py,sha256=UaVwsRIPq0Wuti8j2x4ijGRVYywglfjvZGz6ALBA7Oo,1284
2
2
  peak/_metadata.py,sha256=8w0pXN03pDvh1toM-divY6HNVF8znTqGGG2T9Q4hEl4,30672
3
- peak/_version.py,sha256=Ph3gPAZeWhD5jqDIaSjLJarM1RKHYMaiZ0nF-0YKKlw,887
4
- peak/auth.py,sha256=KcqCqovY6sFiMGNAGP9k3AtCAXrZ-tYd7QP-PFYorX0,904
5
- peak/base_client.py,sha256=3cS8hZApONkojwdgzt_tbwSxwpFcn3xGwzVcmxkgOJc,1808
6
- peak/callbacks.py,sha256=k_p2Av5_ZWD8bDzcSPhbYaAS2xHQpVI1cSkAecnmuqU,3775
7
- peak/cli/__init_.py,sha256=enzNZ-aEPmKIC8eExPvF-ZdomGroRUPmP09003PNGAg,859
8
- peak/cli/args.py,sha256=d9fBj1DG1sDbE_wfVXlFtN_OQkxR5xrjBZWJKRPBFKQ,6166
9
- peak/cli/cli.py,sha256=9bvvsHV0KWQANznycx5g0VL3V7pbLXkNpmOmpknG-bs,2531
10
- peak/cli/helpers.py,sha256=EjfD-RXfZNjGYHobNNa-iqYhy9Q4c9quYF0oumTmwYE,8629
11
- peak/cli/metrics/__init__.py,sha256=UetIMIJnvPfk1K0VQ6ITA-nEOS7a7MHfW7EXslSlLok,894
12
- peak/cli/metrics/metrics.py,sha256=ry8YIRhQccZhjqLO_nJOvBf7T-cUDYOSHlr92Jz63nM,26301
13
- peak/cli/press/__init__.py,sha256=7zvL15sobpdrEuGoziADkJVnrHMiZKINYr4FDRFetY8,898
14
- peak/cli/press/apps/__init__.py,sha256=_bUtQG1zrO9Jv5zIFFKikR82-NsAfpow2KgSOa3oX_M,1459
15
- peak/cli/press/apps/deployments.py,sha256=t47FPfEOORXvb9_0F0cds0sxikMaNqOs-QEbsvebkl0,18737
3
+ peak/_version.py,sha256=cu_TemElAApWGvsOxlze45A7vch42u3NldWSg0l0Qg4,887
4
+ peak/auth.py,sha256=A6nM9VGUdPJpFTFmb1zeeHjhKfBIsAyIMmnF9ajZkgs,904
5
+ peak/base_client.py,sha256=UO25ZViCQfKbBEDEfCdKS-eLXaVzb1aGnYDntBZ77ko,1808
6
+ peak/callbacks.py,sha256=WRVxSpg0Ur3uzG1aqxX4dQ5YV_Dr4GBrwYddppztcdM,3775
7
+ peak/cli/__init_.py,sha256=cpyVZFRLvtiZw6X0TEI6xF7bYdWSQL6YDjDmBHsLzO4,859
8
+ peak/cli/args.py,sha256=6vFvxburNhVZ3MOEhGsbXCb2IwURCf_nqcmnEUvsqzg,6166
9
+ peak/cli/cli.py,sha256=ybm87AO0JNTMiIPpaWZRXHwfV76oHOjhDFDlHPo3KI4,2531
10
+ peak/cli/helpers.py,sha256=Jon5yCgXUbRHJddi0Wj0mny3OIWpfaJxV4zW_jLuoFU,8629
11
+ peak/cli/metrics/__init__.py,sha256=O2Nxt8hTbW7E6IdFR5_cuL8WTiEk2Hf9QFNo29bpwfY,894
12
+ peak/cli/metrics/metrics.py,sha256=4ipBmGJS5AW4FLjOqA4s92XL7WUjfYoYnVA1G8GEvlA,26301
13
+ peak/cli/press/__init__.py,sha256=Uiir3EoPCWk_zoEk-RitATS20RxDLqiW8Iz5jybrDts,898
14
+ peak/cli/press/apps/__init__.py,sha256=Z_-egO6FtdFqAgy5KmUUY-F9ELaGcvJYd5yMbyHoCh4,1459
15
+ peak/cli/press/apps/deployments.py,sha256=iAPlFA4fDhPi_gO-VaXo5hwBkujy3MCrYwbR083Jjcg,18737
16
16
  peak/cli/press/apps/specs.py,sha256=9veK_CGrOUTpNEMIn1j-xrkcW8giY4E9LuQLpBuH8DQ,19635
17
- peak/cli/press/blocks/__init__.py,sha256=0kQIpLD29rlec5xTB9RLNPdIHxf6vi6_3gukBkwaySI,1499
18
- peak/cli/press/blocks/deployments.py,sha256=galqAK58qDvv4bpyL1z3cQ2YhxEu2msadoVXB4epOq0,21953
17
+ peak/cli/press/blocks/__init__.py,sha256=gv42qPm2SMBOZ4j3jVYs_02CWZsWaDzNUnGmcLpOKPc,1499
18
+ peak/cli/press/blocks/deployments.py,sha256=WnTogya42FVyRR_180ZQJ6KmlRUEJDyOL64kppimbdU,21953
19
19
  peak/cli/press/blocks/specs.py,sha256=w-fuip1fgqa8NNPeSPl4MZMk-4SDJT6rhfBjxvPLlrM,63892
20
20
  peak/cli/press/deployments.py,sha256=wdaxRHva59SdBB--gid19kekxTBv8qfnpI4UEXsIX1Q,8523
21
- peak/cli/press/specs.py,sha256=7XFWmgOuNBM8N482InvtQiZoQOldHqcQghLyHCmLHHI,4737
22
- peak/cli/resources/__init__.py,sha256=ThMYJ-QNULjTWOmAGUzhKWuqDcHq73DxzgTV2r5-uLs,883
23
- peak/cli/resources/alerts/__init__.py,sha256=TyeLPOGiA4qvOKORV3Ejlx8n6lGfX1G2GcU-bpYsgPE,1197
24
- peak/cli/resources/alerts/emails.py,sha256=Z2qhub2eFhGLjVY_koto_SoqB1nQ3uWvdW_Zft1ukAU,12435
25
- peak/cli/resources/artifacts.py,sha256=iYx29_FUdohxmm5zwwRtrOAedVSFgjVo8iVA7CTmtgE,12619
26
- peak/cli/resources/images.py,sha256=SwZC0y6pw3mq1HMiO9nPV3YzykbMuSIGt2TD47ZTZ1Y,43133
27
- peak/cli/resources/services.py,sha256=ZiWX4OyR9bMDglhRJNF8fY9YjGfH4ZDqxeNvCO88s4Q,25666
28
- peak/cli/resources/tenants.py,sha256=1vmNOwmLQdNV9RSVNaOZBRcAzHkOzIcVNz5ZH390O0c,4066
29
- peak/cli/resources/users.py,sha256=1qDv8bHYoIBHZ903Y5PBU_KIrMvOY4FrHPay4r0UF_c,2635
30
- peak/cli/resources/webapps.py,sha256=RyYxi2x8aJcQQ4Zowu0xqyMAmS8qlp0Mp-zodDKqkVw,21140
31
- peak/cli/resources/workflows.py,sha256=GVFASMaR-tVg93YowKhe0EWsM0v7FnSu9SuDmQdwnlM,86399
21
+ peak/cli/press/specs.py,sha256=fqbAVaO_yMYq73orefX7FU5M1BoTMFcPJexqmCZMzog,4737
22
+ peak/cli/resources/__init__.py,sha256=bAXS042xP_5_0f8jpRELYFrSg0xXNN6hjsoFhZ74Alg,883
23
+ peak/cli/resources/alerts/__init__.py,sha256=5Ol0XeSwnbQLycnCFr6XLog7B3nAYY4ohS5hC4Sy71g,1197
24
+ peak/cli/resources/alerts/emails.py,sha256=WrhEwy2uSdu7_ysjliOX3_Hb6b4ptIMYO5CW0djauPI,12435
25
+ peak/cli/resources/artifacts.py,sha256=Ik0NlvpRpQj9J_bU-yd5_ujWmU03ugC5q7Fy8Sx85ac,12619
26
+ peak/cli/resources/images.py,sha256=f4SFC34yBBkbzqw4i72RjuLapvczTUIeZHFPIbLW9Hw,43133
27
+ peak/cli/resources/services.py,sha256=ySgpv-7bUsJ4bhRiMU2zvlC5TX_3M-73zsvV84Ki0bw,25666
28
+ peak/cli/resources/tenants.py,sha256=5SkUoW8O_LGqTYVzWYO9m3HjoXWifcmS66LMf5TFjsQ,4066
29
+ peak/cli/resources/users.py,sha256=jqsXEG6sJSYgk0B2ejk7sB_Uox8Pi_dmlyAb1TwXogU,2635
30
+ peak/cli/resources/webapps.py,sha256=f04yCzu307QzMXD4J8OBDL0Ne3bPyYYTCG1A0eT5yQk,21140
31
+ peak/cli/resources/workflows.py,sha256=XPidRD1dm-b5_dyzh22t3WBNwHt-syIIbjVZEIEs91U,88110
32
32
  peak/cli/ruff.toml,sha256=fpwsdsoY9ktmnOMvwONo13_myn0N5AcoDq8mMueCVDs,267
33
- peak/cli/version.py,sha256=Y8HJCJJqkXnpcXw8dyaJcPZmIDOl32bJZ2bWmjmlJBM,1654
34
- peak/compression.py,sha256=XPYjtREe93Gxlnn9YkSnBwaFKTIJSZ6MOPeuqwi3qTs,7894
35
- peak/config.py,sha256=FZ6aIN0gwA52noh-8HJkGnUr8HEOpyNFk6uR4QWt65o,1146
36
- peak/constants.py,sha256=TDMN4cXXKyR_Q8maeo8Ukvprl_Bz0YtYytD3yuHBZKs,3312
37
- peak/exceptions.py,sha256=xAPgn8KHsKEEiHoViGPrF3TF1Ma_lSk6tgki2Yv_yEY,7491
38
- peak/handler.py,sha256=9HFbVtxJ6bEBgvpF8PmlPYa6EOHLKejWMBL3SJd26VM,17229
39
- peak/helpers.py,sha256=J2q1syT-2V5eD8gkgcH8mk6gNLsEvPa7qFcB390O6V0,9879
40
- peak/logger.py,sha256=bPq_7mdbhFoUcnV_LCi8hRDrb7INwf8PHHEx2z83bFU,1548
41
- peak/metrics/__init__.py,sha256=g5ufdcpozE7C6jJVbzo9XQNK3o9dNTy31wgIaRBmrHQ,1057
42
- peak/metrics/metrics.py,sha256=oeexaJsy6CWiC6lwBPo6kWp_LXldkam1yKeO54ZbuP8,24533
43
- peak/output.py,sha256=J--61iDMLpBzXXV4BJu1eceT4W1lhiuYsYtGS1hEpOo,6971
44
- peak/press/__init__.py,sha256=80Key6wov_xZld45-39ELT0gDC_t4cy-JvA9wfCy7-c,1112
33
+ peak/cli/version.py,sha256=KAwV5M6CQw-pozqSH5JsqSkdEg9vGT27jOyz_iMMIXE,1654
34
+ peak/compression.py,sha256=kDS4Nf-4Faq1pe25ZMpQQNUYyK_CcQQQGRnEos8TfI0,7894
35
+ peak/config.py,sha256=zx6DAh1NuC1xilor8uOxqiv0cUWjYy-7hl95wr4RdR8,1146
36
+ peak/constants.py,sha256=S9Pb6c_PB53NW6qjS-D5EaU-DmUrYCzOE8oEoJzRG_k,3312
37
+ peak/exceptions.py,sha256=uIV9ZcBmPPjd3r0FQYG04wfYT1zhx3wHcVbZ7hvWbjY,7491
38
+ peak/handler.py,sha256=u5ti9ed_nj1Vgi9dUcO9yFxIZNH8i5OL63p3jRV18aU,17229
39
+ peak/helpers.py,sha256=eWDObQg_Dm8yUcgKr40f1Ghy5qPe5AyyoZlTKPneXj8,10339
40
+ peak/logger.py,sha256=9f5F5yskpMWifnKaHLsQuKAGdaBZ4aDWWaygvTjjU34,1548
41
+ peak/metrics/__init__.py,sha256=nW_9D_UHYo52OZ-aKYW0S-t8bouj-W9D9olPmYJYVi4,1057
42
+ peak/metrics/metrics.py,sha256=jtBkeuwAiTgiT2Q_3qh2gKhOM25QUjv2W74Vx8pUPcI,24533
43
+ peak/output.py,sha256=opIOxagBEXEe-V2Gtx96DuvZ4mdUwjkKt3P5dDY_VME,6971
44
+ peak/press/__init__.py,sha256=-Okc8-phtD8IGOP1YES3fKA7kRXla1mTLBk0uWVAObo,1112
45
45
  peak/press/apps.py,sha256=Rh_EDQDuLyuM3FwFxz7riuq1i7lhU4uRclzp65KFPfE,50711
46
46
  peak/press/blocks.py,sha256=9XLt2iiQBFa3ON9BddVZ1vp-kRNjij2JOfn069SAO-g,97610
47
47
  peak/press/deployments.py,sha256=ZUcuUMygIEswGXleZAF8wkjzSXSl21jGERvIXJ__dcw,10969
48
- peak/press/specs.py,sha256=GH9-SACctAlcBZznXEmsIqneOwIJoE55mD4aHQymMrM,10915
48
+ peak/press/specs.py,sha256=SiSQcXXlPXQQ38AuUqfUmAW8tkuOXlSjwsWDrhNwSmQ,10915
49
49
  peak/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- peak/resources/__init__.py,sha256=CkLWMygz8mr_isA8uMGQn2uut-BilCydLwx5sYniPIA,1242
51
- peak/resources/alerts.py,sha256=Ey1TUtCD7L0X5N03B5EijrGkFWxrarNi8QBv9_x6eBI,12792
52
- peak/resources/artifacts.py,sha256=Ga6D-axCq_Gn5sq8eH7MZrWCMCwBK8xO-iaUapGdM2U,15648
53
- peak/resources/images.py,sha256=7UB-jNEkE3HaqGLiTkv5wf5SU_9Y-jeFoMG_aMPT-y8,46715
54
- peak/resources/services.py,sha256=JXZrPf3TXL-MhcjzduN6dNbMJe4PrbALUYffJviOnbY,17176
55
- peak/resources/tenants.py,sha256=amTs39KZ5hxDd7h3h1qo3TgYJOY1Eql0EhRgDBPlQ6Y,4380
56
- peak/resources/users.py,sha256=X9NfZo1dVvXQk_DCxzTKGG_VCsSmk7HzHdJrRR90mKQ,3428
57
- peak/resources/webapps.py,sha256=6rJDEj0dkQ8bPm0OnNchB7_Ec4eN9FBCUhD8r7YyX5U,13719
58
- peak/resources/workflows.py,sha256=cksltTMxLlm9kbJAIaMPlE-eWJiquvR4EXMABijUFxY,76301
50
+ peak/resources/__init__.py,sha256=kOtOXynboPCK844y65BrDQztjoncCr_f-JBuxNXUh1I,1242
51
+ peak/resources/alerts.py,sha256=1H6n_7lsR5rNI6FUfni8ye7KCPPArcm0fTpQOYLB6lg,12792
52
+ peak/resources/artifacts.py,sha256=gKlt9bzb1xkN7meM2r5p7AcWepgFFgxFyP1tvpq57qE,15648
53
+ peak/resources/images.py,sha256=dgYOlPhwOjbiBIz0xum3PfCT9RAP4GVGxBvr8ItiJEY,46715
54
+ peak/resources/services.py,sha256=MHV4Mxm0GHf5UpQUrnwFBmC9T5qHMI4j7PuD271gV0I,17176
55
+ peak/resources/tenants.py,sha256=_rNLWQxCJeaT0mA8_fipYRjSeZ9PIlTD1u_5STbcN-c,4380
56
+ peak/resources/users.py,sha256=b2TTDvWVmfSxdkQrjaSjZya7coe-5LO_X3BqiAd67lU,3428
57
+ peak/resources/webapps.py,sha256=dmMmm78dSR4nzI3YenwcaPRUKe15Wp6D5BwzZ3fNokw,13719
58
+ peak/resources/workflows.py,sha256=bua9jd_i2foawq9MDb7BsXqPEOi9lfl3R3vCwZZ3qrY,80131
59
59
  peak/sample_yaml/metrics/create_collection.yaml,sha256=Vai6OWLPp1_ZhDWwN4ziMIFsJRmoqLZIIqC2sMgBSWw,148
60
60
  peak/sample_yaml/metrics/publish.yaml,sha256=yeeRkhED5bawJmcT4Im19Y8e5IWDyQAmXFQ-2SQTNko,65
61
61
  peak/sample_yaml/metrics/query.yaml,sha256=0RKgPjVvDxEHZcB9yj9sKan1vOiIw5_utRn682eYdag,463
@@ -112,18 +112,18 @@ peak/sample_yaml/resources/workflows/workflow_input_parameters.yaml,sha256=kM52m
112
112
  peak/sample_yaml/resources/workflows/workflow_input_parameters_inherit.yaml,sha256=6sA-CsVB0xS31G_2YE9W4vtZvupA9zDO97UCJKJlJiQ,1426
113
113
  peak/sample_yaml/resources/workflows/workflow_output_parameters.yaml,sha256=S9twG4lSB2HAt4ZL6zy5beKD-XY1Jik4asyHy4DG5Cs,913
114
114
  peak/sample_yaml/resources/workflows/workflow_skippable_steps.yaml,sha256=Ei1wGqJC-LqDPpQfqh_CmMmJ_DI5kQfuGTK4koQsiVk,1418
115
- peak/session.py,sha256=7jnXNMntxRzS12sfIboOBTz5Tx-wYQzs9zxO6y_UFOU,10374
116
- peak/telemetry.py,sha256=LSrqSir-2WKPDwhjs_hG-oSjSIVnojptN124hPPR5i0,7263
117
- peak/template.py,sha256=VezqlvPxJKW_e4lh3GqsUX1mjUJsW9WRGLC1oMK2UwE,10839
118
- peak/tools/__init__.py,sha256=qK30qBi0MNvob6UkyzcfhI0s8nfSwGC4167A_2URBnY,1048
119
- peak/tools/logging/__init__.py,sha256=tIKis2HbtFzXY9gEsjcFipHxoGbieDtV2cYKP7Z9Ibw,1513
120
- peak/tools/logging/log_handler.py,sha256=wxU7klDyhCSdiotPnTXCvLhpRes_bnbQ3H1xVn42qjk,1406
121
- peak/tools/logging/log_level.py,sha256=Xtv4zZnYk4QBix_MfCRGim4yJbv7w2tTbNKe_s4QmaI,2665
122
- peak/tools/logging/logger.py,sha256=4JX1NBy-LE7ogWJKUVYafZHecDRQY4XiaWHIkMnIHwI,15659
123
- peak/tools/logging/utils.py,sha256=qmjdBbCc1Y6JDbSgNXfdnLnpkx7fb9kPw9u8uO3AAII,3330
124
- peak/validators.py,sha256=_nVAXF_AB443voKNjyQsCTQBAVVAqn7xCbCbBguohIs,2715
125
- peak_sdk-1.15.0.dist-info/LICENSE,sha256=W0jszenKx7YdFA7BDnyg8xDKXzCP8AperJb_PHh9paQ,11340
126
- peak_sdk-1.15.0.dist-info/METADATA,sha256=GBc5cLHRapxtUoZV2UdKkg7nUGp3au1CjFEkg918sd4,7935
127
- peak_sdk-1.15.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
128
- peak_sdk-1.15.0.dist-info/entry_points.txt,sha256=zHCEjuOTjkfmqivgEZQsPGm4zFA4W3Q_vKCjPr7W6lE,47
129
- peak_sdk-1.15.0.dist-info/RECORD,,
115
+ peak/session.py,sha256=MGmxHvXM4NAsvMZGFLSWhIIp-OrSdviTJpavUP6ysKI,11071
116
+ peak/telemetry.py,sha256=Hp8vGVE51in1PNghIlzu_w9osFdytNK9_AlOvgrALw8,7279
117
+ peak/template.py,sha256=dKH3rSmC0yGvDQdGfI3Adn-RAAIK-xXqZLkZC1UPO-w,10839
118
+ peak/tools/__init__.py,sha256=Gi4ItzHzE1Y__5ZWmjii7w2QTQofZiOPmP6pWvhLh14,1048
119
+ peak/tools/logging/__init__.py,sha256=DqaklhDtjwPPufuqOC-7Yyqiyy3KoB6bFgf9-k7dOSc,1513
120
+ peak/tools/logging/log_handler.py,sha256=6mFcdRbV8fwK3IJXNbSwO5kXKwm2rFqjCzfpXYaXYIg,1406
121
+ peak/tools/logging/log_level.py,sha256=FVe94CEtow3nfHhNr5oQk0gEt2_5mpfaiV-xTfagXIQ,2665
122
+ peak/tools/logging/logger.py,sha256=5wvQwgwWrHllOmEl_O6q5Obv1-Eb2cW1deXtR8h_IqQ,15679
123
+ peak/tools/logging/utils.py,sha256=XRQ0nw_lmV_iiRel-o83EE84UTjvrzLTt4H7BHlPbLg,3330
124
+ peak/validators.py,sha256=mY17UDGKJ879wY3EApqrGVs3hJvRkPhgwftvmvnKAdI,2715
125
+ peak_sdk-1.16.0.dist-info/LICENSE,sha256=W0jszenKx7YdFA7BDnyg8xDKXzCP8AperJb_PHh9paQ,11340
126
+ peak_sdk-1.16.0.dist-info/METADATA,sha256=Y54g-0wu9d8EKUvCEhOtcLRIwbHo3NaPabxoxYX5zCA,7935
127
+ peak_sdk-1.16.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
128
+ peak_sdk-1.16.0.dist-info/entry_points.txt,sha256=zHCEjuOTjkfmqivgEZQsPGm4zFA4W3Q_vKCjPr7W6lE,47
129
+ peak_sdk-1.16.0.dist-info/RECORD,,