vantage6 5.0.0a22__py3-none-any.whl → 5.0.0a29__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 vantage6 might be problematic. Click here for more details.

Files changed (55) hide show
  1. tests_cli/test_client_script.py +23 -0
  2. tests_cli/test_server_cli.py +7 -6
  3. tests_cli/test_wizard.py +7 -7
  4. vantage6/cli/__build__ +1 -1
  5. vantage6/cli/algorithm/generate_algorithm_json.py +531 -0
  6. vantage6/cli/algostore/list.py +2 -1
  7. vantage6/cli/algostore/start.py +6 -6
  8. vantage6/cli/algostore/stop.py +3 -2
  9. vantage6/cli/cli.py +25 -0
  10. vantage6/cli/common/decorator.py +3 -1
  11. vantage6/cli/common/start.py +221 -12
  12. vantage6/cli/common/stop.py +90 -0
  13. vantage6/cli/common/utils.py +15 -20
  14. vantage6/cli/config.py +260 -0
  15. vantage6/cli/configuration_manager.py +8 -14
  16. vantage6/cli/configuration_wizard.py +66 -111
  17. vantage6/cli/context/__init__.py +2 -1
  18. vantage6/cli/context/algorithm_store.py +10 -7
  19. vantage6/cli/context/node.py +38 -54
  20. vantage6/cli/context/server.py +36 -5
  21. vantage6/cli/dev/create.py +88 -29
  22. vantage6/cli/dev/data/km_dataset.csv +2401 -0
  23. vantage6/cli/dev/remove.py +99 -98
  24. vantage6/cli/globals.py +24 -4
  25. vantage6/cli/node/common/__init__.py +6 -5
  26. vantage6/cli/node/new.py +4 -3
  27. vantage6/cli/node/remove.py +4 -2
  28. vantage6/cli/node/start.py +33 -42
  29. vantage6/cli/prometheus/monitoring_manager.py +146 -0
  30. vantage6/cli/prometheus/prometheus.yml +5 -0
  31. vantage6/cli/server/files.py +4 -2
  32. vantage6/cli/server/import_.py +7 -7
  33. vantage6/cli/server/list.py +2 -1
  34. vantage6/cli/server/new.py +25 -6
  35. vantage6/cli/server/shell.py +5 -4
  36. vantage6/cli/server/start.py +44 -213
  37. vantage6/cli/server/stop.py +36 -105
  38. vantage6/cli/server/version.py +5 -4
  39. vantage6/cli/template/algo_store_config.j2 +0 -1
  40. vantage6/cli/template/node_config.j2 +3 -1
  41. vantage6/cli/template/server_import_config.j2 +0 -2
  42. vantage6/cli/test/algo_test_scripts/algo_test_arguments.py +29 -0
  43. vantage6/cli/test/algo_test_scripts/algo_test_script.py +92 -0
  44. vantage6/cli/test/client_script.py +151 -0
  45. vantage6/cli/test/common/diagnostic_runner.py +2 -2
  46. vantage6/cli/test/feature_tester.py +5 -2
  47. vantage6/cli/use/context.py +46 -0
  48. vantage6/cli/use/namespace.py +55 -0
  49. vantage6/cli/utils.py +70 -4
  50. {vantage6-5.0.0a22.dist-info → vantage6-5.0.0a29.dist-info}/METADATA +15 -11
  51. vantage6-5.0.0a29.dist-info/RECORD +84 -0
  52. {vantage6-5.0.0a22.dist-info → vantage6-5.0.0a29.dist-info}/WHEEL +1 -1
  53. vantage6-5.0.0a22.dist-info/RECORD +0 -72
  54. {vantage6-5.0.0a22.dist-info → vantage6-5.0.0a29.dist-info}/entry_points.txt +0 -0
  55. {vantage6-5.0.0a22.dist-info → vantage6-5.0.0a29.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,29 @@
1
+ average = {
2
+ "collaboration": 1,
3
+ "organizations": [1],
4
+ "name": "test_average_task",
5
+ "image": "harbor2.vantage6.ai/demo/average",
6
+ "description": "",
7
+ "method": "central_average",
8
+ "arguments": {
9
+ "column_name": "Age",
10
+ },
11
+ "databases": [{"label": "olympic_athletes"}],
12
+ }
13
+
14
+ kaplan_meier = {
15
+ "collaboration": 1,
16
+ "organizations": [1],
17
+ "name": "test_average_task",
18
+ "image": "harbor2.vantage6.ai/algorithms/kaplan-meier",
19
+ "description": "",
20
+ "method": "kaplan_meier_central",
21
+ "arguments": {
22
+ "time_column_name": "days",
23
+ "censor_column_name": "censor",
24
+ "organizations_to_include": [1, 2, 3],
25
+ },
26
+ "databases": [{"label": "kaplan_meier_test"}],
27
+ }
28
+
29
+ args = {"average": average, "kaplan_meier": kaplan_meier}
@@ -0,0 +1,92 @@
1
+ import json
2
+ import logging
3
+ import sys
4
+
5
+ from vantage6.common import error
6
+ from vantage6.common.enum import TaskStatus
7
+ from vantage6.common.globals import Ports
8
+
9
+ from vantage6.client import Client
10
+
11
+ import vantage6.cli.test.algo_test_scripts.algo_test_arguments as arguments
12
+
13
+
14
+ def create_and_run_task(client: Client, task_args: dict, algo_name: str = "algorithm"):
15
+ """
16
+ Create and run a task using the provided client and task arguments.
17
+
18
+ Parameters
19
+ ----------
20
+ client: Client
21
+ The client instance to use for creating and running the task.
22
+ task_args: dict
23
+ The arguments to pass to the task creation method.
24
+ algo_name: str, optional
25
+ The name of the algorithm for logging purposes. Default is "algorithm".
26
+
27
+ Raises
28
+ ------
29
+ AssertionError: If the task fails.
30
+ """
31
+ task = client.task.create(**task_args)
32
+ task_id = task["id"]
33
+ client.wait_for_results(task_id)
34
+
35
+ try:
36
+ # check if the task has failed
37
+ assert client.task.get(task_id)["status"] != TaskStatus.FAILED
38
+
39
+ logging.info("Task for %s completed successfully.", algo_name)
40
+
41
+ except AssertionError:
42
+ error(
43
+ f"Task for {algo_name} failed. Check the log file of the task "
44
+ f"{task_id} for more information."
45
+ )
46
+ exit(1)
47
+
48
+
49
+ def run_test(custom_args: dict | None = None):
50
+ """
51
+ Run a test by creating and running tasks using the provided arguments.
52
+
53
+ Parameters
54
+ ----------
55
+ custom_args: dict, optional
56
+ The arguments to pass to the task creation method. If not provided,
57
+ the arguments from the `arguments` module will be used.
58
+ """
59
+ # Create a client and authenticate
60
+ client = Client(
61
+ server_url=f"http://localhost:{Ports.DEV_SERVER}/api",
62
+ auth_url="http://localhost:8080",
63
+ )
64
+ try:
65
+ client.authenticate()
66
+ except ConnectionError:
67
+ error(
68
+ "Could not connect to the server. Please check if a dev network is running."
69
+ )
70
+ exit(1)
71
+
72
+ # if custom arguments are provided, use them for running the task
73
+ if custom_args:
74
+ create_and_run_task(client, custom_args)
75
+
76
+ else:
77
+ # Run the task for each algorithm in the arguments file
78
+ for algo, task_args in arguments.args.items():
79
+ logging.info("Running task for %s", algo)
80
+ logging.info("Task arguments: %s", task_args)
81
+ create_and_run_task(client, task_args, algo)
82
+
83
+
84
+ if __name__ == "__main__":
85
+ # check if arguments are provided
86
+ if len(sys.argv) > 1:
87
+ input_string = sys.argv[1].replace("'", '"')
88
+ json_input = json.loads(input_string)
89
+ else:
90
+ json_input = None
91
+
92
+ run_test(json_input)
@@ -0,0 +1,151 @@
1
+ # import click
2
+ # import json
3
+ # import subprocess
4
+ # import sys
5
+
6
+ # from pathlib import Path
7
+
8
+ # from rich.console import Console
9
+
10
+ # from vantage6.cli.dev.create import create_demo_network
11
+ # from vantage6.cli.dev.remove import remove_demo_network
12
+
13
+ # # from vantage6.cli.dev.start import start_demo_network
14
+ # # from vantage6.cli.dev.stop import stop_demo_network
15
+ # from vantage6.cli.utils import prompt_config_name
16
+ # from vantage6.common.globals import Ports
17
+
18
+ # TEST_FILE_PATH = Path(__file__).parent / "algo_test_scripts" / "algo_test_script.py"
19
+
20
+
21
+ # @click.command()
22
+ # @click.option(
23
+ # "--script",
24
+ # type=click.Path(),
25
+ # default=TEST_FILE_PATH,
26
+ # help="Path of the script to test the algorithm. If a script is not provided, the default script is used.",
27
+ # )
28
+ # @click.option(
29
+ # "--task-arguments",
30
+ # type=str,
31
+ # default=None,
32
+ # help="Arguments to be provided to Task.create function. If --script is provided, this should not be set.",
33
+ # )
34
+ # @click.option(
35
+ # "--create-dev-network",
36
+ # is_flag=True,
37
+ # help="Create a new dev network to run the test",
38
+ # )
39
+ # @click.option(
40
+ # "--start-dev-network",
41
+ # is_flag=True,
42
+ # help="Start a dev network to run the test",
43
+ # )
44
+ # @click.option(
45
+ # "-n", "--name", default=None, type=str, help="Name for your development setup"
46
+ # )
47
+ # @click.option(
48
+ # "--server-url",
49
+ # type=str,
50
+ # default="http://host.docker.internal",
51
+ # help="Server URL to point to. If you are using Docker Desktop, "
52
+ # "the default http://host.docker.internal should not be changed.",
53
+ # )
54
+ # @click.option(
55
+ # "-i", "--image", type=str, default=None, help="Server Docker image to use"
56
+ # )
57
+ # @click.option(
58
+ # "--keep",
59
+ # type=bool,
60
+ # default=False,
61
+ # help="Keep the dev network after finishing the test",
62
+ # )
63
+ # @click.option(
64
+ # "--add-dataset",
65
+ # type=(str, click.Path()),
66
+ # default=[],
67
+ # multiple=True,
68
+ # help="Add a dataset to the nodes. The first argument is the label of the database, "
69
+ # "the second is the path to the dataset file.",
70
+ # )
71
+ # @click.pass_context
72
+ # def cli_test_client_script(
73
+ # click_ctx: click.Context,
74
+ # script: Path | None,
75
+ # task_arguments: str | None,
76
+ # name: str,
77
+ # server_url: str,
78
+ # create_dev_network: bool,
79
+ # start_dev_network: bool,
80
+ # image: str,
81
+ # keep: bool,
82
+ # add_dataset: list[tuple[str, Path]] = (),
83
+ # ) -> int:
84
+ # """
85
+ # Run a script for testing an algorithm on a dev network.
86
+ # The path to the script must be provided as an argument.
87
+ # """
88
+ # if not (script or task_arguments):
89
+ # raise click.UsageError("--script or --task-arguments must be set.")
90
+ # elif script != TEST_FILE_PATH and task_arguments:
91
+ # raise click.UsageError("--script and --task-arguments cannot be set together.")
92
+
93
+ # # Check if the task_arguments is a valid JSON string
94
+ # if task_arguments:
95
+ # try:
96
+ # json.loads(task_arguments.replace("'", '"'))
97
+ # except json.JSONDecodeError:
98
+ # raise click.UsageError("task-arguments must be a valid JSON string.")
99
+
100
+ # name = prompt_config_name(name)
101
+
102
+ # # create the network
103
+ # if create_dev_network:
104
+ # click_ctx.invoke(
105
+ # create_demo_network,
106
+ # name=name,
107
+ # num_nodes=3,
108
+ # server_url=server_url,
109
+ # server_port=Ports.DEV_SERVER.value,
110
+ # image=image,
111
+ # extra_server_config=None,
112
+ # extra_node_config=None,
113
+ # add_dataset=add_dataset,
114
+ # )
115
+
116
+ # # start the server and nodes
117
+ # if create_dev_network or start_dev_network:
118
+ # click_ctx.invoke(
119
+ # start_demo_network,
120
+ # name=name,
121
+ # server_image=image,
122
+ # node_image=image,
123
+ # )
124
+
125
+ # # run the test script and get the result
126
+ # if not task_arguments:
127
+ # subprocess_args = ["python", script]
128
+ # else:
129
+ # subprocess_args = ["python", script, task_arguments]
130
+
131
+ # result = subprocess.run(subprocess_args, stdout=sys.stdout, stderr=sys.stderr)
132
+
133
+ # # check the exit code. If the test passed, it should be 0
134
+ # if result.returncode == 0:
135
+ # msg = ":heavy_check_mark: [green]Test passed[/green]"
136
+ # else:
137
+ # msg = ":x: [red]Test failed[/red]"
138
+
139
+ # console = Console()
140
+ # console.print(msg)
141
+
142
+ # # clean up the test resources. Keep the network if --keep is set, or if the network
143
+ # # was created for this test. If the network was started for this test, stop it but
144
+ # # do not remove it.
145
+ # if not keep:
146
+ # if create_dev_network or start_dev_network:
147
+ # click_ctx.invoke(stop_demo_network, name=name)
148
+ # if create_dev_network:
149
+ # click_ctx.invoke(remove_demo_network, name=name)
150
+
151
+ # return result.returncode
@@ -122,8 +122,8 @@ class DiagnosticRunner:
122
122
  description="VPN Diagnostic test",
123
123
  image=DIAGNOSTICS_IMAGE,
124
124
  method="vpn_features",
125
- input_={
126
- "kwargs": {"other_nodes": self.organization_ids},
125
+ arguments={
126
+ "other_nodes": self.organization_ids,
127
127
  },
128
128
  organizations=self.organization_ids,
129
129
  )
@@ -1,17 +1,20 @@
1
1
  import sys
2
+
2
3
  import click
3
4
 
4
5
  from vantage6.common.globals import Ports
6
+
5
7
  from vantage6.client import UserClient
6
- from vantage6.cli.utils import error
8
+
7
9
  from vantage6.cli.test.common.diagnostic_runner import DiagnosticRunner
10
+ from vantage6.cli.utils import error
8
11
 
9
12
 
10
13
  @click.command()
11
14
  @click.option(
12
15
  "--server-url",
13
16
  type=str,
14
- default=f"http://localhost:{Ports.DEV_SERVER.value}/api",
17
+ default=f"http://localhost:{Ports.DEV_SERVER}/api",
15
18
  help="URL of the server",
16
19
  )
17
20
  @click.option(
@@ -0,0 +1,46 @@
1
+ import click
2
+ import questionary
3
+ from kubernetes import config
4
+
5
+ from vantage6.common import error
6
+
7
+ from vantage6.cli.config import CliConfig
8
+ from vantage6.cli.utils import switch_context_and_namespace
9
+
10
+
11
+ @click.command()
12
+ @click.argument("context", required=False, type=str, default=None)
13
+ def cli_use_context(context: str):
14
+ """
15
+ Set which Kubernetes context to use.
16
+ """
17
+ # Get available contexts
18
+ contexts, active_context = config.list_kube_config_contexts()
19
+ context_names = [ctx["name"] for ctx in contexts]
20
+
21
+ # Prompt user to select a context
22
+ if not context:
23
+ current = active_context["name"] if active_context else None
24
+ context = questionary.select(
25
+ "Which Kubernetes context do you want to use?",
26
+ choices=context_names,
27
+ default=current if current in context_names else None,
28
+ ).ask()
29
+
30
+ # If no context is selected (e.g. KeyboardInterrupt), exit
31
+ if not context:
32
+ return
33
+
34
+ # Load the selected context
35
+ try:
36
+ config.load_kube_config(context=context)
37
+ except Exception:
38
+ error(f"Cannot not find {context} in kube config")
39
+ return
40
+
41
+ # Update kubeconfig current-context
42
+ switch_context_and_namespace(context=context)
43
+
44
+ # Clear the last_context in CLI config
45
+ cli_config = CliConfig()
46
+ cli_config.remove_kube()
@@ -0,0 +1,55 @@
1
+ import click
2
+ import questionary
3
+ from kubernetes import client, config
4
+
5
+ from vantage6.cli.config import CliConfig
6
+ from vantage6.cli.utils import switch_context_and_namespace
7
+ from vantage6.common import error
8
+
9
+
10
+ @click.command()
11
+ @click.argument("namespace", required=False, type=str, default=None)
12
+ def cli_use_namespace(namespace: str):
13
+ """
14
+ Set which Kubernetes namespace to use.
15
+
16
+ The namespace will be created if it does not exist.
17
+ """
18
+ # Load the active context configuration
19
+ config.load_kube_config()
20
+
21
+ try:
22
+ v1 = client.CoreV1Api()
23
+ namespace_list = v1.list_namespace()
24
+ except Exception:
25
+ error(
26
+ "Failed to connect to Kubernetes cluster. Check if the cluster is running and reachable."
27
+ )
28
+ return
29
+
30
+ namespace_names = [ns.metadata.name for ns in namespace_list.items]
31
+
32
+ # Prompt user to select a namespace
33
+ if not namespace:
34
+ namespace = questionary.select(
35
+ "Which Kubernetes namespace do you want to use?",
36
+ choices=namespace_names,
37
+ ).ask()
38
+
39
+ # If no namespace is selected (e.g. KeyboardInterrupt), exit
40
+ if not namespace:
41
+ return
42
+
43
+ # Check if namespace exists, create if not
44
+ if namespace not in namespace_names:
45
+ namespace_body = client.V1Namespace(
46
+ metadata=client.V1ObjectMeta(name=namespace)
47
+ )
48
+ v1.create_namespace(namespace_body)
49
+
50
+ # Switch to the selected namespace for current context
51
+ switch_context_and_namespace(namespace=namespace)
52
+
53
+ # Remove the last_context in CLI config
54
+ cli_config = CliConfig()
55
+ cli_config.remove_kube()
vantage6/cli/utils.py CHANGED
@@ -4,14 +4,15 @@ Utility functions for the CLI
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
+ import os
7
8
  import re
9
+ import subprocess
10
+ from pathlib import Path
11
+
8
12
  import docker
9
- import os
10
13
  import questionary as q
11
14
 
12
- from pathlib import Path
13
-
14
- from vantage6.common import error, warning, info
15
+ from vantage6.common import error, info, warning
15
16
 
16
17
 
17
18
  def check_config_name_allowed(name: str) -> None:
@@ -99,3 +100,68 @@ def prompt_config_name(name: str | None) -> None:
99
100
  name = name.replace(" ", "-")
100
101
  info(f"Replaced spaces from configuration name: {name}")
101
102
  return name
103
+
104
+
105
+ def switch_context_and_namespace(
106
+ context: str | None = None, namespace: str | None = None
107
+ ) -> None:
108
+ # input validation
109
+ validate_input_cmd_args(context, "context name", allow_none=True)
110
+ validate_input_cmd_args(namespace, "namespace name", allow_none=True)
111
+
112
+ try:
113
+ if context:
114
+ subprocess.run(
115
+ ["kubectl", "config", "use-context", context],
116
+ check=True,
117
+ stdout=subprocess.DEVNULL,
118
+ )
119
+ info(f"Successfully set context to: {context}")
120
+
121
+ if namespace:
122
+ subprocess.run(
123
+ [
124
+ "kubectl",
125
+ "config",
126
+ "set-context",
127
+ context or "--current",
128
+ f"--namespace={namespace}",
129
+ ],
130
+ check=True,
131
+ stdout=subprocess.DEVNULL,
132
+ )
133
+ info(f"Successfully set namespace to: {namespace}")
134
+
135
+ except subprocess.CalledProcessError as e:
136
+ error(f"Failed to set Kubernetes context or namespace: {e}")
137
+
138
+
139
+ def validate_input_cmd_args(
140
+ value: str | None, field_name: str, allow_none: bool = False
141
+ ) -> None:
142
+ """
143
+ Validate input for subprocess commands.
144
+
145
+ Parameters
146
+ ----------
147
+ value : str | None
148
+ The value to validate.
149
+ field_name : str
150
+ The name of the field being validated, used for error messages.
151
+ allow_none : bool, optional
152
+ Whether None is allowed as a valid value. Defaults to False.
153
+
154
+ Raises
155
+ ------
156
+ SystemExit
157
+ If the input is invalid.
158
+ """
159
+ if allow_none and value is None:
160
+ return
161
+
162
+ if not isinstance(value, str) or not re.match("^[a-zA-Z0-9_.-]+$", value):
163
+ error(
164
+ f"Invalid {field_name}: {value}. Use only alphanumeric characters, "
165
+ "dashes, underscores, or dots."
166
+ )
167
+ exit(1)
@@ -1,9 +1,9 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: vantage6
3
- Version: 5.0.0a22
3
+ Version: 5.0.0a29
4
4
  Summary: vantage6 command line interface
5
5
  Home-page: https://github.com/vantage6/vantage6
6
- Requires-Python: >=3.10
6
+ Requires-Python: >=3.13
7
7
  Description-Content-Type: text/markdown
8
8
  Requires-Dist: click==8.1.3
9
9
  Requires-Dist: colorama==0.4.6
@@ -11,17 +11,25 @@ Requires-Dist: copier==9.2.0
11
11
  Requires-Dist: docker==7.1.0
12
12
  Requires-Dist: ipython==8.10.0
13
13
  Requires-Dist: jinja2==3.1.6
14
- Requires-Dist: pandas>=1.5.3
14
+ Requires-Dist: kubernetes==28.1.0
15
+ Requires-Dist: pandas>=2.2.3
15
16
  Requires-Dist: questionary==1.10.0
16
17
  Requires-Dist: rich==13.5.2
17
18
  Requires-Dist: schema==0.7.5
18
19
  Requires-Dist: sqlalchemy==2.0.37
19
- Requires-Dist: vantage6-common==5.0.0a22
20
- Requires-Dist: vantage6-client==5.0.0a22
20
+ Requires-Dist: vantage6-common==5.0.0a29
21
+ Requires-Dist: vantage6-client==5.0.0a29
21
22
  Provides-Extra: dev
22
23
  Requires-Dist: coverage==6.4.4; extra == "dev"
23
24
  Requires-Dist: black; extra == "dev"
24
25
  Requires-Dist: pre-commit; extra == "dev"
26
+ Dynamic: description
27
+ Dynamic: description-content-type
28
+ Dynamic: home-page
29
+ Dynamic: provides-extra
30
+ Dynamic: requires-dist
31
+ Dynamic: requires-python
32
+ Dynamic: summary
25
33
 
26
34
  <h1 align="center">
27
35
  <br>
@@ -70,7 +78,7 @@ collaborations. The server contains users, organizations, collaborations, tasks
70
78
  their results. It provides a central access point for both the clients and nodes. The
71
79
  nodes have access to privacy sensitive data and handle computation requests retrieved
72
80
  from the server. Computation request are executed as separate containers on the node.
73
- These containers are connected to containers at other nodes by a VPN network._
81
+ These containers are connected to containers at other nodes by a internal network._
74
82
 
75
83
  ## :books: Quickstart
76
84
 
@@ -185,11 +193,7 @@ with `VERSION` being the full semantic version of the vantage6 infrastructure, e
185
193
  Several other images are used to support the infrastructure:
186
194
 
187
195
  - `harbor2.vantage6.ai/infrastructure/infrastructure-base:VERSION` -> _Base image for the infrastructure_
188
- - `harbor2.vantage6.ai/infrastructure/squid:VERSION` -> _Squid proxy image used for the whitelisting service_
189
196
  - `harbor2.vantage6.ai/infrastructure/alpine` -> _Alpine image used for vpn traffic forwarding_
190
- - `harbor2.vantage6.ai/infrastructure/vpn-client` -> _VPN image used to connect to the VPN_
191
- - `harbor2.vantage6.ai/infrastructure/vpn-configurator` -> _VPN image used for initialization_
192
- - `harbor2.vantage6.ai/infrastructure/ssh-tunnel` -> _SSH tunnel image used for connecting algorithms to external services_
193
197
 
194
198
  And finally there are some images released for algorithm development:
195
199
 
@@ -0,0 +1,84 @@
1
+ tests_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ tests_cli/test_client_script.py,sha256=_Wf8nKEfq6HEnfUQtwZvyICEmEa1TngyI_orPRQ7ZNQ,683
3
+ tests_cli/test_example.py,sha256=0fw_v-lgZEacshWSDwLNyLMA1_xc48bKUGM3ll-n1L0,146
4
+ tests_cli/test_node_cli.py,sha256=jM-nZkcvdEwwHVgQi8C7cYAbTJOzVmFl60MFXYVH9ig,16798
5
+ tests_cli/test_server_cli.py,sha256=i0XBybUPn0_ACOHBi8d6vFETut7szz3Zt8ttmZhWVPc,6545
6
+ tests_cli/test_wizard.py,sha256=ds2gJeBasQ06-nzqsPSSxrj-COe4pCLPgqrlBVkCXkw,5021
7
+ vantage6/cli/__build__,sha256=NRNaqmzCOJG0DLPzeMU6F6ESchDOYOElzPA-_P2uxFg,2
8
+ vantage6/cli/__init__.py,sha256=ZXbeQ_-g2-M4XYteWZkoO5lMFYhqjm5doQgGy1fq8i0,125
9
+ vantage6/cli/_version.py,sha256=iDijqhgy5jzZ0LAyzW1LlXeeuMcHWMyg9D8xbXtV7Ck,696
10
+ vantage6/cli/cli.py,sha256=EeMfvBABKYauujZDR09IjpBgtbBg1sS1iJPuzre-AqM,6474
11
+ vantage6/cli/config.py,sha256=Jqe3VcvoxPrFlvw7cuKt4-5oyL0YTZXvpNsqPybSAYk,7973
12
+ vantage6/cli/configuration_manager.py,sha256=FV0RmiKmaGI2le8coUA4R5NTFUgPeph5XimxqgDhIsg,3332
13
+ vantage6/cli/configuration_wizard.py,sha256=6UB4YwBlCjRT88bHgp6VeDFgQklAM2g2WXS10qmyhnY,18912
14
+ vantage6/cli/globals.py,sha256=CxpxWXBLvAJR7st4-iRh95xbBZrn3qxKdbW3_7wmKY8,2245
15
+ vantage6/cli/utils.py,sha256=mhCtsxCf8nOCaW3layW8aJGI0XAjGs0IuheCNj3o-IA,4397
16
+ vantage6/cli/algorithm/create.py,sha256=kRT1BlBcb0fDaB2Q988WxtA6EyAZmOW5QoU2uhbwBIo,2075
17
+ vantage6/cli/algorithm/generate_algorithm_json.py,sha256=zwWtPVx_J2QtGHW9GnR3X95l0e3aP-zNASM6ADiVnrM,19983
18
+ vantage6/cli/algorithm/update.py,sha256=WwAfTnq0kTOgePUsBzGoo1AJQqGMn82E9Bjk1wf61CQ,1338
19
+ vantage6/cli/algostore/attach.py,sha256=0WzLnKigJAelPpL5EaWcnRuUyQzMSofrrZfEzwDIvSw,311
20
+ vantage6/cli/algostore/files.py,sha256=r89VRixK_K-c44qseq58Aa2Dqf1wEf8yompQRN5AVu4,580
21
+ vantage6/cli/algostore/list.py,sha256=xBCnwGbuWY_rrx6jrFX8JVAEFXh8GwqwicqpxMiaSa8,418
22
+ vantage6/cli/algostore/new.py,sha256=ekqZ7_qCUtWs0QU6coo34thfkksHbCAYAD8nr0SKgO4,2147
23
+ vantage6/cli/algostore/remove.py,sha256=ieQLpo2ZpblpPxaeRXdB7IO0DzTtURnveYQltW7TTSw,1643
24
+ vantage6/cli/algostore/start.py,sha256=fse7beckD5bWtjQLQ8xRA_jeqsxM0cZjZo2_S0rYvSM,3160
25
+ vantage6/cli/algostore/stop.py,sha256=Fqoj7W7NOW5nkvND5J2oSMqMD8knfD93fraN9KBSCmg,1836
26
+ vantage6/cli/common/decorator.py,sha256=KF3uFjmn00qtTSD90BLczaX-gqvlt2Kud4PJGm7P4jU,3627
27
+ vantage6/cli/common/start.py,sha256=6L_6NraS1U9Gj_UiQYkg4UE4bwjQkCQdTigb1L6fCm4,15277
28
+ vantage6/cli/common/stop.py,sha256=CxW5OFZT7eacpln9J05ble2Q3xHCqyxYqJ00rPUbrVo,2645
29
+ vantage6/cli/common/utils.py,sha256=z9NX_2hft2bkIvilnrtLV92ui62pIEhj-f3gCJcjcQ4,4970
30
+ vantage6/cli/context/__init__.py,sha256=88LSA3h_v-t8PzjCrzl0vw1jkOdNUNr3nPo-L2e9onc,2684
31
+ vantage6/cli/context/algorithm_store.py,sha256=qLNbc94q3EpVGUgGuNDObCPK3QfyKveKwmfolLBq8sE,3976
32
+ vantage6/cli/context/base_server.py,sha256=paKSzNrKWD-J6eakHAtGELk2cD05A8NqoCAuQfF7c2s,2972
33
+ vantage6/cli/context/node.py,sha256=GuBfarE1wqtU8S7Ww-DS0H8dJuLxBxqPZrdIwKBpGdU,7123
34
+ vantage6/cli/context/server.py,sha256=vPcPtyHntdDXkOYcel2mb0JZbihnmFgizYMG8ajjnHg,4639
35
+ vantage6/cli/dev/create.py,sha256=WBBPG9jyNvPQVb1koHX9y3VKQmlijlq-QBsYYzqqojg,21207
36
+ vantage6/cli/dev/remove.py,sha256=kjmOqkMO0ZU5F-3KgQ05VlfQQCS5Ta6yLY32DU0rH7k,3917
37
+ vantage6/cli/dev/data/km_dataset.csv,sha256=OrYF2ympb2QndiUOX_nTFGGB1HbAp2eOvZzrQ_PqJs4,31283
38
+ vantage6/cli/node/attach.py,sha256=cmouPrkbIbg21_wlAe-L-ecmrKVxiDkzGmEtRaCnKQY,276
39
+ vantage6/cli/node/clean.py,sha256=uCty2GNuwoTybs1nIOygQLxtbleQ-rnnS6_4ieWVmCw,1199
40
+ vantage6/cli/node/create_private_key.py,sha256=iGLK8x1aOmeObq-vZxlveosiqx1R0myfjU64R5lR0ho,5005
41
+ vantage6/cli/node/files.py,sha256=V7bJeR8weX0Llpp6y9wQoNrRsvlotEE6e70aTJp9j6M,1331
42
+ vantage6/cli/node/list.py,sha256=_WZ8EBIEUlzFhVp3cR2MK5FUuQicMEZHhD8npMwKSpM,1664
43
+ vantage6/cli/node/new.py,sha256=D-zI20pneF8kmGZKTRj09IaMMsj7z2rhiGXegMZywik,2040
44
+ vantage6/cli/node/remove.py,sha256=5gylLyMa8LoavQNQv71JuwrTZN2rJwLrphl4Z0Fu6_8,3658
45
+ vantage6/cli/node/restart.py,sha256=bWx0n4tN8TWOy_o8lJkA7AR-H1UIbfAiPp93I5wXg1Y,3709
46
+ vantage6/cli/node/set_api_key.py,sha256=2kB8wveTy9_N8kX4huVhJhY86Ppd2BI8v-d7MRXQAdA,1877
47
+ vantage6/cli/node/start.py,sha256=M8fZUDDF42wO3gs8Wkik-8MhP0EslvIjOEBxem2rP4s,12220
48
+ vantage6/cli/node/stop.py,sha256=Hf5z2r6ttbW-DeU0cdHNXIJcgL-eIVRv8i7zZLo4foY,4159
49
+ vantage6/cli/node/version.py,sha256=X921xyIvIPYObPac2Si5msZ2tay5ySidnPWmGj1ilZw,1959
50
+ vantage6/cli/node/common/__init__.py,sha256=uCfV8BYLFI_PI1rwaFjQTOqq9-HeusdAIB9GnzLA0zU,2862
51
+ vantage6/cli/prometheus/monitoring_manager.py,sha256=tNvguLonbVILqCDnHRizef5NwKnEOV0DuzTx0Bhd2HU,4906
52
+ vantage6/cli/prometheus/prometheus.yml,sha256=Q4i9lVknITBodHUMgarRnEsXfXTNuSdI6a-9pW4YCoI,98
53
+ vantage6/cli/rabbitmq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ vantage6/cli/rabbitmq/definitions.py,sha256=CcS9jG7ZGB6LjzHQqZ2FliDurPItUvNSjHrOYptORZg,637
55
+ vantage6/cli/rabbitmq/queue_manager.py,sha256=KGDGHy4NBN8O9xhjzfI7mh65i9lOQIqQwrOFqvGFdHI,7545
56
+ vantage6/cli/rabbitmq/rabbitmq.config,sha256=LYAQAEoXaF472XeJDYXc9JfWSETIzPRIR2W-JB2i7fU,136
57
+ vantage6/cli/server/attach.py,sha256=q1E40nGCBEFUF1p94sZoU-Ud3OXAUy4-FJqcP7Gqa7U,322
58
+ vantage6/cli/server/files.py,sha256=MsnLaY91F2m49mm_FpVboFrSsZiEsu175KioN1alZfk,568
59
+ vantage6/cli/server/import_.py,sha256=jtgY0lvYTCsJQyzho8qXUsG9Mfw5m9DWtz0Ik7y0cE8,4568
60
+ vantage6/cli/server/list.py,sha256=HAwvjadhdNJi7L9rMmEwqI45IavPx-QA1ptlhEG7MK0,405
61
+ vantage6/cli/server/new.py,sha256=x7ii_5hUrXDXZOUIot6ghUjvzUjnaSTTVSaP28ojIBY,2474
62
+ vantage6/cli/server/remove.py,sha256=6tfKfVa5dYnZAKQYo_VlGZTuiugi7sh2F3U2cZ7mCmQ,1627
63
+ vantage6/cli/server/shell.py,sha256=8y-m_UjOxJ-vatWeSWT4AZZgpAC4bgTze0BJTk4qlOI,1595
64
+ vantage6/cli/server/start.py,sha256=eL2SoA1GdLgqM5QoAQIuPYVfXlvHaojSM6Zhl2cY8q0,2508
65
+ vantage6/cli/server/stop.py,sha256=Nhccrf4vfGkLpathFMwv3VqeIEDVIdaQnbdXGh2UBjY,1379
66
+ vantage6/cli/server/version.py,sha256=lqrPNKMbFO22W-NarJ2TjLd7fZT43hV-sFRbzMlBniw,1307
67
+ vantage6/cli/server/common/__init__.py,sha256=htv0mFYa4GhIHdzA2xqUUgKhHcMh09UQERlIjIgrwOM,2062
68
+ vantage6/cli/template/algo_store_config.j2,sha256=tdPdoZUlBQsFEUUDGWK65oSsIS29QxToT4n_zu9soQA,528
69
+ vantage6/cli/template/node_config.j2,sha256=Y5IA5tyG9X8MDMnJ7_ZlMVMCIA6NkZOhwM_ykTOGT4g,784
70
+ vantage6/cli/template/server_config.j2,sha256=K7svQM6HTmMrlKPVW9cbNPloH7LicBoLdIEiarD6CP8,765
71
+ vantage6/cli/template/server_import_config.j2,sha256=eVoQnXfP5IejzlAYiu5GikPibMpBVrxpw-TX0Obi4J0,1782
72
+ vantage6/cli/test/client_script.py,sha256=AHQ4fhzbtD-VcJAm0rxUDteepXNa4Bef9SKWnzobTd0,4825
73
+ vantage6/cli/test/feature_tester.py,sha256=AsZam91KqaAo_yIFxyZ5Hmy1ZPw83d02BDyO4TzKFQo,2631
74
+ vantage6/cli/test/integration_test.py,sha256=MctR_t-WEyxzFpMdc6ByTcX1BQglZiT5-CIOQXTBBWo,4034
75
+ vantage6/cli/test/algo_test_scripts/algo_test_arguments.py,sha256=HIKAhJ5zKkWMGXpCb_KLukbcwbyeMK5j3wcqubalbyM,791
76
+ vantage6/cli/test/algo_test_scripts/algo_test_script.py,sha256=jfzXPmpL0HlE_eq1jXLV3HuZgh_aV-ZOaawHcYIuwQE,2741
77
+ vantage6/cli/test/common/diagnostic_runner.py,sha256=5-KgspYW0PncO_t_TrQzd_GSOXVwH-7bIVv-IHOxwQM,6598
78
+ vantage6/cli/use/context.py,sha256=mEtOfbuLtYQlRh-ypif24WtOwgpcvXObX310mmXIkWY,1362
79
+ vantage6/cli/use/namespace.py,sha256=MOd9H3GJwZ0cho0mmlHTRlGPLoQEiSnZIFDsFsvYw4Q,1643
80
+ vantage6-5.0.0a29.dist-info/METADATA,sha256=fNk0o5hF7V6NS5PJVtO3A2Nwk2L45eVvzKX3tfv9U_I,10688
81
+ vantage6-5.0.0a29.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
82
+ vantage6-5.0.0a29.dist-info/entry_points.txt,sha256=YFBvwjxoeAGxYyPC-YevEgOBBYRGaXkS6jiOGGCLNy0,157
83
+ vantage6-5.0.0a29.dist-info/top_level.txt,sha256=CYDIBS8jEfFq5YCs_Fuit54K9-3wdosZppTrsymIoUk,19
84
+ vantage6-5.0.0a29.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.45.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5