qwak-sdk 0.5.22__py3-none-any.whl → 0.5.24__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.
Potentially problematic release.
This version of qwak-sdk might be problematic. Click here for more details.
- qwak_sdk/__init__.py +1 -1
- qwak_sdk/cli.py +3 -3
- qwak_sdk/commands/workspaces/_logic/tools.py +17 -1
- qwak_sdk/commands/workspaces/create/_logic.py +25 -2
- qwak_sdk/commands/workspaces/delete/_logic.py +2 -1
- qwak_sdk/commands/workspaces/start/_logic.py +2 -1
- qwak_sdk/commands/workspaces/stop/_logic.py +5 -4
- qwak_sdk/commands/workspaces/update/_logic.py +23 -7
- qwak_sdk/commands/workspaces/{workspace_commands_group.py → workspaces_commands_group.py} +8 -8
- {qwak_sdk-0.5.22.dist-info → qwak_sdk-0.5.24.dist-info}/METADATA +2 -2
- {qwak_sdk-0.5.22.dist-info → qwak_sdk-0.5.24.dist-info}/RECORD +13 -13
- {qwak_sdk-0.5.22.dist-info → qwak_sdk-0.5.24.dist-info}/WHEEL +0 -0
- {qwak_sdk-0.5.22.dist-info → qwak_sdk-0.5.24.dist-info}/entry_points.txt +0 -0
qwak_sdk/__init__.py
CHANGED
qwak_sdk/cli.py
CHANGED
|
@@ -16,8 +16,8 @@ from qwak_sdk.commands.feature_store.feature_store_command_group import (
|
|
|
16
16
|
from qwak_sdk.commands.models.models_command_group import models_command_group
|
|
17
17
|
from qwak_sdk.commands.projects.projects_command_group import projects_command_group
|
|
18
18
|
from qwak_sdk.commands.secrets.secrets_commands_group import secrets_commands_group
|
|
19
|
-
from qwak_sdk.commands.workspaces.
|
|
20
|
-
|
|
19
|
+
from qwak_sdk.commands.workspaces.workspaces_commands_group import (
|
|
20
|
+
workspaces_commands_group,
|
|
21
21
|
)
|
|
22
22
|
from qwak_sdk.inner.tools.logger import setup_qwak_logger
|
|
23
23
|
|
|
@@ -57,5 +57,5 @@ def create_qwak_cli():
|
|
|
57
57
|
qwak_cli.add_command(feature_store_commands_group)
|
|
58
58
|
qwak_cli.add_command(audience_commands_group)
|
|
59
59
|
qwak_cli.add_command(alerts_commands_group)
|
|
60
|
-
qwak_cli.add_command(
|
|
60
|
+
qwak_cli.add_command(workspaces_commands_group)
|
|
61
61
|
return qwak_cli
|
|
@@ -10,6 +10,22 @@ def get_workspace_id_by_name(
|
|
|
10
10
|
"""
|
|
11
11
|
Args:
|
|
12
12
|
workspace_name: The name of the workspace
|
|
13
|
+
workspace_manager_client: The workspace manager client
|
|
14
|
+
Returns:
|
|
15
|
+
The id of the workspace
|
|
16
|
+
"""
|
|
17
|
+
return get_workspace_by_name(
|
|
18
|
+
workspace_name=workspace_name, workspace_manager_client=workspace_manager_client
|
|
19
|
+
).workspace_id
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_workspace_by_name(
|
|
23
|
+
workspace_name: str, workspace_manager_client: Optional[WorkspaceManagerClient]
|
|
24
|
+
) -> str:
|
|
25
|
+
"""
|
|
26
|
+
Args:
|
|
27
|
+
workspace_name: The name of the workspace
|
|
28
|
+
workspace_manager_client: The workspace manager client
|
|
13
29
|
Returns:
|
|
14
30
|
The id of the workspace
|
|
15
31
|
"""
|
|
@@ -23,6 +39,6 @@ def get_workspace_id_by_name(
|
|
|
23
39
|
|
|
24
40
|
for workspace in response.workspaces:
|
|
25
41
|
if workspace.workspace_name == workspace_name:
|
|
26
|
-
return workspace
|
|
42
|
+
return workspace
|
|
27
43
|
|
|
28
44
|
raise QwakException(f"Failed to find workspace with name {workspace_name}")
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from _qwak_proto.qwak.instance_template.instance_template_pb2 import InstanceType
|
|
2
|
+
from _qwak_proto.qwak.workspace.workspace_pb2 import DefaultWorkspaceDetails
|
|
3
|
+
from qwak.clients.instance_template.client import InstanceTemplateManagementClient
|
|
1
4
|
from qwak.clients.workspace_manager import WorkspaceManagerClient
|
|
2
5
|
|
|
3
6
|
from qwak_sdk.commands.workspaces._logic.workspace_validations import (
|
|
@@ -18,9 +21,29 @@ def _create_workspace(config: WorkspaceConfig):
|
|
|
18
21
|
"""
|
|
19
22
|
print(f"Creating a new workspace with the name {config.workspace.name}")
|
|
20
23
|
workspace_manager_client = WorkspaceManagerClient()
|
|
24
|
+
default_details: DefaultWorkspaceDetails = (
|
|
25
|
+
workspace_manager_client.get_default_workspace_details()
|
|
26
|
+
)
|
|
27
|
+
|
|
21
28
|
_validate_workspace_name(config.workspace.name)
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
if config.workspace.instance:
|
|
30
|
+
_verify_instance(config.workspace.instance)
|
|
31
|
+
else:
|
|
32
|
+
config.workspace.instance = (
|
|
33
|
+
default_details.cpu_compute_resources.template_spec.template_id
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
if config.workspace.image:
|
|
37
|
+
_verify_image_id(config.workspace.image, workspace_manager_client)
|
|
38
|
+
else:
|
|
39
|
+
instance_spec = InstanceTemplateManagementClient().get_instance_template(
|
|
40
|
+
config.workspace.instance
|
|
41
|
+
)
|
|
42
|
+
config.workspace.image = (
|
|
43
|
+
default_details.cpu_image_id
|
|
44
|
+
if instance_spec.instance_type == InstanceType.INSTANCE_TYPE_CPU
|
|
45
|
+
else default_details.gpu_image_id
|
|
46
|
+
)
|
|
24
47
|
|
|
25
48
|
response = workspace_manager_client.create_workspace(
|
|
26
49
|
config.workspace.name, config.workspace.image, config.workspace.instance
|
|
@@ -14,13 +14,14 @@ def _delete_workspace(workspace_id: Optional[str], workspace_name: Optional[str]
|
|
|
14
14
|
Args:
|
|
15
15
|
workspace_id: The id of the workspace to delete
|
|
16
16
|
"""
|
|
17
|
-
print(f"Deleting an existing workspace with id {workspace_id}")
|
|
18
17
|
validate_id_or_name(workspace_id=workspace_id, workspace_name=workspace_name)
|
|
19
18
|
workspace_manager_client = WorkspaceManagerClient()
|
|
20
19
|
if workspace_id:
|
|
20
|
+
print(f"Deleting an existing workspace with id {workspace_id}")
|
|
21
21
|
workspace_manager_client.delete_workspace(workspace_id=workspace_id)
|
|
22
22
|
print(f"Workspace {workspace_id} was deleted successfully")
|
|
23
23
|
if workspace_name:
|
|
24
|
+
print(f"Deleting an existing workspace with name {workspace_name}")
|
|
24
25
|
workspace_id = get_workspace_id_by_name(
|
|
25
26
|
workspace_name=workspace_name,
|
|
26
27
|
workspace_manager_client=workspace_manager_client,
|
|
@@ -17,10 +17,11 @@ def _start_workspace(workspace_id: Optional[str], workspace_name=Optional[str]):
|
|
|
17
17
|
validate_id_or_name(workspace_id=workspace_id, workspace_name=workspace_name)
|
|
18
18
|
workspace_manager_client = WorkspaceManagerClient()
|
|
19
19
|
if workspace_id:
|
|
20
|
-
print(f"
|
|
20
|
+
print(f"Starting an existing workspace with id {workspace_id}")
|
|
21
21
|
workspace_manager_client.deploy_workspace(workspace_id=workspace_id)
|
|
22
22
|
print(f"Workspace {workspace_id} started successfully")
|
|
23
23
|
if workspace_name:
|
|
24
|
+
print(f"Starting an existing workspace with name {workspace_name}")
|
|
24
25
|
workspace_id = get_workspace_id_by_name(
|
|
25
26
|
workspace_name=workspace_name,
|
|
26
27
|
workspace_manager_client=workspace_manager_client,
|
|
@@ -10,20 +10,21 @@ from qwak_sdk.commands.workspaces._logic.workspace_validations import (
|
|
|
10
10
|
|
|
11
11
|
def _stop_workspace(workspace_id: Optional[str], workspace_name: Optional[str]):
|
|
12
12
|
"""
|
|
13
|
-
|
|
13
|
+
Stop an existing workspace
|
|
14
14
|
Args:
|
|
15
15
|
workspace_id: The id of the workspace to deploy
|
|
16
16
|
"""
|
|
17
|
-
print(f"Undeploy an existing workspace with id {workspace_id}")
|
|
18
17
|
validate_id_or_name(workspace_id=workspace_id, workspace_name=workspace_name)
|
|
19
18
|
workspace_manager_client = WorkspaceManagerClient()
|
|
20
19
|
if workspace_id:
|
|
20
|
+
print(f"Stopping an existing workspace with id {workspace_id}")
|
|
21
21
|
workspace_manager_client.undeploy_workspace(workspace_id=workspace_id)
|
|
22
|
-
print(f"Workspace {workspace_id} was
|
|
22
|
+
print(f"Workspace {workspace_id} was stopped successfully")
|
|
23
23
|
if workspace_name:
|
|
24
|
+
print(f"Stopping an existing workspace with name {workspace_name}")
|
|
24
25
|
workspace_id = get_workspace_id_by_name(
|
|
25
26
|
workspace_name=workspace_name,
|
|
26
27
|
workspace_manager_client=workspace_manager_client,
|
|
27
28
|
)
|
|
28
29
|
workspace_manager_client.undeploy_workspace(workspace_id=workspace_id)
|
|
29
|
-
print(f"Workspace {workspace_name} was
|
|
30
|
+
print(f"Workspace {workspace_name} was stopped successfully")
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
from qwak.clients.workspace_manager import WorkspaceManagerClient
|
|
2
2
|
|
|
3
|
+
from qwak_sdk.commands.workspaces._logic.tools import get_workspace_by_name
|
|
3
4
|
from qwak_sdk.commands.workspaces._logic.workspace_validations import (
|
|
4
5
|
_validate_workspace_name,
|
|
5
6
|
_verify_image_id,
|
|
6
7
|
_verify_instance,
|
|
8
|
+
validate_id_or_name,
|
|
7
9
|
)
|
|
8
10
|
from qwak_sdk.commands.workspaces.config.workspace_config import WorkspaceConfig
|
|
9
11
|
|
|
@@ -16,14 +18,25 @@ def _update_workspace(config: WorkspaceConfig):
|
|
|
16
18
|
config: The workspace configuration
|
|
17
19
|
|
|
18
20
|
"""
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
validate_id_or_name(
|
|
22
|
+
workspace_id=config.workspace.workspace_id, workspace_name=config.workspace.name
|
|
21
23
|
)
|
|
22
24
|
workspace_manager_client = WorkspaceManagerClient()
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
if config.workspace.workspace_id:
|
|
26
|
+
print(
|
|
27
|
+
f"Updating a workspace with the workspace id {config.workspace.workspace_id}"
|
|
28
|
+
)
|
|
29
|
+
current_workspace = workspace_manager_client.get_workspace_by_id(
|
|
30
|
+
workspace_id=config.workspace.workspace_id
|
|
31
|
+
).workspace
|
|
32
|
+
else:
|
|
33
|
+
print(f"Updating a workspace with the workspace name {config.workspace.name}")
|
|
34
|
+
current_workspace = get_workspace_by_name(
|
|
35
|
+
workspace_name=config.workspace.name,
|
|
36
|
+
workspace_manager_client=workspace_manager_client,
|
|
37
|
+
)
|
|
26
38
|
|
|
39
|
+
workspace_id = current_workspace.workspace_id
|
|
27
40
|
workspace_name = config.workspace.name
|
|
28
41
|
image_id = config.workspace.image
|
|
29
42
|
instance = config.workspace.instance
|
|
@@ -53,13 +66,16 @@ def _update_workspace(config: WorkspaceConfig):
|
|
|
53
66
|
)
|
|
54
67
|
|
|
55
68
|
workspace_manager_client.update_workspace(
|
|
56
|
-
workspace_id=
|
|
69
|
+
workspace_id=workspace_id,
|
|
57
70
|
image_id=image_id,
|
|
58
71
|
template_id=instance,
|
|
59
72
|
workspace_name=name,
|
|
60
73
|
)
|
|
61
74
|
|
|
62
|
-
|
|
75
|
+
if config.workspace.workspace_id:
|
|
76
|
+
print(f"Workspace {workspace_id} was updated successfully")
|
|
77
|
+
else:
|
|
78
|
+
print(f"Workspace {workspace_name} was updated successfully")
|
|
63
79
|
|
|
64
80
|
|
|
65
81
|
def _is_not_empty_and_not_none(value: str) -> bool:
|
|
@@ -8,16 +8,16 @@ from qwak_sdk.commands.workspaces.update.ui import update_workspace
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
@click.group(
|
|
11
|
-
"
|
|
12
|
-
help="Commands for interacting with
|
|
11
|
+
"workspaces",
|
|
12
|
+
help="Commands for interacting with workspaces",
|
|
13
13
|
)
|
|
14
|
-
def
|
|
14
|
+
def workspaces_commands_group():
|
|
15
15
|
# Click commands group injection
|
|
16
16
|
pass
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
workspaces_commands_group.add_command(create_workspace)
|
|
20
|
+
workspaces_commands_group.add_command(update_workspace)
|
|
21
|
+
workspaces_commands_group.add_command(start_workspace)
|
|
22
|
+
workspaces_commands_group.add_command(delete_workspace)
|
|
23
|
+
workspaces_commands_group.add_command(stop_workspace)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: qwak-sdk
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.24
|
|
4
4
|
Summary: Qwak SDK and CLI for qwak models
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: mlops,ml,deployment,serving,model
|
|
@@ -27,7 +27,7 @@ Requires-Dist: pandas (<1.4) ; (python_full_version >= "3.7.1" and python_versio
|
|
|
27
27
|
Requires-Dist: pandas (>=1.4.3,<2.0.0) ; (python_version >= "3.8" and python_version < "3.10") and (extra == "batch" or extra == "feedback")
|
|
28
28
|
Requires-Dist: pyarrow (>=6.0.0,<11.0.0) ; extra == "batch"
|
|
29
29
|
Requires-Dist: python-json-logger (>=2.0.2)
|
|
30
|
-
Requires-Dist: qwak-core (==0.0.
|
|
30
|
+
Requires-Dist: qwak-core (==0.0.212)
|
|
31
31
|
Requires-Dist: qwak-inference (==0.1.8)
|
|
32
32
|
Requires-Dist: tabulate (>=0.8.0)
|
|
33
33
|
Requires-Dist: yaspin (>=2.0.0)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
qwak_sdk/__init__.py,sha256=
|
|
2
|
-
qwak_sdk/cli.py,sha256=
|
|
1
|
+
qwak_sdk/__init__.py,sha256=piQZEtKNuGjuodFyerNkMl0e7vC_UHb5Eha_YOpRlrw,135
|
|
2
|
+
qwak_sdk/cli.py,sha256=FIK1dUNxR57ypb-CeD7fKSJnPJ02lrjR9G4aj2qMLPU,2458
|
|
3
3
|
qwak_sdk/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
qwak_sdk/commands/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
qwak_sdk/commands/_logic/instance_template.py,sha256=JFsqaN_T4n_zZvXlVOLphCrF2A9uhp4GPE4pMuFno84,1497
|
|
@@ -308,26 +308,26 @@ qwak_sdk/commands/secrets/set/ui.py,sha256=jo4ldlLTybHUBt1MjsI6dwOpaqnoZXnL0EnOR
|
|
|
308
308
|
qwak_sdk/commands/ui_tools.py,sha256=JSyNs3qIllK5h3Re6A-SDaxt2TXG3987GoIfyK683HE,430
|
|
309
309
|
qwak_sdk/commands/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
310
310
|
qwak_sdk/commands/workspaces/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
311
|
-
qwak_sdk/commands/workspaces/_logic/tools.py,sha256=
|
|
311
|
+
qwak_sdk/commands/workspaces/_logic/tools.py,sha256=1NXSjL1teLfZPNRn6X3kP1-m3HZRJeb03Cz5fVaF3BE,1272
|
|
312
312
|
qwak_sdk/commands/workspaces/_logic/workspace_validations.py,sha256=J76-pKx1m3RIt5j9Ev5V17HgHam0-36JI5CSmu3-3JQ,1616
|
|
313
313
|
qwak_sdk/commands/workspaces/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
314
314
|
qwak_sdk/commands/workspaces/config/workspace_config.py,sha256=x3XuJZ-klxIJlLLu9dn41ethNylvdcDO8FZU147veGY,1039
|
|
315
315
|
qwak_sdk/commands/workspaces/create/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
316
|
-
qwak_sdk/commands/workspaces/create/_logic.py,sha256=
|
|
316
|
+
qwak_sdk/commands/workspaces/create/_logic.py,sha256=dwKN_GtnP7Adva0Lq4BzqZlynt92EbzLOMfLZofoHZE,1938
|
|
317
317
|
qwak_sdk/commands/workspaces/create/ui.py,sha256=qKD1r5B59aEXY4JZdu2wlXZvXY0JpcJrL_g9eo2Poo8,1329
|
|
318
318
|
qwak_sdk/commands/workspaces/delete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
319
|
-
qwak_sdk/commands/workspaces/delete/_logic.py,sha256=
|
|
319
|
+
qwak_sdk/commands/workspaces/delete/_logic.py,sha256=qjsYWdoSeQtE28TdcrefX8xBY_cG9z1nwIMxADTFlQc,1247
|
|
320
320
|
qwak_sdk/commands/workspaces/delete/ui.py,sha256=QC4rilo7ErLZN68UWhVNGyyMofckGDHca8F_kmTSODo,609
|
|
321
321
|
qwak_sdk/commands/workspaces/start/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
322
|
-
qwak_sdk/commands/workspaces/start/_logic.py,sha256=
|
|
322
|
+
qwak_sdk/commands/workspaces/start/_logic.py,sha256=dLWmCeZ1SH5VDY5UUHhJAxTKdRTfF589dvYtTpC1DFI,1250
|
|
323
323
|
qwak_sdk/commands/workspaces/start/ui.py,sha256=3OpyGBLUxGeGrDFSnWNe9iSVi7PBZhVY6dyKHmB3_IM,604
|
|
324
324
|
qwak_sdk/commands/workspaces/stop/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
325
|
-
qwak_sdk/commands/workspaces/stop/_logic.py,sha256=
|
|
325
|
+
qwak_sdk/commands/workspaces/stop/_logic.py,sha256=3_dqIr_ae-GQvauykoIXlgBKl8roNesMrP9L8PJy3v4,1257
|
|
326
326
|
qwak_sdk/commands/workspaces/stop/ui.py,sha256=XhuBoU7x1MrEDQcfQuxiuLEb2yQvbrDzlbcDBJ72nvk,599
|
|
327
327
|
qwak_sdk/commands/workspaces/update/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
328
|
-
qwak_sdk/commands/workspaces/update/_logic.py,sha256=
|
|
328
|
+
qwak_sdk/commands/workspaces/update/_logic.py,sha256=tSxMOAGhTU0D9C-lbd49Ah7rEtf9eoEMeUXU9--gWMQ,2650
|
|
329
329
|
qwak_sdk/commands/workspaces/update/ui.py,sha256=pqS4SosS145ciZoIkFhW951Y_Ec86PKIldCiv3iEU8w,1515
|
|
330
|
-
qwak_sdk/commands/workspaces/
|
|
330
|
+
qwak_sdk/commands/workspaces/workspaces_commands_group.py,sha256=yuW-UC73J_vp-i4fILX90TAUrxaFocAmltBrRIg67lY,795
|
|
331
331
|
qwak_sdk/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
332
332
|
qwak_sdk/common/run_config/__init__.py,sha256=E73GRxqdEbTYsdd5EE7Wu4YXxTjxF4YkrBY_7-hZ4dU,437
|
|
333
333
|
qwak_sdk/common/run_config/base.py,sha256=lbCl2DXBM90IXyLCFR2dUY35afwJlp9D4KgM8HP5_MQ,3166
|
|
@@ -355,7 +355,7 @@ qwak_sdk/tools/colors.py,sha256=7pui_GGjC4uZKYFsIyXaJjYsjLxJVHb4OrfTgr93hqo,287
|
|
|
355
355
|
qwak_sdk/tools/files.py,sha256=AyKJTOy7NhvP3SrqwIw_lxYNCOy1CvLgMmSJpWZ0OKM,2257
|
|
356
356
|
qwak_sdk/tools/log_handling.py,sha256=CC9XC3z3eHr_fehQgDsXZr4VP29VaMRwC05xvC5Wue4,5616
|
|
357
357
|
qwak_sdk/tools/utils.py,sha256=SHmU4r_m2ABZyFYMC03P17GvltPbYbmB39hvalIZEtI,1168
|
|
358
|
-
qwak_sdk-0.5.
|
|
359
|
-
qwak_sdk-0.5.
|
|
360
|
-
qwak_sdk-0.5.
|
|
361
|
-
qwak_sdk-0.5.
|
|
358
|
+
qwak_sdk-0.5.24.dist-info/entry_points.txt,sha256=vSl0ELYDyj640oMM57u0AjBP87wtLYxCcGOendhEx80,47
|
|
359
|
+
qwak_sdk-0.5.24.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
|
360
|
+
qwak_sdk-0.5.24.dist-info/METADATA,sha256=xgkhDuuwxYPcpkoQmBJ9NG4oCyqPlposFOM1vCudhKc,1852
|
|
361
|
+
qwak_sdk-0.5.24.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|