frogml-cli 0.0.3__py3-none-any.whl → 0.0.5__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.
- frogml_cli/__init__.py +1 -1
- frogml_cli/commands/alerts/alerts_commnad_group.py +1 -1
- frogml_cli/commands/alerts/register/_logic.py +15 -11
- frogml_cli/commands/audience/_logic/config/v1/audience_config.py +1 -0
- frogml_cli/commands/automations/automations_commands_group.py +1 -1
- frogml_cli/commands/automations/register/_logic.py +6 -6
- frogml_cli/commands/automations/register/ui.py +4 -4
- frogml_cli/commands/config/add/ui.py +1 -0
- frogml_cli/commands/feature_store/feature_store_command_group.py +1 -1
- frogml_cli/commands/feature_store/register/_logic.py +17 -17
- frogml_cli/commands/feature_store/register/ui.py +7 -7
- frogml_cli/commands/models/build/_logic/client_logs/cli_phase_run_handler.py +1 -1
- frogml_cli/commands/models/build/_logic/client_logs/logger.py +2 -2
- frogml_cli/commands/models/build/_logic/util/step_decorator.py +1 -1
- frogml_cli/commands/models/delete/_logic.py +9 -7
- frogml_cli/commands/models/delete/ui.py +10 -3
- frogml_cli/commands/models/deployments/deploy/_logic/local_deployment.py +1 -1
- frogml_cli/commands/models/init/ui.py +4 -2
- frogml_cli/commands/models/list/_logic.py +4 -3
- frogml_cli/commands/models/list/ui.py +13 -7
- frogml_cli/commands/models/list_models/_logic.py +8 -6
- frogml_cli/commands/models/list_models/ui.py +15 -7
- frogml_cli/commands/models/metadata/_logic.py +7 -6
- frogml_cli/commands/models/metadata/ui.py +8 -4
- frogml_cli/inner/file_registry.py +1 -1
- {frogml_cli-0.0.3.dist-info → frogml_cli-0.0.5.dist-info}/METADATA +2 -2
- {frogml_cli-0.0.3.dist-info → frogml_cli-0.0.5.dist-info}/RECORD +29 -29
- {frogml_cli-0.0.3.dist-info → frogml_cli-0.0.5.dist-info}/WHEEL +0 -0
- {frogml_cli-0.0.3.dist-info → frogml_cli-0.0.5.dist-info}/entry_points.txt +0 -0
frogml_cli/__init__.py
CHANGED
@@ -7,7 +7,7 @@ from frogml_cli.commands.alerts.register.ui import register_channel
|
|
7
7
|
|
8
8
|
@click.group(
|
9
9
|
name="alerts",
|
10
|
-
help="Commands for interacting with
|
10
|
+
help="Commands for interacting with JFrogML alerts System",
|
11
11
|
)
|
12
12
|
def alerts_commands_group():
|
13
13
|
pass
|
@@ -5,29 +5,34 @@ from typing import List
|
|
5
5
|
from frogml.core.clients.alerts_registry import AlertingRegistryClient
|
6
6
|
from frogml.core.clients.alerts_registry.channel import Channel
|
7
7
|
|
8
|
-
from frogml_cli.inner.file_registry import
|
8
|
+
from frogml_cli.inner.file_registry import (
|
9
|
+
extract_class_objects,
|
10
|
+
list_frogml_python_files,
|
11
|
+
)
|
9
12
|
from frogml_cli.inner.tools.cli_tools import ask_yesno
|
10
13
|
from frogml_cli.tools.utils import frogml_spinner
|
11
14
|
|
12
15
|
FROGML_alerts_DELIMITER = "----------------------------------------"
|
13
16
|
|
14
17
|
|
15
|
-
def _register_channels(
|
18
|
+
def _register_channels(frogml_python_files, alerts_client, force):
|
16
19
|
"""
|
17
20
|
Register Channels
|
18
21
|
|
19
22
|
Args:
|
20
|
-
|
23
|
+
frogml_python_files: a list of python files containing frogml package imports
|
21
24
|
alerts_client: AlertingRegistryClient alerts service client
|
22
25
|
force: boolean determining if to force register all encountered Channel objects
|
23
26
|
"""
|
24
27
|
with frogml_spinner(
|
25
28
|
begin_text="Looking for channels to register", print_callback=print
|
26
29
|
):
|
27
|
-
|
30
|
+
frogml_channels: List[Channel] = extract_class_objects(
|
31
|
+
frogml_python_files, Channel
|
32
|
+
)
|
28
33
|
|
29
|
-
print(f"👀 Found {len(
|
30
|
-
for channel, source_file_path in
|
34
|
+
print(f"👀 Found {len(frogml_channels)} Channels")
|
35
|
+
for channel, source_file_path in frogml_channels:
|
31
36
|
channel_id, existing_channel = alerts_client.get_alerting_channel(channel.name)
|
32
37
|
if existing_channel:
|
33
38
|
if ask_yesno(
|
@@ -53,20 +58,19 @@ def execute_register_channel(path: Path, force: bool):
|
|
53
58
|
path = Path(path)
|
54
59
|
|
55
60
|
if path.is_file():
|
56
|
-
|
61
|
+
frogml_python_files = [(str(path), os.path.abspath(path))]
|
57
62
|
elif Path.is_dir(path):
|
58
63
|
with frogml_spinner(
|
59
64
|
begin_text="Recursively looking for python files in input dir",
|
60
65
|
print_callback=print,
|
61
66
|
) as sp:
|
62
|
-
|
63
|
-
print(
|
67
|
+
frogml_python_files = list_frogml_python_files(path, sp)
|
68
|
+
print(frogml_python_files)
|
64
69
|
print(sp)
|
65
|
-
pass
|
66
70
|
|
67
71
|
alerts_client = AlertingRegistryClient()
|
68
72
|
_register_channels(
|
69
|
-
|
73
|
+
frogml_python_files=frogml_python_files,
|
70
74
|
alerts_client=alerts_client,
|
71
75
|
force=force,
|
72
76
|
)
|
@@ -20,6 +20,7 @@ class AudienceConfig:
|
|
20
20
|
def to_audience_route_entry(self, index: int = 0) -> AudienceRoutesEntry:
|
21
21
|
return AudienceRoutesEntry(
|
22
22
|
audience_id=self.id,
|
23
|
+
audience_name=self.name,
|
23
24
|
order=index + 1,
|
24
25
|
routes=[route.to_route_api() for route in self.routes],
|
25
26
|
)
|
@@ -17,7 +17,7 @@ AUTOMATION = "automation"
|
|
17
17
|
|
18
18
|
@click.group(
|
19
19
|
name="automations",
|
20
|
-
help="Commands for interacting with
|
20
|
+
help="Commands for interacting with JFrogML Automations",
|
21
21
|
)
|
22
22
|
def automations_commands_group():
|
23
23
|
# Click commands group injection
|
@@ -10,23 +10,23 @@ from frogml_cli.tools.utils import frogml_spinner
|
|
10
10
|
DELIMITER = "----------------------------------------"
|
11
11
|
|
12
12
|
|
13
|
-
def register_automations(
|
13
|
+
def register_automations(frogml_python_files: List[str], force: bool):
|
14
14
|
"""
|
15
15
|
Register Automation Entities Objects
|
16
16
|
|
17
17
|
Args:
|
18
|
-
|
18
|
+
frogml_python_files: a list of python files containing frogml package imports
|
19
19
|
force: to force
|
20
20
|
"""
|
21
21
|
with frogml_spinner(
|
22
22
|
begin_text="Finding Automations to register", print_callback=print
|
23
23
|
):
|
24
|
-
|
25
|
-
|
24
|
+
frogml_automations: List[Automation] = extract_class_objects(
|
25
|
+
frogml_python_files, Automation
|
26
26
|
)
|
27
27
|
client = AutomationsManagementClient()
|
28
|
-
print(f"Found {len(
|
29
|
-
for automation, source_file_path in
|
28
|
+
print(f"Found {len(frogml_automations)} Automations")
|
29
|
+
for automation, source_file_path in frogml_automations:
|
30
30
|
existing_automation = client.get_automation_by_name(automation.name)
|
31
31
|
if existing_automation:
|
32
32
|
if ask_yesno(
|
@@ -4,7 +4,7 @@ from pathlib import Path
|
|
4
4
|
import click
|
5
5
|
|
6
6
|
from frogml_cli.commands.automations.register._logic import register_automations
|
7
|
-
from frogml_cli.inner.file_registry import
|
7
|
+
from frogml_cli.inner.file_registry import list_frogml_python_files
|
8
8
|
from frogml_cli.inner.tools.cli_tools import FrogMLCommand
|
9
9
|
from frogml_cli.tools.utils import frogml_spinner
|
10
10
|
|
@@ -33,12 +33,12 @@ from frogml_cli.tools.utils import frogml_spinner
|
|
33
33
|
def register(path: Path, force: bool, **kwargs):
|
34
34
|
path = Path(path) if path else Path.cwd()
|
35
35
|
if path.is_file():
|
36
|
-
|
36
|
+
frogml_python_files = [(str(path), os.path.abspath(path))]
|
37
37
|
elif Path.is_dir(path):
|
38
38
|
with frogml_spinner(
|
39
39
|
begin_text="Recursively looking for python files in input dir",
|
40
40
|
print_callback=print,
|
41
41
|
) as sp:
|
42
|
-
|
42
|
+
frogml_python_files = list_frogml_python_files(path, sp)
|
43
43
|
|
44
|
-
register_automations(
|
44
|
+
register_automations(frogml_python_files, force)
|
@@ -12,7 +12,7 @@ from frogml_cli.commands.feature_store.trigger.ui import trigger_feature_set
|
|
12
12
|
|
13
13
|
@click.group(
|
14
14
|
name="features",
|
15
|
-
help="Commands for interacting with
|
15
|
+
help="Commands for interacting with JFrogML Feature Store",
|
16
16
|
)
|
17
17
|
def feature_store_commands_group():
|
18
18
|
# Click commands group injection
|
@@ -32,7 +32,7 @@ DELIMITER = "----------------------------------------"
|
|
32
32
|
|
33
33
|
|
34
34
|
def _register_entities(
|
35
|
-
|
35
|
+
frogml_python_files: List[Tuple[str, str]],
|
36
36
|
registry: FeatureRegistryClient,
|
37
37
|
force: bool,
|
38
38
|
):
|
@@ -40,19 +40,19 @@ def _register_entities(
|
|
40
40
|
Register Feature Store Entity Objects
|
41
41
|
|
42
42
|
Args:
|
43
|
-
|
43
|
+
frogml_python_files: a list of python files containing frogml package imports
|
44
44
|
registry: FeatureRegistryClient
|
45
45
|
force: boolean determining if to force register all encountered Entity objects
|
46
46
|
"""
|
47
47
|
with frogml_spinner(
|
48
48
|
begin_text="Finding Entities to register", print_callback=print
|
49
49
|
):
|
50
|
-
|
51
|
-
|
50
|
+
frogml_entities: List[Tuple[Entity, str]] = extract_class_objects(
|
51
|
+
frogml_python_files, Entity
|
52
52
|
)
|
53
53
|
|
54
|
-
print(f"👀 Found {len(
|
55
|
-
for entity, source_file_path in
|
54
|
+
print(f"👀 Found {len(frogml_entities)} Entities")
|
55
|
+
for entity, source_file_path in frogml_entities:
|
56
56
|
existing_entity = registry.get_entity_by_name(entity.name)
|
57
57
|
if existing_entity:
|
58
58
|
if ask_yesno(
|
@@ -73,7 +73,7 @@ def _register_entities(
|
|
73
73
|
|
74
74
|
|
75
75
|
def _register_data_sources(
|
76
|
-
|
76
|
+
frogml_python_files: List[Tuple[str, str]],
|
77
77
|
registry: FeatureRegistryClient,
|
78
78
|
force: bool,
|
79
79
|
no_validation: bool,
|
@@ -83,7 +83,7 @@ def _register_data_sources(
|
|
83
83
|
Register Feature Store Data Source Objects
|
84
84
|
|
85
85
|
Args:
|
86
|
-
|
86
|
+
frogml_python_files: a list of python files containing frogml package imports
|
87
87
|
registry: FeatureRegistryClient
|
88
88
|
force: boolean determining if to force register all encountered Data Source objects
|
89
89
|
no_validation: whether to validate entities
|
@@ -92,12 +92,12 @@ def _register_data_sources(
|
|
92
92
|
with frogml_spinner(
|
93
93
|
begin_text="Finding Data Sources to register", print_callback=print
|
94
94
|
):
|
95
|
-
|
96
|
-
|
95
|
+
frogml_sources: List[Tuple[BaseSource, str]] = extract_class_objects(
|
96
|
+
frogml_python_files, BaseSource
|
97
97
|
)
|
98
98
|
|
99
|
-
print(f"👀 Found {len(
|
100
|
-
for data_source, source_file_path in
|
99
|
+
print(f"👀 Found {len(frogml_sources)} Data Sources")
|
100
|
+
for data_source, source_file_path in frogml_sources:
|
101
101
|
validation_failed = False
|
102
102
|
artifact_url: Optional[str] = None
|
103
103
|
|
@@ -166,7 +166,7 @@ def _handle_data_source_validation(
|
|
166
166
|
|
167
167
|
|
168
168
|
def _register_features_sets(
|
169
|
-
|
169
|
+
frogml_python_files: List[Tuple[str, str]],
|
170
170
|
registry: FeatureRegistryClient,
|
171
171
|
force: bool,
|
172
172
|
git_commit: str,
|
@@ -178,7 +178,7 @@ def _register_features_sets(
|
|
178
178
|
Register Feature Store Feature Set Objects
|
179
179
|
|
180
180
|
Args:
|
181
|
-
|
181
|
+
frogml_python_files: a list of python files containing frogml package imports
|
182
182
|
registry: FeatureRegistryClient
|
183
183
|
force: boolean determining if to force register all encountered Feature Set objects
|
184
184
|
git_commit: the git commit of the parent folder
|
@@ -188,11 +188,11 @@ def _register_features_sets(
|
|
188
188
|
with frogml_spinner(
|
189
189
|
begin_text="Finding Feature Sets to register", print_callback=print
|
190
190
|
):
|
191
|
-
|
191
|
+
frogml_feature_sets = extract_class_objects(frogml_python_files, BaseFeatureSet)
|
192
192
|
|
193
|
-
print(f"👀 Found {len(
|
193
|
+
print(f"👀 Found {len(frogml_feature_sets)} Feature Set(s)")
|
194
194
|
|
195
|
-
for featureset, source_file_path in
|
195
|
+
for featureset, source_file_path in frogml_feature_sets:
|
196
196
|
featureset = cast(BaseFeatureSet, featureset)
|
197
197
|
existing_feature_set: ProtoGetFeatureSetByNameResponse = (
|
198
198
|
registry.get_feature_set_by_name(featureset.name)
|
@@ -10,7 +10,7 @@ from frogml_cli.commands.feature_store.register._logic import (
|
|
10
10
|
_register_entities,
|
11
11
|
_register_features_sets,
|
12
12
|
)
|
13
|
-
from frogml_cli.inner.file_registry import
|
13
|
+
from frogml_cli.inner.file_registry import list_frogml_python_files
|
14
14
|
from frogml_cli.inner.tools.cli_tools import FrogMLCommand
|
15
15
|
from frogml_cli.tools.utils import frogml_spinner
|
16
16
|
|
@@ -65,7 +65,7 @@ def register_fs_objects(
|
|
65
65
|
fs_validation_ds_limit: Optional[int],
|
66
66
|
**kwargs,
|
67
67
|
):
|
68
|
-
|
68
|
+
frogml_python_files: List[Tuple[str, str]]
|
69
69
|
|
70
70
|
if not path:
|
71
71
|
path = Path.cwd()
|
@@ -73,13 +73,13 @@ def register_fs_objects(
|
|
73
73
|
path = Path(path)
|
74
74
|
|
75
75
|
if path.is_file():
|
76
|
-
|
76
|
+
frogml_python_files = [(str(path), os.path.abspath(path))]
|
77
77
|
elif Path.is_dir(path):
|
78
78
|
with frogml_spinner(
|
79
79
|
begin_text="Recursively looking for python files in input dir",
|
80
80
|
print_callback=print,
|
81
81
|
) as sp:
|
82
|
-
|
82
|
+
frogml_python_files = list_frogml_python_files(path, sp)
|
83
83
|
|
84
84
|
try:
|
85
85
|
import git
|
@@ -90,10 +90,10 @@ def register_fs_objects(
|
|
90
90
|
git_commit = None
|
91
91
|
|
92
92
|
registry_client = FeatureRegistryClient()
|
93
|
-
_register_entities(
|
93
|
+
_register_entities(frogml_python_files, registry_client, force)
|
94
94
|
|
95
95
|
_register_data_sources(
|
96
|
-
|
96
|
+
frogml_python_files,
|
97
97
|
registry_client,
|
98
98
|
force,
|
99
99
|
no_validation,
|
@@ -101,7 +101,7 @@ def register_fs_objects(
|
|
101
101
|
)
|
102
102
|
|
103
103
|
_register_features_sets(
|
104
|
-
|
104
|
+
frogml_python_files,
|
105
105
|
registry_client,
|
106
106
|
force,
|
107
107
|
git_commit,
|
@@ -18,7 +18,7 @@ from .utils import zip_logs
|
|
18
18
|
class CLIPhaseRunHandler(PhaseRunHandler):
|
19
19
|
BUILD_IN_PROGRESS_FORMAT = "Build phase in progress: {}"
|
20
20
|
BUILD_FINISHED_FORMAT = "Phase successfully finished: {} after {} seconds"
|
21
|
-
KEYBOARD_INTERRUPT_FORMAT = "\n{color}Stopping
|
21
|
+
KEYBOARD_INTERRUPT_FORMAT = "\n{color}Stopping JFrogML build (ctrl-c)"
|
22
22
|
BUILD_FAILURE_FORMAT = "Build phase failed: {} after {} seconds"
|
23
23
|
PIPELINE_ERROR = "\n{color}{ex}"
|
24
24
|
SPINNER_FINISH = "✅"
|
@@ -10,7 +10,7 @@ from pathlib import Path
|
|
10
10
|
from frogml.core.inner.build_config.build_config_v1 import BuildConfigV1
|
11
11
|
from frogml.core.inner.build_logic.constants.host_resource import HOST_FROGML_HIDDEN_FOLDER
|
12
12
|
|
13
|
-
from frogml_cli import __version__ as
|
13
|
+
from frogml_cli import __version__ as frogml_cli_version
|
14
14
|
from frogml_cli.inner.tools.logger import setup_frogml_logger
|
15
15
|
from frogml_cli.inner.tools.logger.logger import (
|
16
16
|
BUILD_LOCAL_FILE_HANDLER_NAME,
|
@@ -84,5 +84,5 @@ def setup_logger(
|
|
84
84
|
|
85
85
|
def log_system_information(destination: Path):
|
86
86
|
(destination / "python_version").write_text(sys.version)
|
87
|
-
(destination / "
|
87
|
+
(destination / "frogml_cli_version").write_text(frogml_cli_version)
|
88
88
|
(destination / "os_detail").write_text(platform.platform())
|
@@ -48,7 +48,7 @@ def build_failure_handler():
|
|
48
48
|
|
49
49
|
def cleaning_up_after_build(step: Step):
|
50
50
|
if os.getenv("QWAK_DEBUG") != "true":
|
51
|
-
step.build_logger.debug("Removing
|
51
|
+
step.build_logger.debug("Removing FrogML temp artifacts directory")
|
52
52
|
shutil.rmtree(step.context.host_temp_local_build_dir, ignore_errors=True)
|
53
53
|
|
54
54
|
|
@@ -1,18 +1,20 @@
|
|
1
|
+
from frogml._proto.qwak.models.models_pb2 import DeleteModelResponse
|
1
2
|
from frogml._proto.qwak.projects.projects_pb2 import GetProjectResponse
|
3
|
+
from frogml.core.clients.model_group_management import ModelGroupManagementClient
|
2
4
|
from frogml.core.clients.model_management import ModelsManagementClient
|
3
|
-
from frogml.core.clients.project.client import ProjectsManagementClient
|
4
5
|
from frogml.core.exceptions import FrogmlException
|
5
6
|
|
6
7
|
|
7
|
-
def execute_model_delete(project_key: str, model_id: str):
|
8
|
-
|
9
|
-
|
8
|
+
def execute_model_delete(project_key: str, model_id: str) -> DeleteModelResponse:
|
9
|
+
model_group_response: GetProjectResponse = (
|
10
|
+
ModelGroupManagementClient().get_model_group(model_group_name=project_key)
|
10
11
|
)
|
11
12
|
is_model_exists: bool = any(
|
12
|
-
m.model_id == model_id for m in
|
13
|
+
m.model_id == model_id for m in model_group_response.project.models
|
13
14
|
)
|
14
15
|
if not is_model_exists:
|
15
16
|
raise FrogmlException(f"No such model {model_id} for project {project_key}")
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
model_group_id: str = model_group_response.project.spec.project_id
|
19
|
+
|
20
|
+
return ModelsManagementClient().delete_model(model_group_id, model_id)
|
@@ -1,4 +1,7 @@
|
|
1
|
+
from typing import Literal
|
2
|
+
|
1
3
|
import click
|
4
|
+
from frogml._proto.qwak.models.models_pb2 import DeleteModelResponse
|
2
5
|
|
3
6
|
from frogml_cli.commands.models.delete._logic import execute_model_delete
|
4
7
|
from frogml_cli.commands.ui_tools import output_as_json
|
@@ -10,6 +13,7 @@ from frogml_cli.inner.tools.cli_tools import FrogMLCommand
|
|
10
13
|
@click.option("--model-id", metavar="NAME", required=True, help="Model name")
|
11
14
|
@click.option(
|
12
15
|
"--format",
|
16
|
+
"output_format",
|
13
17
|
default="text",
|
14
18
|
show_default=True,
|
15
19
|
type=click.Choice(["text", "json"], case_sensitive=True),
|
@@ -17,9 +21,12 @@ from frogml_cli.inner.tools.cli_tools import FrogMLCommand
|
|
17
21
|
required=False,
|
18
22
|
help="The formatting style for commands output (choose from text, json)",
|
19
23
|
)
|
20
|
-
def model_delete(
|
21
|
-
|
22
|
-
|
24
|
+
def model_delete(
|
25
|
+
project_key: str, model_id: str, output_format: Literal["text", "json"]
|
26
|
+
):
|
27
|
+
response: DeleteModelResponse = execute_model_delete(project_key, model_id)
|
28
|
+
|
29
|
+
if output_format == "json":
|
23
30
|
output_as_json(response)
|
24
31
|
else:
|
25
32
|
print(f"Model deleted\nmodel id : {model_id}")
|
@@ -170,7 +170,7 @@ def _docker_login(docker_client):
|
|
170
170
|
)
|
171
171
|
|
172
172
|
except Exception as e:
|
173
|
-
raise FrogmlException(f"Failed to login to
|
173
|
+
raise FrogmlException(f"Failed to login to FrogML's container registry: {e}")
|
174
174
|
|
175
175
|
|
176
176
|
def _get_aws_credentials():
|
@@ -30,7 +30,7 @@ MODELS_INIT_EXAMPLE_CHOICES: List[str] = get_models_init_example_choices()
|
|
30
30
|
metavar="NAME",
|
31
31
|
required=False,
|
32
32
|
type=click.Choice(MODELS_INIT_EXAMPLE_CHOICES, case_sensitive=True),
|
33
|
-
help=f"Generate a fully functioning example of a
|
33
|
+
help=f"Generate a fully functioning example of a FrogML based model. Options: {' / '.join(MODELS_INIT_EXAMPLE_CHOICES)}",
|
34
34
|
)
|
35
35
|
@click.argument("uri", metavar="URI", required=True)
|
36
36
|
def model_init(
|
@@ -61,5 +61,7 @@ def model_init(
|
|
61
61
|
try:
|
62
62
|
initialize_model_structure(uri, template, logger, **template_args)
|
63
63
|
except Exception as e:
|
64
|
-
logger.error(
|
64
|
+
logger.error(
|
65
|
+
f"Failed to initialize a FrogML model structure. Error reason:\n{e}"
|
66
|
+
)
|
65
67
|
exit(1)
|
@@ -1,5 +1,6 @@
|
|
1
|
-
from frogml.
|
1
|
+
from frogml._proto.qwak.projects.projects_pb2 import GetProjectResponse
|
2
|
+
from frogml.core.clients.model_group_management.client import ModelGroupManagementClient
|
2
3
|
|
3
4
|
|
4
|
-
def execute_models_list(project_key: str):
|
5
|
-
return
|
5
|
+
def execute_models_list(project_key: str) -> GetProjectResponse:
|
6
|
+
return ModelGroupManagementClient().get_model_group(model_group_name=project_key)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from datetime import datetime
|
2
|
+
from typing import Literal
|
2
3
|
|
3
4
|
import click
|
4
5
|
from frogml._proto.qwak.projects.projects_pb2 import GetProjectResponse
|
@@ -25,6 +26,7 @@ def parse_model(model):
|
|
25
26
|
@click.option("--project-key", metavar="NAME", required=True, help="JFrog project key")
|
26
27
|
@click.option(
|
27
28
|
"--format",
|
29
|
+
"output_format",
|
28
30
|
default="text",
|
29
31
|
show_default=True,
|
30
32
|
type=click.Choice(["text", "json"], case_sensitive=True),
|
@@ -32,10 +34,14 @@ def parse_model(model):
|
|
32
34
|
required=False,
|
33
35
|
help="The formatting style for commands output (choose from text, json)",
|
34
36
|
)
|
35
|
-
def model_list(project_key: str,
|
36
|
-
|
37
|
-
columns = ["Model id", "Display name", "Creation date", "Last updated"]
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
37
|
+
def model_list(project_key: str, output_format: Literal["text", "json"]):
|
38
|
+
get_model_group_response: GetProjectResponse = execute_models_list(project_key)
|
39
|
+
columns: list[str] = ["Model id", "Display name", "Creation date", "Last updated"]
|
40
|
+
|
41
|
+
if output_format == "json":
|
42
|
+
output_as_json(get_model_group_response)
|
43
|
+
|
44
|
+
else: # output_format == "text"
|
45
|
+
output_as_table(
|
46
|
+
get_model_group_response.project.models, parse_model, headers=columns
|
47
|
+
)
|
@@ -1,11 +1,13 @@
|
|
1
|
+
from frogml._proto.qwak.models.models_pb2 import ListModelsResponse
|
1
2
|
from frogml._proto.qwak.projects.projects_pb2 import GetProjectResponse
|
3
|
+
from frogml.core.clients.model_group_management import ModelGroupManagementClient
|
2
4
|
from frogml.core.clients.model_management.client import ModelsManagementClient
|
3
|
-
from frogml.core.clients.project.client import ProjectsManagementClient
|
4
5
|
|
5
6
|
|
6
|
-
def list_models(project_key: str):
|
7
|
-
|
8
|
-
|
7
|
+
def list_models(project_key: str) -> ListModelsResponse:
|
8
|
+
model_group_response: GetProjectResponse = (
|
9
|
+
ModelGroupManagementClient().get_model_group(model_group_name=project_key)
|
9
10
|
)
|
10
|
-
|
11
|
-
|
11
|
+
model_group_id: str = model_group_response.project.spec.project_id
|
12
|
+
|
13
|
+
return ModelsManagementClient().list_models(model_group_id)
|
@@ -1,12 +1,18 @@
|
|
1
|
+
from typing import Literal
|
2
|
+
|
1
3
|
import click
|
2
|
-
from frogml._proto.qwak.models.models_pb2 import
|
4
|
+
from frogml._proto.qwak.models.models_pb2 import (
|
5
|
+
DeploymentModelStatus,
|
6
|
+
ListModelsResponse,
|
7
|
+
Model,
|
8
|
+
)
|
3
9
|
|
4
10
|
from frogml_cli.commands.models.list_models._logic import list_models as _list_models
|
5
11
|
from frogml_cli.commands.ui_tools import output_as_json, output_as_table
|
6
12
|
from frogml_cli.inner.tools.cli_tools import FrogMLCommand
|
7
13
|
|
8
14
|
|
9
|
-
def parse_model(model):
|
15
|
+
def parse_model(model: Model) -> list[str]:
|
10
16
|
return [
|
11
17
|
model.model_id,
|
12
18
|
model.uuid,
|
@@ -31,6 +37,7 @@ def parse_model(model):
|
|
31
37
|
@click.option("--project-key", metavar="NAME", required=True, help="JFrog Project key")
|
32
38
|
@click.option(
|
33
39
|
"--format",
|
40
|
+
"output_format",
|
34
41
|
default="text",
|
35
42
|
show_default=True,
|
36
43
|
type=click.Choice(["text", "json"], case_sensitive=True),
|
@@ -38,9 +45,9 @@ def parse_model(model):
|
|
38
45
|
required=False,
|
39
46
|
help="The formatting style for command output (choose from text, json)",
|
40
47
|
)
|
41
|
-
def list_models(project_key,
|
42
|
-
model_list_result = _list_models(project_key)
|
43
|
-
columns = [
|
48
|
+
def list_models(project_key: str, output_format: Literal["text", "json"]):
|
49
|
+
model_list_result: ListModelsResponse = _list_models(project_key)
|
50
|
+
columns: list[str] = [
|
44
51
|
"Model id",
|
45
52
|
"Model UUID",
|
46
53
|
"Model Name",
|
@@ -54,7 +61,8 @@ def list_models(project_key, format, **kwargs):
|
|
54
61
|
"Branches",
|
55
62
|
"Deployment Status",
|
56
63
|
]
|
57
|
-
|
64
|
+
|
65
|
+
if output_format == "json":
|
58
66
|
output_as_json(model_list_result)
|
59
|
-
|
67
|
+
else: # output_format == "text"
|
60
68
|
output_as_table(model_list_result.models, parse_model, headers=columns)
|
@@ -1,12 +1,13 @@
|
|
1
|
+
from frogml._proto.qwak.models.models_pb2 import ListModelsMetadataResponse
|
1
2
|
from frogml._proto.qwak.projects.projects_pb2 import GetProjectResponse
|
3
|
+
from frogml.core.clients.model_group_management import ModelGroupManagementClient
|
2
4
|
from frogml.core.clients.model_management.client import ModelsManagementClient
|
3
|
-
from frogml.core.clients.project.client import ProjectsManagementClient
|
4
5
|
|
5
6
|
|
6
|
-
def list_models_metadata(project_key: str):
|
7
|
-
|
8
|
-
|
7
|
+
def list_models_metadata(project_key: str) -> ListModelsMetadataResponse:
|
8
|
+
model_group_response: GetProjectResponse = (
|
9
|
+
ModelGroupManagementClient().get_model_group(model_group_name=project_key)
|
9
10
|
)
|
10
|
-
|
11
|
+
model_group_id: str = model_group_response.project.spec.project_id
|
11
12
|
|
12
|
-
return ModelsManagementClient().list_models_metadata(
|
13
|
+
return ModelsManagementClient().list_models_metadata(model_group_id)
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import re
|
2
|
+
from typing import Literal
|
2
3
|
|
3
4
|
import click
|
5
|
+
from frogml._proto.qwak.models.models_pb2 import ListModelsMetadataResponse
|
4
6
|
from google.protobuf.json_format import MessageToDict
|
5
7
|
from tabulate import tabulate
|
6
8
|
|
@@ -45,6 +47,7 @@ def print_text_data(metadata):
|
|
45
47
|
@click.option("--project-key", metavar="NAME", required=True, help="JFrog Project key")
|
46
48
|
@click.option(
|
47
49
|
"--format",
|
50
|
+
"output_format",
|
48
51
|
default="text",
|
49
52
|
show_default=True,
|
50
53
|
type=click.Choice(["text", "json"], case_sensitive=True),
|
@@ -52,9 +55,10 @@ def print_text_data(metadata):
|
|
52
55
|
required=False,
|
53
56
|
help="The formatting style for command output (choose from text, json)",
|
54
57
|
)
|
55
|
-
def list_models_metadata(project_key,
|
56
|
-
model_list_result = _list_models_metadata(project_key)
|
57
|
-
|
58
|
+
def list_models_metadata(project_key: str, output_format: Literal["text", "json"]):
|
59
|
+
model_list_result: ListModelsMetadataResponse = _list_models_metadata(project_key)
|
60
|
+
|
61
|
+
if output_format == "json":
|
58
62
|
output_as_json(model_list_result)
|
59
|
-
|
63
|
+
else: # output_format == "text"
|
60
64
|
print_text_data(model_list_result)
|
@@ -8,7 +8,7 @@ from typing import List, Tuple
|
|
8
8
|
from yaspin.core import Yaspin
|
9
9
|
|
10
10
|
|
11
|
-
def
|
11
|
+
def list_frogml_python_files(path: Path, sp: Yaspin) -> List[Tuple[str, str]]:
|
12
12
|
"""
|
13
13
|
Helper function which finds python files with qwak imports in a given module
|
14
14
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: frogml-cli
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.5
|
4
4
|
Summary: Frogml CLI for frogml models
|
5
5
|
License: Apache-2.0
|
6
6
|
Keywords: mlops,ml,deployment,serving,model,jfrog
|
@@ -27,7 +27,7 @@ Requires-Dist: click (==8.1.8)
|
|
27
27
|
Requires-Dist: cloudpickle (==2.2.1) ; extra == "feature-store"
|
28
28
|
Requires-Dist: cookiecutter
|
29
29
|
Requires-Dist: croniter (==1.4.1)
|
30
|
-
Requires-Dist: frogml (>=1.1.
|
30
|
+
Requires-Dist: frogml (>=1.1.96)
|
31
31
|
Requires-Dist: frogml-inference (>=0.0.2,<0.0.3)
|
32
32
|
Requires-Dist: gitpython (>=2.1.0)
|
33
33
|
Requires-Dist: joblib (>=1.1.0,<2.0.0) ; extra == "batch" or extra == "feedback"
|
@@ -1,10 +1,10 @@
|
|
1
|
-
frogml_cli/__init__.py,sha256=
|
1
|
+
frogml_cli/__init__.py,sha256=6oEf8eciZ46o-Q7AeI0HhDhtV9_CBFVFUodbTi040HA,157
|
2
2
|
frogml_cli/cli.py,sha256=Gh-KPvBf_X243Cz2TGx_mWd4K4NgXcSmpBxZfrFQSkc,1585
|
3
3
|
frogml_cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
frogml_cli/commands/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
frogml_cli/commands/_logic/tools.py,sha256=uJOSfpifONXjFJjaHvm_7ivTs8K0PO56YoxhU0dktPU,239
|
6
6
|
frogml_cli/commands/alerts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
-
frogml_cli/commands/alerts/alerts_commnad_group.py,sha256=
|
7
|
+
frogml_cli/commands/alerts/alerts_commnad_group.py,sha256=8G2RdhEfiMoQ4RkhwJxFVUXWekleODnsouIvZnW27Do,499
|
8
8
|
frogml_cli/commands/alerts/delete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
frogml_cli/commands/alerts/delete/_logic.py,sha256=x-5YnepcLjC-SgdZ6vtq4TAaZqfg2JRj5uI9Xpg2zUE,186
|
10
10
|
frogml_cli/commands/alerts/delete/ui.py,sha256=v1HrRbr-QnLah84lkgNjBvxXS0MnPKjdB6RwUkQbsZE,321
|
@@ -12,7 +12,7 @@ frogml_cli/commands/alerts/list/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
|
|
12
12
|
frogml_cli/commands/alerts/list/_logic.py,sha256=8g6hj2Sr9Gm3ZiizROta23j4dXyt_9xub0qfTl3bf9Q,853
|
13
13
|
frogml_cli/commands/alerts/list/ui.py,sha256=idcJ1GRY7PfhfEooc3e7qpdX_1kH-XIFAoUlyNxKIbM,498
|
14
14
|
frogml_cli/commands/alerts/register/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
frogml_cli/commands/alerts/register/_logic.py,sha256=
|
15
|
+
frogml_cli/commands/alerts/register/_logic.py,sha256=7CysIoYgzGHJ5QWBl3kRcw-uI4RPvCcUOTvMkudRDVo,2578
|
16
16
|
frogml_cli/commands/alerts/register/ui.py,sha256=ajAeQB-5kI9YVstKD-fuD9LPc_3q8-XPMzn6FPWZ250,743
|
17
17
|
frogml_cli/commands/audience/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
18
|
frogml_cli/commands/audience/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -20,7 +20,7 @@ frogml_cli/commands/audience/_logic/config/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
20
20
|
frogml_cli/commands/audience/_logic/config/config_base.py,sha256=d1i5tKV96OibjhlCTFDLvsGk0CXD8VYpOBcoHksdzus,337
|
21
21
|
frogml_cli/commands/audience/_logic/config/parser.py,sha256=-_luJYGTkff9SkIk7-5-dbyPLzuTGYI9Nh4mG6k-bdM,994
|
22
22
|
frogml_cli/commands/audience/_logic/config/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
|
-
frogml_cli/commands/audience/_logic/config/v1/audience_config.py,sha256=
|
23
|
+
frogml_cli/commands/audience/_logic/config/v1/audience_config.py,sha256=VLPKVEZ_cg7O-XFhrdRcnJ3p0GGhA4S6kewQ5TLtDU8,897
|
24
24
|
frogml_cli/commands/audience/_logic/config/v1/conditions_config.py,sha256=-tk_h02jHQ367tUAex1RP6WEvylm3E3Mn8t5P1JlRwo,1606
|
25
25
|
frogml_cli/commands/audience/_logic/config/v1/config_v1.py,sha256=rYhDuVp7xJb7IXKrtnNoSXPx049X-SFDX7qR7y4ab74,791
|
26
26
|
frogml_cli/commands/audience/_logic/config/v1/route_config.py,sha256=3JN6LniQH5ofwUPzua1a6gJvgekAjZIz2Gp4cJE_vL8,334
|
@@ -52,7 +52,7 @@ frogml_cli/commands/auto_scalling/attach/_logic.py,sha256=SogY4cBC17EEfU_6vAjJJC
|
|
52
52
|
frogml_cli/commands/auto_scalling/attach/ui.py,sha256=34Qa8Rl4jYt3127cxAPEda336iTK2UyQxj0RJzrh3I0,963
|
53
53
|
frogml_cli/commands/auto_scalling/autoscaling_commands_group.py,sha256=iHlqGMObxYK-0l20dtivXMSdsksczGwYDltdZ7MQ2_s,279
|
54
54
|
frogml_cli/commands/automations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
55
|
-
frogml_cli/commands/automations/automations_commands_group.py,sha256=
|
55
|
+
frogml_cli/commands/automations/automations_commands_group.py,sha256=uHwKMpiTZ9w4pXZ5q_WtVwcobH_rQxmqjeuwvifceuc,864
|
56
56
|
frogml_cli/commands/automations/delete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
57
|
frogml_cli/commands/automations/delete/_logic.py,sha256=QqY_SFJyVVsL0ra0toOKt7ub-tzp3EnBGh9U_E9ImIc,242
|
58
58
|
frogml_cli/commands/automations/delete/ui.py,sha256=8ukOWeEgEET6PUzoNzF-8IR8EIOhgMdcg4osVzUvh8E,612
|
@@ -65,11 +65,11 @@ frogml_cli/commands/automations/list/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
65
65
|
frogml_cli/commands/automations/list/_logic.py,sha256=MOzWWgJ59Rxf5xGzFiJ3pyFGlw2VxmxnDmLHfpgwAjk,1175
|
66
66
|
frogml_cli/commands/automations/list/ui.py,sha256=MGybaBRCUz5RZBZeE_3gJNsiM4lRDmwQZmSjG97lbpE,523
|
67
67
|
frogml_cli/commands/automations/register/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
|
-
frogml_cli/commands/automations/register/_logic.py,sha256=
|
69
|
-
frogml_cli/commands/automations/register/ui.py,sha256=
|
68
|
+
frogml_cli/commands/automations/register/_logic.py,sha256=KP3eHpUfaPGLDOT2YPi9w9N02M32g5w-6wvWDFQWhGo,1662
|
69
|
+
frogml_cli/commands/automations/register/ui.py,sha256=YKt1xJnreMUxZtI81XykvkJySizqBKYgU0Yc2bBCnbU,1363
|
70
70
|
frogml_cli/commands/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
71
|
frogml_cli/commands/config/add/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
|
-
frogml_cli/commands/config/add/ui.py,sha256=
|
72
|
+
frogml_cli/commands/config/add/ui.py,sha256=8v8fjkGgqXu8ynuL1mqaj3u8XxteyJY-4044nF3EU-I,1803
|
73
73
|
frogml_cli/commands/config/config_commands_group.py,sha256=Ztv2RruzbOT2xLiIaUnFZSl5v3hwOB75-FOpjnpZ5qE,228
|
74
74
|
frogml_cli/commands/feature_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
75
|
frogml_cli/commands/feature_store/backfill/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -80,14 +80,14 @@ frogml_cli/commands/feature_store/delete/_logic.py,sha256=SzS1i9sE28MC5h_WnXrrMz
|
|
80
80
|
frogml_cli/commands/feature_store/delete/ui.py,sha256=mwqlOzKlQzadzZC-kL2-7JVJ61Re1MAZllnDZArPhIc,1054
|
81
81
|
frogml_cli/commands/feature_store/execution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
82
|
frogml_cli/commands/feature_store/execution/ui.py,sha256=LU75Dqud2TTTyJwKTy63p7vU9M9cPJPSq9qS01OV-sM,575
|
83
|
-
frogml_cli/commands/feature_store/feature_store_command_group.py,sha256=
|
83
|
+
frogml_cli/commands/feature_store/feature_store_command_group.py,sha256=rPXitoyBuwJid6A1TWiVmaZqEFmLCdfhTJasNmE0GNQ,1266
|
84
84
|
frogml_cli/commands/feature_store/list/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
85
85
|
frogml_cli/commands/feature_store/list/ui.py,sha256=_feg_x5aqvO2nQWHsgiAQjHlkJzX8GkrOl_r2xPt7-k,4162
|
86
86
|
frogml_cli/commands/feature_store/pause/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
87
|
frogml_cli/commands/feature_store/pause/ui.py,sha256=15hiiYLilShNdV7B04UVPKBk8vncwKpRPQghQIA1cRw,721
|
88
88
|
frogml_cli/commands/feature_store/register/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
89
|
-
frogml_cli/commands/feature_store/register/_logic.py,sha256=
|
90
|
-
frogml_cli/commands/feature_store/register/ui.py,sha256
|
89
|
+
frogml_cli/commands/feature_store/register/_logic.py,sha256=P5GvzOw34SQOn6J5fPOZHgqaxdhgfO1YdphjwMvcDWs,13605
|
90
|
+
frogml_cli/commands/feature_store/register/ui.py,sha256=-N7Ie_rHXPooCIeScltbbhY0CrZYH7Xbw37IDkSUIHA,3044
|
91
91
|
frogml_cli/commands/feature_store/resume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
92
92
|
frogml_cli/commands/feature_store/resume/ui.py,sha256=RFWY9vYHudMoUBdnwkMsfm0LSJLN4LrOt629fnwQBJY,726
|
93
93
|
frogml_cli/commands/feature_store/trigger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -97,9 +97,9 @@ frogml_cli/commands/models/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
|
|
97
97
|
frogml_cli/commands/models/build/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
98
98
|
frogml_cli/commands/models/build/_logic/build_steps.py,sha256=-4fI7f0i6VnewCo2VyH9EMqoQUFf1g0E2bX3haBuuSY,1569
|
99
99
|
frogml_cli/commands/models/build/_logic/client_logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
100
|
-
frogml_cli/commands/models/build/_logic/client_logs/cli_phase_run_handler.py,sha256=
|
100
|
+
frogml_cli/commands/models/build/_logic/client_logs/cli_phase_run_handler.py,sha256=JfGQQ3MxNfrC2Pw2-pAYm7u1fs3Rqc44aufzijJmG7E,4715
|
101
101
|
frogml_cli/commands/models/build/_logic/client_logs/cli_trigger_build_logger.py,sha256=L69_KKRzae1iaX0dgjbdUpzIstMN6Tte_hZWUr0MO6Y,733
|
102
|
-
frogml_cli/commands/models/build/_logic/client_logs/logger.py,sha256=
|
102
|
+
frogml_cli/commands/models/build/_logic/client_logs/logger.py,sha256=iMmtcDRM-FU5eGCynYVc4r3FiNcbyxvdrcd-uFNdDJM,2939
|
103
103
|
frogml_cli/commands/models/build/_logic/client_logs/messages.py,sha256=_3f1TPmfmYyxZPD3mlZWTY2MKdgaINDzi70njVJOwOA,1048
|
104
104
|
frogml_cli/commands/models/build/_logic/client_logs/spinner.py,sha256=iph1eVC7QtSzNobNP2j_x0DC2k7bbka9eT8rcBpZGeQ,359
|
105
105
|
frogml_cli/commands/models/build/_logic/client_logs/trigger_build_logger.py,sha256=BpRbMdvPLsVOyp7t6eSRcAhS7GyIv4W8VN3Uts5jU20,1635
|
@@ -113,7 +113,7 @@ frogml_cli/commands/models/build/_logic/phase/c_deploy/build_polling_status.py,s
|
|
113
113
|
frogml_cli/commands/models/build/_logic/phase/c_deploy/deploy_build.py,sha256=uyK7SHzsdTOZ7uqa4RTZzvQAT6w9rcP8WNxF-WLAM7I,2332
|
114
114
|
frogml_cli/commands/models/build/_logic/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
115
115
|
frogml_cli/commands/models/build/_logic/util/protobuf_factory.py,sha256=gO9LgChpt0Qyc_3UXt2RhdRJ4jqf_9NkkH6t13bmREE,1699
|
116
|
-
frogml_cli/commands/models/build/_logic/util/step_decorator.py,sha256=
|
116
|
+
frogml_cli/commands/models/build/_logic/util/step_decorator.py,sha256=0IgG0XMtIdLftsInwTumg2afAXzQyjVhXAWoJ7jrDfI,1936
|
117
117
|
frogml_cli/commands/models/build/_logic/util/text.py,sha256=tH-v19Mt8l90sMVxku5XRtrderT0qdRqJ-jLijqannA,188
|
118
118
|
frogml_cli/commands/models/build/_logic/wait_until_finished.py,sha256=hhIFrY2onNvuwOvek06Zpj9RhuCj2sChLfY83BaQkgY,1229
|
119
119
|
frogml_cli/commands/models/build/ui.py,sha256=o9oBQ0ZW-pPX8AxJ8DDKyGsLFbmxHIztdm8LR6yO9Ko,9998
|
@@ -131,8 +131,8 @@ frogml_cli/commands/models/create/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
131
131
|
frogml_cli/commands/models/create/_logic.py,sha256=_vsAgVGF1mcKSDtB7RRP_Wu_tY0HemG_IHh41RDDX1w,1480
|
132
132
|
frogml_cli/commands/models/create/ui.py,sha256=AXK-1LusJrjNMyKf4U6gMsA_tHGBU1052fa578KQbMw,1273
|
133
133
|
frogml_cli/commands/models/delete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
134
|
-
frogml_cli/commands/models/delete/_logic.py,sha256=
|
135
|
-
frogml_cli/commands/models/delete/ui.py,sha256=
|
134
|
+
frogml_cli/commands/models/delete/_logic.py,sha256=rQEILBOU7YP5JLU2xYJBXElZ922NYx8TJSKEupC8m5M,944
|
135
|
+
frogml_cli/commands/models/delete/ui.py,sha256=B87Yw193frai9SfdoFko8kD9SyKkMlHMgCuqg2AgGn8,1099
|
136
136
|
frogml_cli/commands/models/deployments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
137
137
|
frogml_cli/commands/models/deployments/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
138
138
|
frogml_cli/commands/models/deployments/deploy/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -144,7 +144,7 @@ frogml_cli/commands/models/deployments/deploy/_logic/deployment_message_helpers.
|
|
144
144
|
frogml_cli/commands/models/deployments/deploy/_logic/deployment_response_handler.py,sha256=7uNy9aoWJzTBYIcX7fPdmcvtQS2TBL4c3BdEXPv0D1I,5888
|
145
145
|
frogml_cli/commands/models/deployments/deploy/_logic/deployment_size_mapper.py,sha256=Xz4yd4cJzUT_R_PXfZEYVo9xG9Qxw68PhgYUo0HlDZc,3711
|
146
146
|
frogml_cli/commands/models/deployments/deploy/_logic/get_latest_successful_build.py,sha256=MnDB92MCVuF1_F3lcBk6-16KnHsBOpU3_wXJmjxxTHE,1007
|
147
|
-
frogml_cli/commands/models/deployments/deploy/_logic/local_deployment.py,sha256=
|
147
|
+
frogml_cli/commands/models/deployments/deploy/_logic/local_deployment.py,sha256=MDpWioGszN2aPTswfxYZIS2fNA2R8ZaQmpEVWyTLkxs,6323
|
148
148
|
frogml_cli/commands/models/deployments/deploy/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
149
149
|
frogml_cli/commands/models/deployments/deploy/batch/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
150
150
|
frogml_cli/commands/models/deployments/deploy/batch/_logic/advanced_deployment_mapper.py,sha256=O9X7ywSXaEu2T8fNe2ckefX4j_EXKrYA4mRDkn7YXks,603
|
@@ -230,16 +230,16 @@ frogml_cli/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.mo
|
|
230
230
|
frogml_cli/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
231
231
|
frogml_cli/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
232
232
|
frogml_cli/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/test_titanic.py,sha256=A75drbpCH-wNYwGZHS16xFBN7aApYbA7w_G1Hc2BwkU,761
|
233
|
-
frogml_cli/commands/models/init/ui.py,sha256=
|
233
|
+
frogml_cli/commands/models/init/ui.py,sha256=3Bg7sP76l5d9kMYp3jLRQ0rJ-zhmRcjc1N6d7e2aH98,2089
|
234
234
|
frogml_cli/commands/models/list/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
235
|
-
frogml_cli/commands/models/list/_logic.py,sha256=
|
236
|
-
frogml_cli/commands/models/list/ui.py,sha256=
|
235
|
+
frogml_cli/commands/models/list/_logic.py,sha256=JLl4_r44ZqMZQgruwgKLPoj-kdk7a6LEc3WQVLlQ-Sk,314
|
236
|
+
frogml_cli/commands/models/list/ui.py,sha256=W4JvjYO7hVshbMpL4u8OhNuXldngS2dBZRezi8VNJ2s,1641
|
237
237
|
frogml_cli/commands/models/list_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
238
|
-
frogml_cli/commands/models/list_models/_logic.py,sha256=
|
239
|
-
frogml_cli/commands/models/list_models/ui.py,sha256
|
238
|
+
frogml_cli/commands/models/list_models/_logic.py,sha256=BWqGLg3iIxYTp2vZnO87pa351l3To4R-pgMhc2cyJUk,634
|
239
|
+
frogml_cli/commands/models/list_models/ui.py,sha256=dVg1tpMqimMUJQsY725EgtBsDYjfIhV-zvvGuyQLaQw,2023
|
240
240
|
frogml_cli/commands/models/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
241
|
-
frogml_cli/commands/models/metadata/_logic.py,sha256=
|
242
|
-
frogml_cli/commands/models/metadata/ui.py,sha256=
|
241
|
+
frogml_cli/commands/models/metadata/_logic.py,sha256=klld-mC0KmaG74Bd0Ler5CoQmtneUpwFbhbAf-YDZ8k,668
|
242
|
+
frogml_cli/commands/models/metadata/ui.py,sha256=9FPPCljPj6UwrIIQ7Y7ypSMKJiDj2Aaylens0NjQ35s,2248
|
243
243
|
frogml_cli/commands/models/models_command_group.py,sha256=Bt02n4ZiGz2YivcuTHd8gOu6qmkHO0Jhcy4vqygW7_o,1645
|
244
244
|
frogml_cli/commands/models/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
245
245
|
frogml_cli/commands/models/runtime/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -265,7 +265,7 @@ frogml_cli/exceptions/frogml_command_exception.py,sha256=SkIvr-5EEmqJRCRZva0pcrp
|
|
265
265
|
frogml_cli/exceptions/frogml_deploy_new_build_failed.py,sha256=V_NMAwT_WAC9vJ5OUlDxWV-hvSfykCijkyYCGbPeLWs,142
|
266
266
|
frogml_cli/exceptions/frogml_resource_not_found.py,sha256=ckAS6vCn148gLnZi12ZpzXh2qv04V1u5NW8oineD29w,50
|
267
267
|
frogml_cli/inner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
268
|
-
frogml_cli/inner/file_registry.py,sha256=
|
268
|
+
frogml_cli/inner/file_registry.py,sha256=ObBLf8eK__fS8E6aDrUnswcq4HTM4O_eptXvDWOugUo,3226
|
269
269
|
frogml_cli/inner/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
270
270
|
frogml_cli/inner/tools/cli_tools.py,sha256=bMxS0qy7garLNKe36ZkgA8lkSCPTsV8UMXu3A9OL2HA,5568
|
271
271
|
frogml_cli/inner/tools/config_handler.py,sha256=tDsnx0GC6TSd4_7VA1gpK2nDcy2A3Ln_fQRlQ3qBVWg,917
|
@@ -281,7 +281,7 @@ frogml_cli/tools/const.py,sha256=XDaMAVfScXoFc5fHbsNuqAefUD2MoZY-cAEMoh1xaYk,152
|
|
281
281
|
frogml_cli/tools/files.py,sha256=AyKJTOy7NhvP3SrqwIw_lxYNCOy1CvLgMmSJpWZ0OKM,2257
|
282
282
|
frogml_cli/tools/log_handling.py,sha256=QlgxbCmLLPK4wRyViWgAW8WLZ39Do1hYAvRyFWGbnFs,6362
|
283
283
|
frogml_cli/tools/utils.py,sha256=Vliw-w6i-93dgZ3M09EgWjttHMuhT-3CH7tbWVKsf8s,1668
|
284
|
-
frogml_cli-0.0.
|
285
|
-
frogml_cli-0.0.
|
286
|
-
frogml_cli-0.0.
|
287
|
-
frogml_cli-0.0.
|
284
|
+
frogml_cli-0.0.5.dist-info/METADATA,sha256=zmDTRa_iV6WQW9LtmKazUMebwCUjkJUJ1fsLT-R-ZB8,2202
|
285
|
+
frogml_cli-0.0.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
286
|
+
frogml_cli-0.0.5.dist-info/entry_points.txt,sha256=2H5x0V_E73HeywIMBRRvZMgeRtmX5820KmSLiNFzDcA,53
|
287
|
+
frogml_cli-0.0.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|