peak-sdk 1.4.0__py3-none-any.whl → 1.5.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.
- peak/_version.py +1 -1
- peak/cli/cli.py +2 -1
- peak/cli/helpers.py +1 -0
- peak/cli/resources/users.py +71 -0
- peak/helpers.py +27 -0
- peak/resources/__init__.py +2 -2
- peak/resources/users.py +93 -0
- peak/resources/workflows.py +3 -3
- peak/session.py +7 -4
- peak/validators.py +34 -2
- {peak_sdk-1.4.0.dist-info → peak_sdk-1.5.0.dist-info}/METADATA +6 -6
- {peak_sdk-1.4.0.dist-info → peak_sdk-1.5.0.dist-info}/RECORD +15 -13
- {peak_sdk-1.4.0.dist-info → peak_sdk-1.5.0.dist-info}/LICENSE +0 -0
- {peak_sdk-1.4.0.dist-info → peak_sdk-1.5.0.dist-info}/WHEEL +0 -0
- {peak_sdk-1.4.0.dist-info → peak_sdk-1.5.0.dist-info}/entry_points.txt +0 -0
peak/_version.py
CHANGED
peak/cli/cli.py
CHANGED
@@ -25,7 +25,7 @@ import peak.config
|
|
25
25
|
import typer
|
26
26
|
from peak.cli import args, helpers
|
27
27
|
from peak.cli.press import apps, blocks, deployments, specs
|
28
|
-
from peak.cli.resources import artifacts, images, services, tenants, webapps, workflows
|
28
|
+
from peak.cli.resources import artifacts, images, services, tenants, users, webapps, workflows
|
29
29
|
from peak.constants import Sources
|
30
30
|
from peak.output import Writer
|
31
31
|
|
@@ -43,6 +43,7 @@ typer_app.add_typer(apps.app, name="apps")
|
|
43
43
|
typer_app.add_typer(blocks.app, name="blocks")
|
44
44
|
typer_app.add_typer(specs.app, name="specs")
|
45
45
|
typer_app.add_typer(deployments.app, name="deployments")
|
46
|
+
typer_app.add_typer(users.app, name="users")
|
46
47
|
|
47
48
|
|
48
49
|
@typer_app.callback()
|
peak/cli/helpers.py
CHANGED
@@ -251,5 +251,6 @@ def get_client(command: str) -> base_client.BaseClient:
|
|
251
251
|
"services": resources.services,
|
252
252
|
"webapps": resources.webapps,
|
253
253
|
"tenants": resources.tenants,
|
254
|
+
"users": resources.users,
|
254
255
|
}
|
255
256
|
return command_client_map[command].get_client() # type: ignore[no-any-return]
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
|
3
|
+
# #
|
4
|
+
# # Licensed under the Apache License, Version 2.0 (the "License"). You
|
5
|
+
# # may not use this file except in compliance with the License. A copy of
|
6
|
+
# # the License is located at:
|
7
|
+
# #
|
8
|
+
# # https://github.com/PeakBI/peak-sdk/blob/main/LICENSE
|
9
|
+
# #
|
10
|
+
# # or in the "license" file accompanying this file. This file is
|
11
|
+
# # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
12
|
+
# # ANY KIND, either express or implied. See the License for the specific
|
13
|
+
# # language governing permissions and limitations under the License.
|
14
|
+
# #
|
15
|
+
# # This file is part of the peak-sdk.
|
16
|
+
# # see (https://github.com/PeakBI/peak-sdk)
|
17
|
+
# #
|
18
|
+
# # You should have received a copy of the APACHE LICENSE, VERSION 2.0
|
19
|
+
# # along with this program. If not, see <https://apache.org/licenses/LICENSE-2.0>
|
20
|
+
#
|
21
|
+
"""Peak Users commands."""
|
22
|
+
from typing import Optional
|
23
|
+
|
24
|
+
import typer
|
25
|
+
from peak import Session
|
26
|
+
from peak.cli.args import OUTPUT_TYPES, PAGING
|
27
|
+
from peak.constants import OutputTypesNoTable
|
28
|
+
from peak.output import Writer
|
29
|
+
from peak.resources import users
|
30
|
+
|
31
|
+
app = typer.Typer(
|
32
|
+
help="User management and permission checking.",
|
33
|
+
short_help="Manage User Permissions.",
|
34
|
+
)
|
35
|
+
|
36
|
+
_FEATURE = typer.Option(..., help="The feature path to check permissions for, e.g., 'PRICING.GUARDRAILS'.")
|
37
|
+
_ACTION = typer.Option(..., help="The action to check for the feature path, e.g., 'read' or 'write'.")
|
38
|
+
_AUTH_TOKEN = typer.Option(
|
39
|
+
None,
|
40
|
+
help="Authentication token for the user. If not provided, the token from the environment will be used.",
|
41
|
+
)
|
42
|
+
|
43
|
+
|
44
|
+
@app.command(short_help="Check user permission for a specific feature.", options_metavar="check_permission")
|
45
|
+
def check_permission(
|
46
|
+
ctx: typer.Context,
|
47
|
+
feature: str = _FEATURE,
|
48
|
+
action: str = _ACTION,
|
49
|
+
auth_token: Optional[str] = _AUTH_TOKEN,
|
50
|
+
paging: Optional[bool] = PAGING, # noqa: ARG001
|
51
|
+
output_type: Optional[OutputTypesNoTable] = OUTPUT_TYPES, # noqa: ARG001
|
52
|
+
) -> None:
|
53
|
+
"""Check if the user has the specified permission for the given feature path.
|
54
|
+
|
55
|
+
\b
|
56
|
+
📝 ***Example usage:***
|
57
|
+
```bash
|
58
|
+
peak user check-permission --feature "PRICING.GUARDRAILS" --action "read" --auth-token <your-auth-token>
|
59
|
+
```
|
60
|
+
|
61
|
+
\b
|
62
|
+
🆗 ***Response:***
|
63
|
+
True if the user has the permission, False otherwise.
|
64
|
+
"""
|
65
|
+
user_session = Session(auth_token=auth_token)
|
66
|
+
user_client = users.get_client(session=user_session)
|
67
|
+
writer: Writer = ctx.obj["writer"]
|
68
|
+
|
69
|
+
with writer.pager():
|
70
|
+
response = user_client.check_permissions({feature: action})
|
71
|
+
writer.write(response.get(feature, False))
|
peak/helpers.py
CHANGED
@@ -239,3 +239,30 @@ def download_logs_helper(
|
|
239
239
|
if config.SOURCE == Sources.CLI:
|
240
240
|
writer = Writer()
|
241
241
|
writer.write(f"\nLog contents have been saved to: {file_name}")
|
242
|
+
|
243
|
+
|
244
|
+
def search_action(current_path: str, current_dict: Dict[str, Any], action: str) -> Dict[str, bool]:
|
245
|
+
"""Search for a specified action within a nested dictionary structure and check if deeper levels exist.
|
246
|
+
|
247
|
+
Args:
|
248
|
+
current_path (str): The dot-separated path representing the feature hierarchy.
|
249
|
+
current_dict (Dict[str, Any]): The nested dictionary representing the permissions structure.
|
250
|
+
action (str): The action to search for (e.g., "read" or "write").
|
251
|
+
|
252
|
+
Returns:
|
253
|
+
bool: A dictionary with keys 'has_permission' indicating if the action is found and
|
254
|
+
'deeper_levels' indicating if there are deeper levels that need specification.
|
255
|
+
"""
|
256
|
+
keys = current_path.split(".")
|
257
|
+
for key in keys:
|
258
|
+
if key in current_dict:
|
259
|
+
current_dict = current_dict[key]
|
260
|
+
else:
|
261
|
+
return {"has_permission": False, "deeper_levels": False}
|
262
|
+
|
263
|
+
if "actions" in current_dict:
|
264
|
+
actions = current_dict["actions"]
|
265
|
+
has_permission = "*" in actions or action in actions or ("write" in actions and action == "read")
|
266
|
+
return {"has_permission": has_permission, "deeper_levels": False}
|
267
|
+
|
268
|
+
return {"has_permission": False, "deeper_levels": True}
|
peak/resources/__init__.py
CHANGED
@@ -23,6 +23,6 @@ from __future__ import annotations
|
|
23
23
|
|
24
24
|
from typing import List
|
25
25
|
|
26
|
-
from peak.resources import artifacts, images, services, tenants, webapps, workflows
|
26
|
+
from peak.resources import artifacts, images, services, tenants, users, webapps, workflows
|
27
27
|
|
28
|
-
__all__: List[str] = ["
|
28
|
+
__all__: List[str] = ["artifacts", "images", "services", "tenants", "users", "webapps", "workflows"]
|
peak/resources/users.py
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
#
|
2
|
+
# # Copyright © 2024 Peak AI Limited. or its affiliates. All Rights Reserved.
|
3
|
+
# #
|
4
|
+
# # Licensed under the Apache License, Version 2.0 (the "License"). You
|
5
|
+
# # may not use this file except in compliance with the License. A copy of
|
6
|
+
# # the License is located at:
|
7
|
+
# #
|
8
|
+
# # https://github.com/PeakBI/peak-sdk/blob/main/LICENSE
|
9
|
+
# #
|
10
|
+
# # or in the "license" file accompanying this file. This file is
|
11
|
+
# # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
12
|
+
# # ANY KIND, either express or implied. See the License for the specific
|
13
|
+
# # language governing permissions and limitations under the License.
|
14
|
+
# #
|
15
|
+
# # This file is part of the peak-sdk.
|
16
|
+
# # see (https://github.com/PeakBI/peak-sdk)
|
17
|
+
# #
|
18
|
+
# # You should have received a copy of the APACHE LICENSE, VERSION 2.0
|
19
|
+
# # along with this program. If not, see <https://apache.org/licenses/LICENSE-2.0>
|
20
|
+
#
|
21
|
+
|
22
|
+
"""User client module."""
|
23
|
+
from __future__ import annotations
|
24
|
+
|
25
|
+
from typing import Dict, Optional
|
26
|
+
|
27
|
+
from peak.base_client import BaseClient
|
28
|
+
from peak.constants import ContentType, HttpMethods
|
29
|
+
from peak.helpers import search_action
|
30
|
+
from peak.session import Session
|
31
|
+
from peak.validators import validate_action, validate_feature_path
|
32
|
+
|
33
|
+
|
34
|
+
class User(BaseClient):
|
35
|
+
"""Client class for interacting with users resource."""
|
36
|
+
|
37
|
+
BASE_ENDPOINT = "access-control/api/v2"
|
38
|
+
|
39
|
+
def check_permissions(self, feature_actions: Dict[str, str]) -> Dict[str, bool]:
|
40
|
+
"""Check if the user has the specified permissions for the given features or subfeatures.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
feature_actions (Dict[str, str]): A dictionary where keys are feature paths (e.g., "PRICING.GUARDRAILS")
|
44
|
+
and values are actions (e.g., "read" or "write").
|
45
|
+
|
46
|
+
Returns:
|
47
|
+
Dict[str, bool]: A dictionary where keys are the same feature paths and values are booleans
|
48
|
+
indicating whether the user has the specified action permission for that feature.
|
49
|
+
|
50
|
+
Raises:
|
51
|
+
UnauthorizedException: The credentials are invalid.
|
52
|
+
ForbiddenException: The user does not have permission to perform the operation.
|
53
|
+
NotFoundException: The given feature does not exist.
|
54
|
+
UnprocessableEntityException: The server was unable to process the request.
|
55
|
+
InternalServerErrorException: The server failed to process the request.
|
56
|
+
"""
|
57
|
+
method, endpoint = HttpMethods.GET, f"{self.BASE_ENDPOINT}/access/permissions"
|
58
|
+
|
59
|
+
permissions_response = self.session.create_request(
|
60
|
+
endpoint,
|
61
|
+
method,
|
62
|
+
params={
|
63
|
+
"type": "app",
|
64
|
+
},
|
65
|
+
content_type=ContentType.APPLICATION_JSON,
|
66
|
+
)
|
67
|
+
|
68
|
+
result_permissions = {}
|
69
|
+
|
70
|
+
for feature_path, action in feature_actions.items():
|
71
|
+
validate_action(action)
|
72
|
+
|
73
|
+
search_result = search_action(feature_path, permissions_response, action)
|
74
|
+
validate_feature_path(search_result=search_result, feature_path=feature_path)
|
75
|
+
|
76
|
+
result_permissions[feature_path] = search_result["has_permission"]
|
77
|
+
|
78
|
+
return result_permissions
|
79
|
+
|
80
|
+
|
81
|
+
def get_client(session: Optional[Session] = None) -> User:
|
82
|
+
"""Returns a User client, If no session is provided, a default session is used.
|
83
|
+
|
84
|
+
Args:
|
85
|
+
session (Optional[Session]): A Session Object. Default is None.
|
86
|
+
|
87
|
+
Returns:
|
88
|
+
User: The user client object.
|
89
|
+
"""
|
90
|
+
return User(session)
|
91
|
+
|
92
|
+
|
93
|
+
__all__ = ["get_client"]
|
peak/resources/workflows.py
CHANGED
@@ -1011,7 +1011,7 @@ class Workflow(BaseClient):
|
|
1011
1011
|
Set `return_iterator` to True if you want automatic client-side pagination, or False if you want server-side pagination.
|
1012
1012
|
|
1013
1013
|
Raises:
|
1014
|
-
BadRequestException:
|
1014
|
+
BadRequestException: The given request parameters are invalid.
|
1015
1015
|
UnauthorizedException: The credentials are invalid.
|
1016
1016
|
ForbiddenException: The user does not have permission to perform the operation.
|
1017
1017
|
NotFoundException: The given workflow does not exist.
|
@@ -1068,7 +1068,7 @@ class Workflow(BaseClient):
|
|
1068
1068
|
Dict[str, Any]: A dictionary containing the logs for the given execution.
|
1069
1069
|
|
1070
1070
|
Raises:
|
1071
|
-
BadRequestException:
|
1071
|
+
BadRequestException: The given request parameters are invalid.
|
1072
1072
|
UnauthorizedException: The credentials are invalid.
|
1073
1073
|
ForbiddenException: The user does not have permission to perform the operation.
|
1074
1074
|
NotFoundException: The given workflow does not exist.
|
@@ -1123,7 +1123,7 @@ class Workflow(BaseClient):
|
|
1123
1123
|
Dict[str, Any]: A dictionary containing the logs for the given execution.
|
1124
1124
|
|
1125
1125
|
Raises:
|
1126
|
-
BadRequestException:
|
1126
|
+
BadRequestException: The given request parameters are invalid.
|
1127
1127
|
UnauthorizedException: The credentials are invalid.
|
1128
1128
|
ForbiddenException: The user does not have permission to perform the operation.
|
1129
1129
|
NotFoundException: The given workflow does not exist.
|
peak/session.py
CHANGED
@@ -70,7 +70,7 @@ class Session:
|
|
70
70
|
|
71
71
|
Args:
|
72
72
|
auth_token (str | None): Authentication token. Both API Key and Bearer tokens are supported.
|
73
|
-
Picks up from `API_KEY` environment variable if not provided.
|
73
|
+
Picks up from `PEAK_AUTH_TOKEN` or `API_KEY` environment variable if not provided.
|
74
74
|
stage (str | None): Name of the stage where tenant is created. Default is `prod`.
|
75
75
|
"""
|
76
76
|
self.base_domain: str = ""
|
@@ -238,9 +238,12 @@ class Session:
|
|
238
238
|
self.auth_token = auth_token
|
239
239
|
return
|
240
240
|
|
241
|
-
logger.info("auth_token not given, searching for API_KEY in env variables")
|
242
|
-
if not os.environ.get("API_KEY"):
|
243
|
-
raise exceptions.MissingEnvironmentVariableException(env_var="API_KEY")
|
241
|
+
logger.info("auth_token not given, searching for 'PEAK_AUTH_TOKEN' or 'API_KEY' in env variables")
|
242
|
+
if not os.environ.get("API_KEY") and not os.environ.get("PEAK_AUTH_TOKEN"):
|
243
|
+
raise exceptions.MissingEnvironmentVariableException(env_var="PEAK_AUTH_TOKEN or API_KEY")
|
244
|
+
if os.environ.get("PEAK_AUTH_TOKEN"):
|
245
|
+
self.auth_token = os.environ["PEAK_AUTH_TOKEN"]
|
246
|
+
return
|
244
247
|
self.auth_token = os.environ["API_KEY"]
|
245
248
|
|
246
249
|
def _set_stage(self, stage: Optional[str]) -> None:
|
peak/validators.py
CHANGED
@@ -23,10 +23,10 @@ from __future__ import annotations
|
|
23
23
|
|
24
24
|
import os
|
25
25
|
import tempfile
|
26
|
-
from typing import List
|
26
|
+
from typing import Dict, List
|
27
27
|
|
28
28
|
from peak.constants import MAX_ARTIFACT_SIZE_MB, MB
|
29
|
-
from peak.exceptions import FileLimitExceededException
|
29
|
+
from peak.exceptions import FileLimitExceededException, InvalidParameterException
|
30
30
|
|
31
31
|
|
32
32
|
def check_file_size(fh: tempfile.SpooledTemporaryFile[bytes], max_size: float = MAX_ARTIFACT_SIZE_MB) -> None:
|
@@ -36,6 +36,38 @@ def check_file_size(fh: tempfile.SpooledTemporaryFile[bytes], max_size: float =
|
|
36
36
|
raise FileLimitExceededException(max_size=max_size)
|
37
37
|
|
38
38
|
|
39
|
+
def validate_action(action: str) -> None:
|
40
|
+
"""Validate the action provided.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
action (str): The action to be validated.
|
44
|
+
|
45
|
+
Raises:
|
46
|
+
InvalidParameterException: If the action is not 'read' or 'write'.
|
47
|
+
|
48
|
+
Returns: None
|
49
|
+
"""
|
50
|
+
if action not in ["read", "write"]:
|
51
|
+
raise InvalidParameterException(message="The action must be 'read' or 'write'.")
|
52
|
+
|
53
|
+
|
54
|
+
def validate_feature_path(search_result: Dict[str, bool], feature_path: str) -> None:
|
55
|
+
"""Validate the feature path provided.
|
56
|
+
|
57
|
+
Args:
|
58
|
+
search_result (Dict[str, bool]): The search result for the feature path.
|
59
|
+
feature_path (str): The feature path to be validated.
|
60
|
+
|
61
|
+
Raises:
|
62
|
+
InvalidParameterException: If the feature path is incomplete and more subfeatures need to be specified.
|
63
|
+
|
64
|
+
Returns: None
|
65
|
+
"""
|
66
|
+
if search_result["deeper_levels"]:
|
67
|
+
message = f"'{feature_path}' contains more subfeatures. Please specify the complete path."
|
68
|
+
raise InvalidParameterException(message=message)
|
69
|
+
|
70
|
+
|
39
71
|
def _get_file_size(fh: tempfile.SpooledTemporaryFile[bytes]) -> int:
|
40
72
|
"""Get file size in bytes."""
|
41
73
|
old_pos: int = fh.tell()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: peak-sdk
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.5.0
|
4
4
|
Summary: Python SDK for interacting with the Peak platform
|
5
5
|
Home-page: https://docs.peak.ai/sdk
|
6
6
|
License: Apache-2.0
|
@@ -94,13 +94,13 @@ Follow these steps to create a virtual environment using Python's built-in `venv
|
|
94
94
|
echo "compinit" >> ~/.zshrc # replace .zshrc with your shell's configuration file
|
95
95
|
```
|
96
96
|
|
97
|
-
### Using the SDK
|
97
|
+
### Using the SDK and CLI
|
98
98
|
|
99
|
-
- To start using the SDK and CLI, you'll need either an API Key or
|
100
|
-
- If you don't have one yet, sign up for an account on the Peak platform to obtain your API key or Access token.
|
101
|
-
- To export it, run the following command in your terminal and replace <
|
99
|
+
- To start using the SDK and CLI, you'll need either an API Key or a Personal Access Token (PAT).
|
100
|
+
- If you don't have one yet, sign up for an account on the Peak platform to obtain your API key or Personal Access token (PAT).
|
101
|
+
- To export it, run the following command in your terminal and replace <peak_auth_token> with your actual API key or PAT:
|
102
102
|
```
|
103
|
-
export
|
103
|
+
export PEAK_AUTH_TOKEN=<peak_auth_token>
|
104
104
|
```
|
105
105
|
|
106
106
|
### Documentation
|
@@ -1,13 +1,13 @@
|
|
1
1
|
peak/__init__.py,sha256=yULGsiciVPNjdTO6uwEynsyLFiGBA2n7TT72DzKn9z8,1263
|
2
2
|
peak/_metadata.py,sha256=grRJ8sixuoMQnvJnq-tQDheb5URzLXkKxXzl8UrTHvY,22930
|
3
|
-
peak/_version.py,sha256=
|
3
|
+
peak/_version.py,sha256=LOauAOLrFg8lEqnmcJstbzCjySeXVJ6zNrUW2MLWqeY,886
|
4
4
|
peak/auth.py,sha256=KcqCqovY6sFiMGNAGP9k3AtCAXrZ-tYd7QP-PFYorX0,904
|
5
5
|
peak/base_client.py,sha256=3cS8hZApONkojwdgzt_tbwSxwpFcn3xGwzVcmxkgOJc,1808
|
6
6
|
peak/callbacks.py,sha256=ZO3Yk_-xa9LGoJgMCc01hqYLq2z3wU45UO3iLHSHk6k,2486
|
7
7
|
peak/cli/__init_.py,sha256=enzNZ-aEPmKIC8eExPvF-ZdomGroRUPmP09003PNGAg,859
|
8
8
|
peak/cli/args.py,sha256=EA7YQ_jojN9M9RZPZFsbvIe_NEVc6W80boxSXpS-MnQ,5720
|
9
|
-
peak/cli/cli.py,sha256=
|
10
|
-
peak/cli/helpers.py,sha256=
|
9
|
+
peak/cli/cli.py,sha256=XkHGdoPhaycU8O4P-ij9-ziLCAgZDdJjUwqNVYRiIIE,2384
|
10
|
+
peak/cli/helpers.py,sha256=QwVrvU4muVREeP8hhBbkJ61OOFH8WWPzzQQPkt_TYeo,8250
|
11
11
|
peak/cli/press/__init__.py,sha256=7zvL15sobpdrEuGoziADkJVnrHMiZKINYr4FDRFetY8,898
|
12
12
|
peak/cli/press/apps/__init__.py,sha256=_bUtQG1zrO9Jv5zIFFKikR82-NsAfpow2KgSOa3oX_M,1459
|
13
13
|
peak/cli/press/apps/deployments.py,sha256=7JmxFhtaOZ9QXTtAtd-Oxu69JemRBP6MDuaRONdWEAY,15895
|
@@ -22,6 +22,7 @@ peak/cli/resources/artifacts.py,sha256=LQcJKw39xoJaFeTJMYi1n-XTyU02SOSKg0J1VuWrh
|
|
22
22
|
peak/cli/resources/images.py,sha256=KzLVGNuPUpCA8AsZufXZgYFA4pnZ9JsZInE7zclmNmQ,43125
|
23
23
|
peak/cli/resources/services.py,sha256=f-1lGUerQ1qwIcVFfSumiPES1nreQp1bhaUeKXbJLtI,23435
|
24
24
|
peak/cli/resources/tenants.py,sha256=m5hwW8rQLKsRQwOFAmE2QQXiOLRV-hZmomxUGSEPFjg,2624
|
25
|
+
peak/cli/resources/users.py,sha256=igXEelUTnqcqVd4OUu2YUMu8kwelWp7ZM9JgXxk9Jfg,2628
|
25
26
|
peak/cli/resources/webapps.py,sha256=0Wunb-XYvM5n5HQO4_-LDMCDezdRo_FbbsEnHPTdA2Y,21349
|
26
27
|
peak/cli/resources/workflows.py,sha256=jd5dy24WBpXu5xfp0-LDBkeHq9KxBE-rstdrfPX7zx8,48787
|
27
28
|
peak/cli/ruff.toml,sha256=eyOQvxmLQvGqEEcH3RaiM_8B5wh2UVWrWYzL2xeX7sk,185
|
@@ -31,7 +32,7 @@ peak/config.py,sha256=FZ6aIN0gwA52noh-8HJkGnUr8HEOpyNFk6uR4QWt65o,1146
|
|
31
32
|
peak/constants.py,sha256=TDMN4cXXKyR_Q8maeo8Ukvprl_Bz0YtYytD3yuHBZKs,3312
|
32
33
|
peak/exceptions.py,sha256=uXVBnBVK6kAkAC_VVeEvohdRUH2KGhRthnqwnhfHcV4,6974
|
33
34
|
peak/handler.py,sha256=IqbGbEz1slg5RH3Cg7Wn5pyDAy5fo1yga1TVqI7UYDM,14777
|
34
|
-
peak/helpers.py,sha256=
|
35
|
+
peak/helpers.py,sha256=9PX8GbDmDrqV-VaG_0by3ZD69YyzwYNnTQhuyMC3GUM,8812
|
35
36
|
peak/logger.py,sha256=bPq_7mdbhFoUcnV_LCi8hRDrb7INwf8PHHEx2z83bFU,1548
|
36
37
|
peak/output.py,sha256=SbWppqvrEHzZp4I_iX3l855BcRSTuZ3mQsiqYpdCgLk,6230
|
37
38
|
peak/press/__init__.py,sha256=80Key6wov_xZld45-39ELT0gDC_t4cy-JvA9wfCy7-c,1112
|
@@ -40,13 +41,14 @@ peak/press/blocks.py,sha256=HfJy-0m1-hMZBdJUN0YU-q2sTaQOExd1e3ZvuFM0gec,59239
|
|
40
41
|
peak/press/deployments.py,sha256=PaZGNbC5Bcx885tzxUYA-ve44gfKgMnP4dkJrPDVVH8,5950
|
41
42
|
peak/press/specs.py,sha256=b-O5a-hjdPXFIGcGR913VWC6FKWTiZ74lkOXhFaLOFA,10850
|
42
43
|
peak/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
43
|
-
peak/resources/__init__.py,sha256=
|
44
|
+
peak/resources/__init__.py,sha256=yszHkLXI7sdz5mMaVcHx5LXefb_957_WwFThQmQ7w20,1188
|
44
45
|
peak/resources/artifacts.py,sha256=xPnv7DqCoSsKNcp8AC638rDnS37o-mfhrWOChHuQ92s,14381
|
45
46
|
peak/resources/images.py,sha256=ZZlDoZ-P8DwIS3-flbaEWeZi6yHJbXns0McqC3jmrBo,37273
|
46
47
|
peak/resources/services.py,sha256=g9IhSnSzbS4nymN2LwfqrItLsVKCCfIw9kHRNRP2DHU,16712
|
47
48
|
peak/resources/tenants.py,sha256=J6lxfq1HXfyhA2EmSSSUHi4fRN6KU__yV7El1PVmvtk,2936
|
49
|
+
peak/resources/users.py,sha256=X9NfZo1dVvXQk_DCxzTKGG_VCsSmk7HzHdJrRR90mKQ,3428
|
48
50
|
peak/resources/webapps.py,sha256=B2Ai0twwcqBkFcaHVbvMO-834nBwd-zz9hY4OqItJkU,13753
|
49
|
-
peak/resources/workflows.py,sha256=
|
51
|
+
peak/resources/workflows.py,sha256=PFWulP_CZ97Q6p0easBGTXBbFrvSrocK448xIMMiQ4I,48716
|
50
52
|
peak/sample_yaml/press/apps/deployments/create_app_deployment.yaml,sha256=-P2wFBnxY_yCxRJ5-Wx1NQyLrdbBQa8RAxVKXjyiGYc,996
|
51
53
|
peak/sample_yaml/press/apps/deployments/create_app_deployment_revision.yaml,sha256=QVYjGBBDxoqADIxWuOuV3X8rABpvHMZUbXlA7KpKg1s,688
|
52
54
|
peak/sample_yaml/press/apps/deployments/update_app_deployment_metadata.yaml,sha256=RBrAnxULPXYTrYY7T6l-L5_Q1E8LJ6RwVwOkw4zn5w0,302
|
@@ -91,7 +93,7 @@ peak/sample_yaml/resources/workflows/workflow_execution_parameters.yaml,sha256=b
|
|
91
93
|
peak/sample_yaml/resources/workflows/workflow_input_parameters.yaml,sha256=lG_3KZoZPSIhw2YA9CZvU1B400oMD1t8xQQjvoocO24,457
|
92
94
|
peak/sample_yaml/resources/workflows/workflow_output_parameters.yaml,sha256=PEkinTcETUgFAK1o5-cKjYAqhAlzEFKtOJzRpuBPom8,536
|
93
95
|
peak/sample_yaml/resources/workflows/workflow_skippable_steps.yaml,sha256=BjDy73pWO6nJ-4IjmdyHOJJE5C35E18gjPPlITs7ucI,680
|
94
|
-
peak/session.py,sha256=
|
96
|
+
peak/session.py,sha256=AvHmlFQrQLtJlBEMTRC5QKPc8Sg5zXVjmhhrUXaX6Eg,10157
|
95
97
|
peak/telemetry.py,sha256=ERfDjHWv51WTy0JF-8KXlVnTQx7q9GAEnS8Kk2Rtaqs,7113
|
96
98
|
peak/template.py,sha256=KT3QX_0PRXJsqeziCMytQ-aM2CKF5h5vnOz6OrpGD6g,9758
|
97
99
|
peak/tools/__init__.py,sha256=qK30qBi0MNvob6UkyzcfhI0s8nfSwGC4167A_2URBnY,1048
|
@@ -99,9 +101,9 @@ peak/tools/logging/__init__.py,sha256=I53XIPHE0Q9tIVh5RVtonmAV1Pc4phVOdoCXv3ivnA
|
|
99
101
|
peak/tools/logging/log_handler.py,sha256=wxU7klDyhCSdiotPnTXCvLhpRes_bnbQ3H1xVn42qjk,1406
|
100
102
|
peak/tools/logging/log_level.py,sha256=B0EeQ_2waaHB67suhR422-eiUA53g5hgCoM1Abt6OI0,1770
|
101
103
|
peak/tools/logging/utils.py,sha256=qmjdBbCc1Y6JDbSgNXfdnLnpkx7fb9kPw9u8uO3AAII,3330
|
102
|
-
peak/validators.py,sha256=
|
103
|
-
peak_sdk-1.
|
104
|
-
peak_sdk-1.
|
105
|
-
peak_sdk-1.
|
106
|
-
peak_sdk-1.
|
107
|
-
peak_sdk-1.
|
104
|
+
peak/validators.py,sha256=_nVAXF_AB443voKNjyQsCTQBAVVAqn7xCbCbBguohIs,2715
|
105
|
+
peak_sdk-1.5.0.dist-info/LICENSE,sha256=W0jszenKx7YdFA7BDnyg8xDKXzCP8AperJb_PHh9paQ,11340
|
106
|
+
peak_sdk-1.5.0.dist-info/METADATA,sha256=NCEKFnlpl8oyhvShHJVF1tJWuIB0AwUXArLd42vxmVU,7121
|
107
|
+
peak_sdk-1.5.0.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
|
108
|
+
peak_sdk-1.5.0.dist-info/entry_points.txt,sha256=zHCEjuOTjkfmqivgEZQsPGm4zFA4W3Q_vKCjPr7W6lE,47
|
109
|
+
peak_sdk-1.5.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|