kalavai-client 0.6.1__py3-none-any.whl → 0.6.2__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.
- kalavai_client/__init__.py +1 -1
- kalavai_client/assets/docker-compose-gui.yaml +0 -1
- kalavai_client/assets/docker-compose-template.yaml +45 -39
- kalavai_client/bridge_api.py +6 -3
- kalavai_client/bridge_models.py +2 -1
- kalavai_client/cli.py +23 -20
- kalavai_client/core.py +13 -5
- kalavai_client/env.py +2 -2
- kalavai_client/utils.py +5 -2
- {kalavai_client-0.6.1.dist-info → kalavai_client-0.6.2.dist-info}/METADATA +1 -1
- kalavai_client-0.6.2.dist-info/RECORD +25 -0
- kalavai_client-0.6.1.dist-info/RECORD +0 -25
- {kalavai_client-0.6.1.dist-info → kalavai_client-0.6.2.dist-info}/LICENSE +0 -0
- {kalavai_client-0.6.1.dist-info → kalavai_client-0.6.2.dist-info}/WHEEL +0 -0
- {kalavai_client-0.6.1.dist-info → kalavai_client-0.6.2.dist-info}/entry_points.txt +0 -0
kalavai_client/__init__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
|
2
|
-
__version__ = "0.6.
|
2
|
+
__version__ = "0.6.2"
|
@@ -7,32 +7,54 @@ services:
|
|
7
7
|
- NET_ADMIN
|
8
8
|
- SYS_MODULE
|
9
9
|
network_mode: host
|
10
|
-
# networks:
|
11
|
-
# - custom-network
|
12
|
-
# ports:
|
13
|
-
# # https://docs.k3s.io/installation/requirements#inbound-rules-for-k3s-nodes
|
14
|
-
# - "6443:6443" # kube server
|
15
|
-
# - "10250:10250" # worker balancer
|
16
|
-
# - "8472:8472/udp" # flannel vxlan
|
17
|
-
# - "51820-51830:51820-51830" # flannel wireguard
|
18
|
-
# {% if command == "server" %}
|
19
|
-
# - "30000-30500:30000-30500"
|
20
|
-
# {% endif %}
|
21
10
|
environment:
|
22
11
|
- HOST_NAME={{node_name}}
|
23
12
|
- TOKEN={{vpn_token}}
|
24
13
|
volumes:
|
25
14
|
- /dev/net/tun:/dev/net/tun
|
26
15
|
restart: unless-stopped
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
16
|
+
{% endif %}
|
17
|
+
{% if backend %}
|
18
|
+
backend:
|
19
|
+
image: docker.io/bundenth/kalavai-backend:latest
|
20
|
+
container_name: backend
|
21
|
+
networks:
|
22
|
+
- kalavai-net
|
23
|
+
ports:
|
24
|
+
- "{{bridge_port | default(8001)}}:{{bridge_port | default(8001)}}"
|
25
|
+
command: >
|
26
|
+
backend
|
27
|
+
start
|
28
|
+
--bridge-port {{bridge_port | default(8001)}}
|
29
|
+
environment:
|
30
|
+
- KALAVAI_PATH=/root/.cache/kalavai
|
31
|
+
volumes:
|
32
|
+
- "{{user_path}}:/root/.cache/kalavai"
|
33
|
+
restart: unless-stopped
|
34
|
+
{% endif %}
|
35
|
+
{% if frontend %}
|
36
|
+
frontend:
|
37
|
+
container_name: frontend
|
38
|
+
image: bundenth/kalavai-gui:latest
|
39
|
+
networks:
|
40
|
+
- kalavai-net
|
41
|
+
environment:
|
42
|
+
- KALAVAI_BRIDGE_URL=http://backend
|
43
|
+
- KALAVAI_BRIDGE_PORT={{bridge_port | default(8001)}}
|
44
|
+
{% if protected_access %}
|
45
|
+
- ACCESS_KEY={{protected_access}}
|
46
|
+
{% endif %}
|
47
|
+
entrypoint: ["reflex"]
|
48
|
+
command: >
|
49
|
+
run
|
50
|
+
--backend-port {{gui_backend_port | default(8002)}}
|
51
|
+
--frontend-port {{gui_frontend_port | default(3000)}}
|
52
|
+
ports:
|
53
|
+
- "{{gui_backend_port | default(8002)}}:{{gui_backend_port | default(8002)}}"
|
54
|
+
- "{{gui_frontend_port | default(3000)}}:{{gui_frontend_port | default(3000)}}"
|
55
|
+
volumes:
|
56
|
+
- "{{user_path}}:/root/.cache/kalavai"
|
57
|
+
restart: unless-stopped
|
36
58
|
{% endif %}
|
37
59
|
|
38
60
|
# run worker only if command is set
|
@@ -46,21 +68,6 @@ services:
|
|
46
68
|
network_mode: "service:{{vpn_name}}"
|
47
69
|
{% else %}
|
48
70
|
network_mode: host
|
49
|
-
# hostname: {{node_name}}
|
50
|
-
# networks:
|
51
|
-
# - custom-network
|
52
|
-
# ports:
|
53
|
-
# - "6443:6443" # kube server
|
54
|
-
# - "2379-2380:2379-2380" # etcd server
|
55
|
-
# - "10259:10259" # kube scheduler
|
56
|
-
# - "10257:10257" # kube controller manager
|
57
|
-
# - "10250:10250" # worker balancer
|
58
|
-
# - "8285:8285" # flannel
|
59
|
-
# - "8472:8472" # flannel vxlan
|
60
|
-
# - "51820:51820" # flannel wireguard
|
61
|
-
# {% if command == "server" %}
|
62
|
-
# - "30000-32767:30000-32767"
|
63
|
-
# {% endif %}
|
64
71
|
{% endif %}
|
65
72
|
privileged: true
|
66
73
|
restart: unless-stopped
|
@@ -101,7 +108,6 @@ services:
|
|
101
108
|
{% endif %}
|
102
109
|
{% endif %}
|
103
110
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
111
|
+
networks:
|
112
|
+
kalavai-net:
|
113
|
+
driver: bridge
|
kalavai_client/bridge_api.py
CHANGED
@@ -75,7 +75,8 @@ def pool_create(request: CreatePoolRequest, api_key: str = Depends(verify_api_ke
|
|
75
75
|
only_registered_users=request.only_registered_users,
|
76
76
|
location=request.location,
|
77
77
|
description=request.description,
|
78
|
-
token_mode=request.token_mode
|
78
|
+
token_mode=request.token_mode,
|
79
|
+
frontend=request.frontend
|
79
80
|
)
|
80
81
|
return result
|
81
82
|
|
@@ -85,7 +86,8 @@ def pool_join(request: JoinPoolRequest, api_key: str = Depends(verify_api_key)):
|
|
85
86
|
token=request.token,
|
86
87
|
num_gpus=request.num_gpus,
|
87
88
|
node_name=request.node_name,
|
88
|
-
ip_address=request.ip_address
|
89
|
+
ip_address=request.ip_address,
|
90
|
+
frontend=request.frontend
|
89
91
|
)
|
90
92
|
return result
|
91
93
|
|
@@ -93,7 +95,8 @@ def pool_join(request: JoinPoolRequest, api_key: str = Depends(verify_api_key)):
|
|
93
95
|
def pool_attach(request: JoinPoolRequest, api_key: str = Depends(verify_api_key)):
|
94
96
|
result = attach_to_pool(
|
95
97
|
token=request.token,
|
96
|
-
node_name=request.node_name
|
98
|
+
node_name=request.node_name,
|
99
|
+
frontend=request.frontend
|
97
100
|
)
|
98
101
|
return result
|
99
102
|
|
kalavai_client/bridge_models.py
CHANGED
@@ -16,6 +16,7 @@ class CreatePoolRequest(BaseModel):
|
|
16
16
|
location: str = None
|
17
17
|
token_mode: TokenType = TokenType.USER
|
18
18
|
description: str = ""
|
19
|
+
frontend: bool = False
|
19
20
|
|
20
21
|
class NodesActionRequest(BaseModel):
|
21
22
|
nodes: list[str]
|
@@ -25,7 +26,7 @@ class JoinPoolRequest(BaseModel):
|
|
25
26
|
ip_address: str = None
|
26
27
|
node_name: str = None
|
27
28
|
num_gpus: int = None
|
28
|
-
|
29
|
+
frontend: bool = False
|
29
30
|
class JobDetailsRequest(BaseModel):
|
30
31
|
jobs: list[Job]
|
31
32
|
|
kalavai_client/cli.py
CHANGED
@@ -205,7 +205,6 @@ def input_gpus(non_interactive=False):
|
|
205
205
|
@arguably.command
|
206
206
|
def gui__start(
|
207
207
|
*others,
|
208
|
-
backend_only=False,
|
209
208
|
gui_frontend_port=3000,
|
210
209
|
gui_backend_port=8000,
|
211
210
|
bridge_port=8001,
|
@@ -224,32 +223,36 @@ def gui__start(
|
|
224
223
|
console.log("[red]Error: user key not found (required for protected access)")
|
225
224
|
return
|
226
225
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
run_cmd(f"docker compose --file {USER_GUI_COMPOSE_FILE} up -d")
|
226
|
+
values = {
|
227
|
+
"gui_frontend_port": gui_frontend_port,
|
228
|
+
"gui_backend_port": gui_backend_port,
|
229
|
+
"bridge_port": bridge_port,
|
230
|
+
"path": user_path("", create_path=True),
|
231
|
+
"protected_access": user_key
|
232
|
+
}
|
233
|
+
compose_yaml = load_template(
|
234
|
+
template_path=DOCKER_COMPOSE_GUI,
|
235
|
+
values=values)
|
236
|
+
with open(USER_GUI_COMPOSE_FILE, "w") as f:
|
237
|
+
f.write(compose_yaml)
|
238
|
+
|
239
|
+
run_cmd(f"docker compose --file {USER_GUI_COMPOSE_FILE} up -d")
|
242
240
|
|
243
|
-
|
241
|
+
console.log(f"[green]Loading GUI, may take a few minutes. It will be available at http://localhost:{gui_frontend_port}")
|
244
242
|
print(
|
245
243
|
"Deploying bridge API"
|
246
244
|
)
|
247
245
|
run_api(port=bridge_port, log_level=log_level)
|
248
|
-
|
249
|
-
if not backend_only:
|
250
|
-
run_cmd(f"docker compose --file {USER_GUI_COMPOSE_FILE} down")
|
246
|
+
run_cmd(f"docker compose --file {USER_GUI_COMPOSE_FILE} down")
|
251
247
|
console.log("[green]Kalavai GUI has been stopped")
|
252
248
|
|
249
|
+
@arguably.command
|
250
|
+
def backend__start(*others, bridge_port=8001, log_level="critical"):
|
251
|
+
"""
|
252
|
+
Start the Kalavai backend
|
253
|
+
"""
|
254
|
+
run_api(port=bridge_port, log_level=log_level)
|
255
|
+
console.log("[green]Kalavai backend has been stopped")
|
253
256
|
|
254
257
|
@arguably.command
|
255
258
|
def auth(user_key, *others):
|
kalavai_client/core.py
CHANGED
@@ -573,7 +573,9 @@ def attach_to_pool(token, node_name=None):
|
|
573
573
|
generate_compose_config(
|
574
574
|
role="",
|
575
575
|
vpn_token=public_location,
|
576
|
-
node_name=node_name
|
576
|
+
node_name=node_name,
|
577
|
+
backend=True,
|
578
|
+
frontend=True)
|
577
579
|
|
578
580
|
store_server_info(
|
579
581
|
server_ip=kalavai_seed_ip,
|
@@ -637,7 +639,9 @@ def generate_worker_package(num_gpus=0, node_name=None, ip_address="0.0.0.0", st
|
|
637
639
|
num_gpus=num_gpus,
|
638
640
|
vpn_token=public_location,
|
639
641
|
node_name=node_name,
|
640
|
-
node_labels=node_labels
|
642
|
+
node_labels=node_labels,
|
643
|
+
backend=False,
|
644
|
+
frontend=False)
|
641
645
|
|
642
646
|
return compose
|
643
647
|
|
@@ -684,7 +688,9 @@ def join_pool(token, num_gpus=None, node_name=None, ip_address=None):
|
|
684
688
|
num_gpus=num_gpus,
|
685
689
|
vpn_token=public_location,
|
686
690
|
node_name=node_name,
|
687
|
-
node_labels=node_labels
|
691
|
+
node_labels=node_labels,
|
692
|
+
backend=True,
|
693
|
+
frontend=True)
|
688
694
|
|
689
695
|
store_server_info(
|
690
696
|
server_ip=kalavai_seed_ip,
|
@@ -770,7 +776,10 @@ def create_pool(
|
|
770
776
|
node_ip_address=ip_address,
|
771
777
|
num_gpus=num_gpus,
|
772
778
|
node_name=node_name,
|
773
|
-
node_labels=node_labels
|
779
|
+
node_labels=node_labels,
|
780
|
+
backend=True,
|
781
|
+
frontend=True,
|
782
|
+
user_id=user_id
|
774
783
|
)
|
775
784
|
|
776
785
|
# start server
|
@@ -789,7 +798,6 @@ def create_pool(
|
|
789
798
|
auth_key = user_id if user_id is not None else str(uuid.uuid4())
|
790
799
|
write_auth_key = str(uuid.uuid4())
|
791
800
|
readonly_auth_key = str(uuid.uuid4())
|
792
|
-
|
793
801
|
watcher_service = f"{ip_address}:{DEFAULT_WATCHER_PORT}"
|
794
802
|
values = {
|
795
803
|
CLUSTER_NAME_KEY: cluster_name,
|
kalavai_client/env.py
CHANGED
@@ -3,11 +3,11 @@ from pathlib import Path
|
|
3
3
|
import importlib.resources
|
4
4
|
|
5
5
|
|
6
|
-
DEFAULT_KALAVAI_PATH = os.getenv("KALAVAI_PATH",
|
6
|
+
DEFAULT_KALAVAI_PATH = os.getenv("KALAVAI_PATH", "")
|
7
7
|
|
8
8
|
def user_path(relative_path, create_path=False):
|
9
9
|
"""Transform a relative path into the user's cache folder path"""
|
10
|
-
if DEFAULT_KALAVAI_PATH
|
10
|
+
if len(DEFAULT_KALAVAI_PATH.strip()) > 0:
|
11
11
|
kalavai_user_path = DEFAULT_KALAVAI_PATH
|
12
12
|
else:
|
13
13
|
base = os.path.expanduser("~")
|
kalavai_client/utils.py
CHANGED
@@ -100,7 +100,7 @@ def is_storage_compatible():
|
|
100
100
|
return False
|
101
101
|
################
|
102
102
|
|
103
|
-
def generate_compose_config(role, node_name, write_to_file=True, node_ip_address="0.0.0.0", num_gpus=0, node_labels=None, pool_ip=None, vpn_token=None, pool_token=None):
|
103
|
+
def generate_compose_config(role, node_name, write_to_file=True, node_ip_address="0.0.0.0", num_gpus=0, node_labels=None, pool_ip=None, vpn_token=None, pool_token=None, user_id=None, backend=True, frontend=True):
|
104
104
|
|
105
105
|
if node_labels is not None:
|
106
106
|
node_labels = " ".join([f"--node-label {key}={value}" for key, value in node_labels.items()])
|
@@ -121,7 +121,10 @@ def generate_compose_config(role, node_name, write_to_file=True, node_ip_address
|
|
121
121
|
"k3s_path": f"{CONTAINER_HOST_PATH}/{rand_suffix}/k3s",
|
122
122
|
"etc_path": f"{CONTAINER_HOST_PATH}/{rand_suffix}/etc",
|
123
123
|
"node_labels": node_labels,
|
124
|
-
"flannel_iface": DEFAULT_FLANNEL_IFACE if vpn_token is not None else ""
|
124
|
+
"flannel_iface": DEFAULT_FLANNEL_IFACE if vpn_token is not None else "",
|
125
|
+
"backend": backend,
|
126
|
+
"frontend": frontend,
|
127
|
+
"protected_access": user_id
|
125
128
|
}
|
126
129
|
# generate local config files
|
127
130
|
compose_yaml = load_template(
|
@@ -0,0 +1,25 @@
|
|
1
|
+
kalavai_client/__init__.py,sha256=KHdxFPVZ8ieY1b3JqZNDqsGezrCIPje_GQszyzGWEVw,22
|
2
|
+
kalavai_client/__main__.py,sha256=WQUfxvRsBJH5gsCJg8pLz95QnZIj7Ol8psTO77m0QE0,73
|
3
|
+
kalavai_client/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
+
kalavai_client/assets/apps.yaml,sha256=H2HZQ_oqdNz2qPDs5_NtHvJo4rblH1DRPugzQYq_t5Q,6366
|
5
|
+
kalavai_client/assets/apps_values.yaml,sha256=WRew3bS1MztjzcJfphuJcKn0n2T1ICRupPpr_Csjt_s,1644
|
6
|
+
kalavai_client/assets/docker-compose-gui.yaml,sha256=DGCyGYzz1kH6kkMbo62FJHe3F9vcAmA8DOHw-c_o0Kw,752
|
7
|
+
kalavai_client/assets/docker-compose-template.yaml,sha256=zJLk59DnoBkZscFJs50xgfwx9drmHArmivtQLevrHI8,2882
|
8
|
+
kalavai_client/assets/nginx.conf,sha256=drVVCg8GHucz7hmt_BI6giAhK92OV71257NTs3LthwM,225
|
9
|
+
kalavai_client/assets/pool_config_template.yaml,sha256=fFz4w2-fMKD5KvyzFdfcWD_jSneRlmnjLc8hCctweX0,576
|
10
|
+
kalavai_client/assets/pool_config_values.yaml,sha256=VrM3XHQfQo6QLZ68qvagooUptaYgl1pszniY_JUtemk,233
|
11
|
+
kalavai_client/assets/user_workspace.yaml,sha256=wDvlMYknOPABAEo0dsQwU7bac8iubjAG9tdkFbJZ5Go,476
|
12
|
+
kalavai_client/assets/user_workspace_values.yaml,sha256=G0HOzQUxrDMCwuW9kbWUZaKMzDDPVwDwzBHCL2Xi2ZM,542
|
13
|
+
kalavai_client/auth.py,sha256=EB3PMvKUn5_KAQkezkEHEt-OMZXyfkZguIQlUFkEHcA,3243
|
14
|
+
kalavai_client/bridge_api.py,sha256=KecIZvsGRiZgUQaDSgvRBLaqPDBhxFKS6FBH_w5ArCc,7015
|
15
|
+
kalavai_client/bridge_models.py,sha256=IGPLAYEZG4f5EUtBuoR2u_cYoyCCVkhx4H2rMeGuJ_Y,1030
|
16
|
+
kalavai_client/cli.py,sha256=YHC74zg5z3Hw4s101TsV-rmi4WYY1ZIdC2OavNeA1wc,47114
|
17
|
+
kalavai_client/cluster.py,sha256=gwjmdsd--YrffT0BmZDOEpbrdm3lPskUuN5jdgcrOR0,12947
|
18
|
+
kalavai_client/core.py,sha256=rPnKRvyORYP6hhPv_NyHEm8XtEy1DOY3VQ5ambvPZDY,32733
|
19
|
+
kalavai_client/env.py,sha256=wAd-P8XDlDB8Oau76f0bG2aHTkNA793xb_V0frbNeJE,2770
|
20
|
+
kalavai_client/utils.py,sha256=LqcG2fOJcvqEuC348ddwhStd6zqiXo7nuQ2VlU9v9Lg,12156
|
21
|
+
kalavai_client-0.6.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
22
|
+
kalavai_client-0.6.2.dist-info/METADATA,sha256=zaRbaISgFAHXJR8f1_2m_YynbeRrR2I5KUqTLcqABQ0,13353
|
23
|
+
kalavai_client-0.6.2.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
24
|
+
kalavai_client-0.6.2.dist-info/entry_points.txt,sha256=9T6D45gxwzfVbglMm1r6XPdXuuZdHfy_7fCeu2jUphc,50
|
25
|
+
kalavai_client-0.6.2.dist-info/RECORD,,
|
@@ -1,25 +0,0 @@
|
|
1
|
-
kalavai_client/__init__.py,sha256=RUEIQh8z_V_kGKsMyzH8WJLz-dW7GvzomrpPti1qfDw,22
|
2
|
-
kalavai_client/__main__.py,sha256=WQUfxvRsBJH5gsCJg8pLz95QnZIj7Ol8psTO77m0QE0,73
|
3
|
-
kalavai_client/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
-
kalavai_client/assets/apps.yaml,sha256=H2HZQ_oqdNz2qPDs5_NtHvJo4rblH1DRPugzQYq_t5Q,6366
|
5
|
-
kalavai_client/assets/apps_values.yaml,sha256=WRew3bS1MztjzcJfphuJcKn0n2T1ICRupPpr_Csjt_s,1644
|
6
|
-
kalavai_client/assets/docker-compose-gui.yaml,sha256=IHClIltiu8C4nHbgDgAscf3Ls6UFngbeQP07kj31kjM,776
|
7
|
-
kalavai_client/assets/docker-compose-template.yaml,sha256=uct7xmXtO1XgNimdirSiQusb-RYsPbnL67TVkj2oWrU,2772
|
8
|
-
kalavai_client/assets/nginx.conf,sha256=drVVCg8GHucz7hmt_BI6giAhK92OV71257NTs3LthwM,225
|
9
|
-
kalavai_client/assets/pool_config_template.yaml,sha256=fFz4w2-fMKD5KvyzFdfcWD_jSneRlmnjLc8hCctweX0,576
|
10
|
-
kalavai_client/assets/pool_config_values.yaml,sha256=VrM3XHQfQo6QLZ68qvagooUptaYgl1pszniY_JUtemk,233
|
11
|
-
kalavai_client/assets/user_workspace.yaml,sha256=wDvlMYknOPABAEo0dsQwU7bac8iubjAG9tdkFbJZ5Go,476
|
12
|
-
kalavai_client/assets/user_workspace_values.yaml,sha256=G0HOzQUxrDMCwuW9kbWUZaKMzDDPVwDwzBHCL2Xi2ZM,542
|
13
|
-
kalavai_client/auth.py,sha256=EB3PMvKUn5_KAQkezkEHEt-OMZXyfkZguIQlUFkEHcA,3243
|
14
|
-
kalavai_client/bridge_api.py,sha256=IkKq_CODA4p4UJkk6UqXKHkz5m2ESq2mL3tKqkQk6T0,6910
|
15
|
-
kalavai_client/bridge_models.py,sha256=k4ILxa8jfAcfgIIBJqK1DunDzHh_oNUpuiEpmhAfTP0,977
|
16
|
-
kalavai_client/cli.py,sha256=TUZJDmHdpBnF7Po-rnI97S1VYDPWxde1JqaHtb9xlIQ,46996
|
17
|
-
kalavai_client/cluster.py,sha256=gwjmdsd--YrffT0BmZDOEpbrdm3lPskUuN5jdgcrOR0,12947
|
18
|
-
kalavai_client/core.py,sha256=CWJQ38BZ2mLavfOCyR7wsDdy4fRTpjnYmggoXcR9Ji8,32531
|
19
|
-
kalavai_client/env.py,sha256=J-9_YopIIVBCnwTFxoQ9jq8JWUDdKrB__S-Wig6TWSU,2767
|
20
|
-
kalavai_client/utils.py,sha256=k2Bpvl16zDpWBXMIMsd_LbkinZtctPO6bygfB7DyiZ8,12018
|
21
|
-
kalavai_client-0.6.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
22
|
-
kalavai_client-0.6.1.dist-info/METADATA,sha256=0VhOSaYS1GdoXSE0w_YNYjfjiXHZ57SiLe3IRVJ7Sz4,13353
|
23
|
-
kalavai_client-0.6.1.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
24
|
-
kalavai_client-0.6.1.dist-info/entry_points.txt,sha256=9T6D45gxwzfVbglMm1r6XPdXuuZdHfy_7fCeu2jUphc,50
|
25
|
-
kalavai_client-0.6.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|