From e7eefc51dbda1ce0424277bd563497ad8e924ee9 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Tue, 5 Mar 2024 14:56:14 -0800 Subject: [PATCH 01/10] added dco Signed-off-by: Bharath Krishna --- .../kubeflow/katib/api/katib_client.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index c52b55ab482..1f5a9098f40 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -93,29 +93,34 @@ def create_experiment( namespace = namespace or self.namespace + experiment_name = experiment.metadata.name + if not experiment_name: + experiment_name = experiment.metadata.generate_name + try: - self.custom_api.create_namespaced_custom_object( + outputs = self.custom_api.create_namespaced_custom_object( constants.KUBEFLOW_GROUP, constants.KATIB_VERSION, namespace, constants.EXPERIMENT_PLURAL, experiment, ) + experiment_name = outputs.metadata.name # if "generate_name" is used, "name" gets a prefix from server except multiprocessing.TimeoutError: raise TimeoutError( - f"Timeout to create Katib Experiment: {namespace}/{experiment.metadata.name}" + f"Timeout to create Katib Experiment: {namespace}/{experiment_name}" ) except Exception as e: if hasattr(e, "status") and e.status == 409: raise Exception( - f"A Katib Experiment with the name {namespace}/{experiment.metadata.name} already exists." + f"A Katib Experiment with the name {namespace}/{experiment_name} already exists." ) raise RuntimeError( - f"Failed to create Katib Experiment: {namespace}/{experiment.metadata.name}" + f"Failed to create Katib Experiment: {namespace}/{experiment_name}" ) # TODO (andreyvelich): Use proper logger. - print(f"Experiment {namespace}/{experiment.metadata.name} has been created") + print(f"Experiment {namespace}/{experiment_name} has been created") if self._is_ipython(): if self.in_cluster: @@ -125,9 +130,9 @@ def create_experiment( IPython.display.HTML( "Katib Experiment {} " 'link here'.format( - experiment.metadata.name, + experiment_name, namespace, - experiment.metadata.name, + experiment_name, ) ) ) From 1039f4b1bd37ee7b2e0e5e94394d25dfdbd3dd05 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Tue, 5 Mar 2024 15:20:00 -0800 Subject: [PATCH 02/10] updated condition Signed-off-by: Bharath Krishna --- sdk/python/v1beta1/kubeflow/katib/api/katib_client.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index 1f5a9098f40..7978322b27d 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -93,8 +93,9 @@ def create_experiment( namespace = namespace or self.namespace - experiment_name = experiment.metadata.name - if not experiment_name: + if 'name' in experiment.metadata and experiment.metadata.name: + experiment_name = experiment.metadata.name + else: experiment_name = experiment.metadata.generate_name try: From 5be7150ac760c800bdab156a01dff290ec67d3bd Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Wed, 6 Mar 2024 18:46:12 -0800 Subject: [PATCH 03/10] added exception to catch missing name and generateName Signed-off-by: Bharath Krishna --- sdk/python/v1beta1/kubeflow/katib/api/katib_client.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index 7978322b27d..d0c4a137e98 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -93,11 +93,15 @@ def create_experiment( namespace = namespace or self.namespace - if 'name' in experiment.metadata and experiment.metadata.name: + experiment_name = None + if experiment.metadata.name is not None: experiment_name = experiment.metadata.name - else: + elif experiment.metadata.generate_name is not None: experiment_name = experiment.metadata.generate_name + if experiment_name is None: + raise ValueError("Experiment must have a name or generateName") + try: outputs = self.custom_api.create_namespaced_custom_object( constants.KUBEFLOW_GROUP, From ccc1be26769c5e3a310be85ac5daee439a4a6fc2 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Wed, 6 Mar 2024 20:10:46 -0800 Subject: [PATCH 04/10] updated experiment_name in create_experiment Signed-off-by: Bharath Krishna --- sdk/python/v1beta1/kubeflow/katib/api/katib_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index d0c4a137e98..61f89056a31 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -110,7 +110,7 @@ def create_experiment( constants.EXPERIMENT_PLURAL, experiment, ) - experiment_name = outputs.metadata.name # if "generate_name" is used, "name" gets a prefix from server + experiment_name = outputs["metadata"]["name"] # if "generate_name" is used, "name" gets a prefix from server except multiprocessing.TimeoutError: raise TimeoutError( f"Timeout to create Katib Experiment: {namespace}/{experiment_name}" From 15d45827303e6bacb760ef2bb4dccd1204b813e6 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Sun, 10 Mar 2024 11:55:49 -0700 Subject: [PATCH 05/10] py sdk create_exp - added type validation Signed-off-by: Bharath Krishna --- .../v1beta1/kubeflow/katib/api/katib_client.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index 61f89056a31..2c2e0e4be57 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -94,10 +94,15 @@ def create_experiment( namespace = namespace or self.namespace experiment_name = None - if experiment.metadata.name is not None: - experiment_name = experiment.metadata.name - elif experiment.metadata.generate_name is not None: - experiment_name = experiment.metadata.generate_name + if type(experiment) == models.V1beta1Experiment: + if experiment.metadata.name is not None: + experiment_name = experiment.metadata.name + elif experiment.metadata.generate_name is not None: + experiment_name = experiment.metadata.generate_name + elif "name" in experiment["metadata"]: + experiment_name = experiment["metadata"]["name"] + elif "generate_name" in experiment["metadata"]: + experiment_name = experiment["metadata"]["generate_name"] if experiment_name is None: raise ValueError("Experiment must have a name or generateName") From 84f42d3230a61beccd332147843abe8701656382 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Tue, 5 Mar 2024 14:56:14 -0800 Subject: [PATCH 06/10] added dco Signed-off-by: Bharath Krishna --- .../kubeflow/katib/api/katib_client.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index c52b55ab482..1f5a9098f40 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -93,29 +93,34 @@ def create_experiment( namespace = namespace or self.namespace + experiment_name = experiment.metadata.name + if not experiment_name: + experiment_name = experiment.metadata.generate_name + try: - self.custom_api.create_namespaced_custom_object( + outputs = self.custom_api.create_namespaced_custom_object( constants.KUBEFLOW_GROUP, constants.KATIB_VERSION, namespace, constants.EXPERIMENT_PLURAL, experiment, ) + experiment_name = outputs.metadata.name # if "generate_name" is used, "name" gets a prefix from server except multiprocessing.TimeoutError: raise TimeoutError( - f"Timeout to create Katib Experiment: {namespace}/{experiment.metadata.name}" + f"Timeout to create Katib Experiment: {namespace}/{experiment_name}" ) except Exception as e: if hasattr(e, "status") and e.status == 409: raise Exception( - f"A Katib Experiment with the name {namespace}/{experiment.metadata.name} already exists." + f"A Katib Experiment with the name {namespace}/{experiment_name} already exists." ) raise RuntimeError( - f"Failed to create Katib Experiment: {namespace}/{experiment.metadata.name}" + f"Failed to create Katib Experiment: {namespace}/{experiment_name}" ) # TODO (andreyvelich): Use proper logger. - print(f"Experiment {namespace}/{experiment.metadata.name} has been created") + print(f"Experiment {namespace}/{experiment_name} has been created") if self._is_ipython(): if self.in_cluster: @@ -125,9 +130,9 @@ def create_experiment( IPython.display.HTML( "Katib Experiment {} " 'link here'.format( - experiment.metadata.name, + experiment_name, namespace, - experiment.metadata.name, + experiment_name, ) ) ) From e75ad6bfc55024a74be06fa94f31ef7f29b032a8 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Tue, 5 Mar 2024 15:20:00 -0800 Subject: [PATCH 07/10] updated condition Signed-off-by: Bharath Krishna --- sdk/python/v1beta1/kubeflow/katib/api/katib_client.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index 1f5a9098f40..7978322b27d 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -93,8 +93,9 @@ def create_experiment( namespace = namespace or self.namespace - experiment_name = experiment.metadata.name - if not experiment_name: + if 'name' in experiment.metadata and experiment.metadata.name: + experiment_name = experiment.metadata.name + else: experiment_name = experiment.metadata.generate_name try: From 67f12c13395d2fe8b88ac4ad757bebb5c3da7dd8 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Wed, 6 Mar 2024 18:46:12 -0800 Subject: [PATCH 08/10] added exception to catch missing name and generateName Signed-off-by: Bharath Krishna --- sdk/python/v1beta1/kubeflow/katib/api/katib_client.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index 7978322b27d..d0c4a137e98 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -93,11 +93,15 @@ def create_experiment( namespace = namespace or self.namespace - if 'name' in experiment.metadata and experiment.metadata.name: + experiment_name = None + if experiment.metadata.name is not None: experiment_name = experiment.metadata.name - else: + elif experiment.metadata.generate_name is not None: experiment_name = experiment.metadata.generate_name + if experiment_name is None: + raise ValueError("Experiment must have a name or generateName") + try: outputs = self.custom_api.create_namespaced_custom_object( constants.KUBEFLOW_GROUP, From 56b3f3133a5bb03020d41b19efd5db20edc0dd15 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Wed, 6 Mar 2024 20:10:46 -0800 Subject: [PATCH 09/10] updated experiment_name in create_experiment Signed-off-by: Bharath Krishna --- sdk/python/v1beta1/kubeflow/katib/api/katib_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index d0c4a137e98..61f89056a31 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -110,7 +110,7 @@ def create_experiment( constants.EXPERIMENT_PLURAL, experiment, ) - experiment_name = outputs.metadata.name # if "generate_name" is used, "name" gets a prefix from server + experiment_name = outputs["metadata"]["name"] # if "generate_name" is used, "name" gets a prefix from server except multiprocessing.TimeoutError: raise TimeoutError( f"Timeout to create Katib Experiment: {namespace}/{experiment_name}" From c583c68a3b311bee25e575223ff6bcf3d33b5ab5 Mon Sep 17 00:00:00 2001 From: Bharath Krishna Date: Sun, 10 Mar 2024 11:55:49 -0700 Subject: [PATCH 10/10] py sdk create_exp - added type validation Signed-off-by: Bharath Krishna --- .../v1beta1/kubeflow/katib/api/katib_client.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py index 61f89056a31..2c2e0e4be57 100644 --- a/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py +++ b/sdk/python/v1beta1/kubeflow/katib/api/katib_client.py @@ -94,10 +94,15 @@ def create_experiment( namespace = namespace or self.namespace experiment_name = None - if experiment.metadata.name is not None: - experiment_name = experiment.metadata.name - elif experiment.metadata.generate_name is not None: - experiment_name = experiment.metadata.generate_name + if type(experiment) == models.V1beta1Experiment: + if experiment.metadata.name is not None: + experiment_name = experiment.metadata.name + elif experiment.metadata.generate_name is not None: + experiment_name = experiment.metadata.generate_name + elif "name" in experiment["metadata"]: + experiment_name = experiment["metadata"]["name"] + elif "generate_name" in experiment["metadata"]: + experiment_name = experiment["metadata"]["generate_name"] if experiment_name is None: raise ValueError("Experiment must have a name or generateName")