177 lines
5.2 KiB
Python
177 lines
5.2 KiB
Python
import click
|
|
from kfp import client
|
|
from kfp.cli import output
|
|
from kfp.cli.utils import parsing
|
|
|
|
|
|
@click.group()
|
|
def experiment():
|
|
"""Manage experiment resources."""
|
|
|
|
|
|
@experiment.command()
|
|
@click.option(
|
|
'-d',
|
|
'--description',
|
|
help=parsing.get_param_descr(client.Client.create_experiment,
|
|
'description'))
|
|
@click.argument('name')
|
|
@click.pass_context
|
|
def create(ctx: click.Context, description: str, name: str):
|
|
"""Create an experiment."""
|
|
client_obj: client.Client = ctx.obj['client']
|
|
output_format = ctx.obj['output']
|
|
|
|
experiment = client_obj.create_experiment(name, description=description)
|
|
output.print_output(
|
|
experiment,
|
|
output.ModelType.EXPERIMENT,
|
|
output_format,
|
|
)
|
|
|
|
|
|
@experiment.command()
|
|
@click.option(
|
|
'--page-token',
|
|
default='',
|
|
help=parsing.get_param_descr(client.Client.list_experiments, 'page_token'))
|
|
@click.option(
|
|
'-m',
|
|
'--max-size',
|
|
default=100,
|
|
help=parsing.get_param_descr(client.Client.list_experiments, 'page_size'))
|
|
@click.option(
|
|
'--sort-by',
|
|
default='created_at desc',
|
|
help=parsing.get_param_descr(client.Client.list_experiments, 'sort_by'))
|
|
@click.option(
|
|
'--filter',
|
|
help=parsing.get_param_descr(client.Client.list_experiments, 'filter'))
|
|
@click.pass_context
|
|
def list(ctx: click.Context, page_token: str, max_size: int, sort_by: str,
|
|
filter: str):
|
|
"""List experiments."""
|
|
client_obj: client.Client = ctx.obj['client']
|
|
output_format = ctx.obj['output']
|
|
|
|
response = client_obj.list_experiments(
|
|
page_token=page_token,
|
|
page_size=max_size,
|
|
sort_by=sort_by,
|
|
filter=filter)
|
|
output.print_output(
|
|
response.experiments or [],
|
|
output.ModelType.EXPERIMENT,
|
|
output_format,
|
|
)
|
|
|
|
|
|
@experiment.command()
|
|
@click.argument('experiment-id')
|
|
@click.pass_context
|
|
def get(ctx: click.Context, experiment_id: str):
|
|
"""Get information about an experiment."""
|
|
client_obj: client.Client = ctx.obj['client']
|
|
output_format = ctx.obj['output']
|
|
|
|
experiment = client_obj.get_experiment(experiment_id)
|
|
output.print_output(
|
|
experiment,
|
|
output.ModelType.EXPERIMENT,
|
|
output_format,
|
|
)
|
|
|
|
|
|
@experiment.command()
|
|
@click.argument('experiment-id')
|
|
@click.pass_context
|
|
def delete(ctx: click.Context, experiment_id: str):
|
|
"""Delete an experiment."""
|
|
|
|
confirmation = 'Caution. The RunDetails page could have an issue' \
|
|
' when it renders a run that has no experiment.' \
|
|
' Do you want to continue?'
|
|
if not click.confirm(confirmation):
|
|
return
|
|
|
|
client_obj: client.Client = ctx.obj['client']
|
|
output_format = ctx.obj['output']
|
|
|
|
client_obj.delete_experiment(experiment_id)
|
|
output.print_deleted_text('experiment', experiment_id, output_format)
|
|
|
|
|
|
either_option_required = 'Either --experiment-id or --experiment-name is required.'
|
|
|
|
|
|
@experiment.command()
|
|
@click.option(
|
|
'--experiment-id',
|
|
default=None,
|
|
help=parsing.get_param_descr(client.Client.archive_experiment,
|
|
'experiment_id') + ' ' + either_option_required
|
|
)
|
|
@click.option(
|
|
'--experiment-name',
|
|
default=None,
|
|
help='Name of the experiment.' + ' ' + either_option_required)
|
|
@click.pass_context
|
|
def archive(ctx: click.Context, experiment_id: str, experiment_name: str):
|
|
"""Archive an experiment."""
|
|
client_obj: client.Client = ctx.obj['client']
|
|
output_format = ctx.obj['output']
|
|
|
|
if (experiment_id is None) == (experiment_name is None):
|
|
raise ValueError(either_option_required)
|
|
|
|
if not experiment_id:
|
|
experiment = client_obj.get_experiment(experiment_name=experiment_name)
|
|
experiment_id = experiment.experiment_id
|
|
|
|
client_obj.archive_experiment(experiment_id=experiment_id)
|
|
if experiment_id:
|
|
experiment = client_obj.get_experiment(experiment_id=experiment_id)
|
|
else:
|
|
experiment = client_obj.get_experiment(experiment_name=experiment_name)
|
|
output.print_output(
|
|
experiment,
|
|
output.ModelType.EXPERIMENT,
|
|
output_format,
|
|
)
|
|
|
|
|
|
@experiment.command()
|
|
@click.option(
|
|
'--experiment-id',
|
|
default=None,
|
|
help=parsing.get_param_descr(client.Client.unarchive_experiment,
|
|
'experiment_id') + ' ' + either_option_required
|
|
)
|
|
@click.option(
|
|
'--experiment-name',
|
|
default=None,
|
|
help='Name of the experiment.' + ' ' + either_option_required)
|
|
@click.pass_context
|
|
def unarchive(ctx: click.Context, experiment_id: str, experiment_name: str):
|
|
"""Unarchive an experiment."""
|
|
client_obj: client.Client = ctx.obj['client']
|
|
output_format = ctx.obj['output']
|
|
|
|
if (experiment_id is None) == (experiment_name is None):
|
|
raise ValueError(either_option_required)
|
|
|
|
if not experiment_id:
|
|
experiment = client_obj.get_experiment(experiment_name=experiment_name)
|
|
experiment_id = experiment.experiment_id
|
|
|
|
client_obj.unarchive_experiment(experiment_id=experiment_id)
|
|
if experiment_id:
|
|
experiment = client_obj.get_experiment(experiment_id=experiment_id)
|
|
else:
|
|
experiment = client_obj.get_experiment(experiment_name=experiment_name)
|
|
output.print_output(
|
|
experiment,
|
|
output.ModelType.EXPERIMENT,
|
|
output_format,
|
|
)
|