Skip to content

Commit 5846dc6

Browse files
committed
vdk-control-cli: use common output printer
Adopting the new output_printer to print all outputs of all commands Some commands required small refactoring - to make some fields private. Signed-off-by: Antoni Ivanov <aivanov@vmware.com>
1 parent ea36e8c commit 5846dc6

8 files changed

Lines changed: 88 additions & 109 deletions

File tree

projects/vdk-control-cli/src/vdk/internal/control/command_groups/job/deploy_cli.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,22 +178,20 @@ def deploy(
178178
job_version = get_or_prompt("Job Version", job_version)
179179
if job_path:
180180
reason = get_or_prompt("Reason", reason)
181-
return cmd.create(
182-
name, team, job_path, reason, output, vdk_version, enabled
183-
)
181+
return cmd.create(name, team, job_path, reason, vdk_version, enabled)
184182
else:
185-
return cmd.update(name, team, enabled, job_version, vdk_version, output)
183+
return cmd.update(name, team, enabled, job_version, vdk_version)
186184
if operation == DeployOperation.REMOVE.value:
187185
name = get_or_prompt("Job Name", name)
188186
team = get_or_prompt("Job Team", team)
189187
return cmd.remove(name, team)
190188
if operation == DeployOperation.SHOW.value:
191189
name = get_or_prompt("Job Name", name)
192190
team = get_or_prompt("Job Team", team)
193-
return cmd.show(name, team, output)
191+
return cmd.show(name, team)
194192
if operation == DeployOperation.CREATE.value:
195193
job_path = get_or_prompt("Job Path", job_path)
196194
default_name = os.path.basename(job_path)
197195
name = get_or_prompt("Job Name", name, default_name)
198196
reason = get_or_prompt("Reason", reason)
199-
return cmd.create(name, team, job_path, reason, output, vdk_version, enabled)
197+
return cmd.create(name, team, job_path, reason, vdk_version, enabled)

projects/vdk-control-cli/src/vdk/internal/control/command_groups/job/deploy_cli_impl.py

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
# Copyright 2021-2023 VMware, Inc.
22
# SPDX-License-Identifier: Apache-2.0
33
import glob
4-
import json
54
import logging
65
import os
76
from typing import Optional
87

98
import click
109
import click_spinner
11-
from tabulate import tabulate
1210
from taurus_datajob_api import ApiException
1311
from taurus_datajob_api import DataJob
1412
from taurus_datajob_api import DataJobConfig
@@ -21,6 +19,7 @@
2119
from vdk.internal.control.job.job_config import JobConfig
2220
from vdk.internal.control.rest_lib.factory import ApiClientFactory
2321
from vdk.internal.control.rest_lib.rest_client_errors import ApiClientErrorDecorator
22+
from vdk.internal.control.utils import output_printer
2423
from vdk.internal.control.utils.cli_utils import get_or_prompt
2524
from vdk.internal.control.utils.output_printer import OutputFormat
2625

@@ -31,14 +30,16 @@ class JobDeploy:
3130
ZIP_ARCHIVE_TYPE = "zip"
3231
ARCHIVE_SUFFIX = "-archive"
3332

34-
def __init__(self, rest_api_url: str, output):
33+
def __init__(self, rest_api_url: str, output: str):
3534
self.deploy_api = ApiClientFactory(rest_api_url).get_deploy_api()
3635
self.jobs_api = ApiClientFactory(rest_api_url).get_jobs_api()
3736
self.job_sources_api = ApiClientFactory(rest_api_url).get_jobs_sources_api()
3837
# support for multiple deployments is not implemented yet so we can put anything here.
3938
# Ultimately this will be user facing parameter (possibly fetched from config.ini)
4039
self.__deployment_id = "production"
4140
self.__job_archive = JobArchive()
41+
self.__output = output
42+
self.__printer = output_printer.create_printer(self.__output)
4243

4344
@staticmethod
4445
def __detect_keytab_files_in_job_directory(job_path: str) -> None:
@@ -153,7 +154,6 @@ def update(
153154
enabled: Optional[bool], # true, false or None
154155
job_version: Optional[str],
155156
vdk_version: Optional[str],
156-
output: str,
157157
) -> None:
158158
deployment = DataJobDeployment(enabled=None)
159159
if job_version:
@@ -163,7 +163,7 @@ def update(
163163
deployment.enabled = enabled
164164

165165
if job_version:
166-
self.__update_job_version(name, team, deployment, output)
166+
self.__update_job_version(name, team, deployment)
167167
elif vdk_version or enabled is not None:
168168
self.__update_deployment(name, team, deployment)
169169
msg = f"Deployment of Data Job {name} updated; "
@@ -186,16 +186,14 @@ def __update_deployment(
186186
data_job_deployment=deployment,
187187
)
188188

189-
def __update_job_version(
190-
self, name: str, team: str, deployment: DataJobDeployment, output: str
191-
):
189+
def __update_job_version(self, name: str, team: str, deployment: DataJobDeployment):
192190
log.debug(
193191
f"Update Deployment version of a job {name} of team {team} : {deployment}"
194192
)
195193
self.deploy_api.deployment_update(
196194
team_name=team, job_name=name, data_job_deployment=deployment
197195
)
198-
if output == OutputFormat.TEXT.value:
196+
if self.__output == OutputFormat.TEXT.value:
199197
log.info(
200198
f"Request to deploy Data Job {name} using version {deployment.job_version} finished successfully.\n"
201199
f"It would take a few minutes for the Data Job to be deployed in the server.\n"
@@ -210,7 +208,7 @@ def __update_job_version(
210208
"job_name": name,
211209
"job_version": deployment.job_version,
212210
}
213-
click.echo(json.dumps(result))
211+
self.__printer.print_dict(result)
214212

215213
@ApiClientErrorDecorator()
216214
def remove(self, name: str, team: str) -> None:
@@ -221,7 +219,7 @@ def remove(self, name: str, team: str) -> None:
221219
log.info(f"Deployment of Data Job {name} removed.")
222220

223221
@ApiClientErrorDecorator()
224-
def show(self, name: str, team: str, output: str) -> None:
222+
def show(self, name: str, team: str) -> None:
225223
log.debug(f"Get list of deployments for job {name} of team {team} ")
226224
deployments = self.deploy_api.deployment_list(team_name=team, job_name=name)
227225
log.debug(
@@ -239,20 +237,17 @@ def show(self, name: str, team: str, output: str) -> None:
239237
),
240238
deployments,
241239
)
242-
if output == OutputFormat.TEXT.value:
240+
if self.__output == OutputFormat.TEXT.value:
243241
click.echo(
244242
"You can compare the version seen here to the one seen when "
245243
"deploying to verify your deployment was successful."
246244
)
247245
click.echo("")
248-
click.echo(tabulate(deployments, headers="keys"))
246+
self.__printer.print_table(list(deployments))
249247
else:
250-
click.echo(json.dumps(list(deployments)))
248+
self.__printer.print_table(list(deployments))
251249
else:
252-
if output == OutputFormat.TEXT.value:
253-
click.echo("No deployments.")
254-
else:
255-
click.echo(json.dumps([]))
250+
self.__printer.print_table(None)
256251

257252
@ApiClientErrorDecorator()
258253
def create(
@@ -261,7 +256,6 @@ def create(
261256
team: str,
262257
job_path: str,
263258
reason: str,
264-
output: str,
265259
vdk_version: Optional[str],
266260
enabled: Optional[bool],
267261
) -> None:
@@ -287,7 +281,7 @@ def create(
287281
"Team Name", team or job_config.get_team() or load_default_team_name()
288282
)
289283

290-
if output == OutputFormat.TEXT.value:
284+
if self.__output == OutputFormat.TEXT.value:
291285
log.info(
292286
f"Deploy Data Job with name {name} from directory {job_path} ... \n"
293287
)
@@ -298,9 +292,11 @@ def create(
298292
try:
299293
job_archive_binary = self.__archive_binary(archive_path)
300294

301-
if output == OutputFormat.TEXT.value:
295+
if self.__output == OutputFormat.TEXT.value:
302296
log.info("Uploading the data job might take some time ...")
303-
with click_spinner.spinner(disable=(output == OutputFormat.JSON.value)):
297+
with click_spinner.spinner(
298+
disable=(self.__output == OutputFormat.JSON.value)
299+
):
304300
data_job_version = self.job_sources_api.sources_upload(
305301
team_name=team,
306302
job_name=name,
@@ -309,8 +305,6 @@ def create(
309305
)
310306

311307
self.__update_data_job_deploy_configuration(job_path, name, team)
312-
self.update(
313-
name, team, enabled, data_job_version.version_sha, vdk_version, output
314-
)
308+
self.update(name, team, enabled, data_job_version.version_sha, vdk_version)
315309
finally:
316310
self.__cleanup_archive(archive_path=archive_path)

projects/vdk-control-cli/src/vdk/internal/control/command_groups/job/execute.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@
44
import logging
55
import operator
66
import os
7-
import sys
87
import webbrowser
98
from enum import Enum
109
from enum import unique
10+
from typing import List
1111
from typing import Optional
1212

1313
import click
1414
import click_spinner
15-
from tabulate import tabulate
1615
from taurus_datajob_api import DataJobExecution
1716
from taurus_datajob_api import DataJobExecutionLogs
1817
from taurus_datajob_api import DataJobExecutionRequest
@@ -21,6 +20,7 @@
2120
from vdk.internal.control.rest_lib.factory import ApiClientFactory
2221
from vdk.internal.control.rest_lib.rest_client_errors import ApiClientErrorDecorator
2322
from vdk.internal.control.utils import cli_utils
23+
from vdk.internal.control.utils import output_printer
2424
from vdk.internal.control.utils.cli_utils import get_or_prompt
2525
from vdk.internal.control.utils.output_printer import OutputFormat
2626

@@ -54,11 +54,7 @@ def transform_execution(e: DataJobExecution):
5454
return d
5555

5656
executions = list(map(lambda e: transform_execution(e), executions))
57-
58-
if output == OutputFormat.TEXT.value:
59-
return tabulate(executions, headers="keys")
60-
elif output == OutputFormat.JSON.value:
61-
return cli_utils.json_format(list(executions))
57+
output_printer.create_printer(output).print_table(executions)
6258

6359
@staticmethod
6460
def __validate_and_parse_args(arguments: str) -> str:
@@ -101,13 +97,13 @@ def start(self, name: str, team: str, output: OutputFormat, arguments: str) -> N
10197
f"See execution logs using: \n\n"
10298
f"vdk execute --logs --execution-id {execution_id} -n {name} -t {team}"
10399
)
104-
elif output == OutputFormat.JSON.value:
100+
else:
105101
result = {
106102
"job_name": name,
107103
"team": team,
108104
"execution_id": execution_id,
109105
}
110-
click.echo(json.dumps(result))
106+
output_printer.create_printer(output).print_dict(result)
111107

112108
@ApiClientErrorDecorator()
113109
def cancel(self, name: str, team: str, execution_id: str) -> None:
@@ -126,14 +122,14 @@ def show(
126122
execution: DataJobExecution = self.__execution_api.data_job_execution_read(
127123
team_name=team, job_name=name, execution_id=execution_id
128124
)
129-
click.echo(self.__model_executions([execution], output))
125+
self.__model_executions([execution], output)
130126

131127
@ApiClientErrorDecorator()
132128
def list(self, name: str, team: str, output: OutputFormat) -> None:
133-
executions: list[
129+
executions: List[
134130
DataJobExecution
135131
] = self.__execution_api.data_job_execution_list(team_name=team, job_name=name)
136-
click.echo(self.__model_executions(executions, output))
132+
self.__model_executions(executions, output)
137133

138134
def __get_execution_to_log(
139135
self, name: str, team: str, execution_id: str

projects/vdk-control-cli/src/vdk/internal/control/command_groups/job/list.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
# Copyright 2021-2023 VMware, Inc.
22
# SPDX-License-Identifier: Apache-2.0
33
import datetime
4-
import json
54
import logging
65
from enum import Enum
76
from enum import unique
87
from typing import Dict
98
from typing import List
109

1110
import click
12-
from tabulate import tabulate
1311
from taurus_datajob_api import DataJobQueryResponse
1412
from vdk.internal.control.configuration.defaults_config import load_default_team_name
1513
from vdk.internal.control.rest_lib.factory import ApiClientFactory
1614
from vdk.internal.control.rest_lib.rest_client_errors import ApiClientErrorDecorator
1715
from vdk.internal.control.utils import cli_utils
16+
from vdk.internal.control.utils import output_printer
1817
from vdk.internal.control.utils.cli_utils import GqlQueryBuilder
19-
from vdk.internal.control.utils.output_printer import OutputFormat
2018

2119
log = logging.getLogger(__name__)
2220

@@ -55,13 +53,7 @@ def list_jobs(
5553
page_number += 1
5654

5755
jobs = list(map(self.job_to_dict, jobs))
58-
if output == OutputFormat.TEXT.value:
59-
if len(jobs) > 0:
60-
click.echo(tabulate(jobs, headers="keys"))
61-
else:
62-
click.echo("No Data Jobs.")
63-
else:
64-
click.echo(json.dumps(list(jobs)))
56+
output_printer.create_printer(output).print_table(jobs)
6557

6658
@staticmethod
6759
def job_to_dict(job: Dict):

0 commit comments

Comments
 (0)