Skip to content

Commit 400b760

Browse files
authored
feat: Made display_name parameter optional for most calls (#882)
Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/python-aiplatform/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [x] Ensure the tests and linter pass - [x] Code coverage does not decrease (if any source code was changed) - [x] Appropriate docs were updated (if necessary) Fixes #853 🦕
1 parent 647d31f commit 400b760

13 files changed

+123
-33
lines changed

google/cloud/aiplatform/base.py

+7
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,13 @@ def to_dict(self) -> Dict[str, Any]:
686686
"""Returns the resource proto as a dictionary."""
687687
return json_format.MessageToDict(self.gca_resource._pb)
688688

689+
@classmethod
690+
def _generate_display_name(cls, prefix: Optional[str] = None) -> str:
691+
"""Returns a display name containing class name and time string."""
692+
if not prefix:
693+
prefix = cls.__name__
694+
return prefix + " " + datetime.datetime.now().isoformat(sep=" ")
695+
689696

690697
def optional_sync(
691698
construct_object_on_arg: Optional[str] = None,

google/cloud/aiplatform/datasets/dataset.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ def _validate_metadata_schema_uri(self) -> None:
106106
@classmethod
107107
def create(
108108
cls,
109+
# TODO(b/223262536): Make the display_name parameter optional in the next major release
109110
display_name: str,
110111
metadata_schema_uri: str,
111112
gcs_source: Optional[Union[str, Sequence[str]]] = None,
@@ -211,7 +212,8 @@ def create(
211212
dataset (Dataset):
212213
Instantiated representation of the managed dataset resource.
213214
"""
214-
215+
if not display_name:
216+
display_name = cls._generate_display_name()
215217
utils.validate_display_name(display_name)
216218
if labels:
217219
utils.validate_labels(labels)

google/cloud/aiplatform/datasets/image_dataset.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class ImageDataset(datasets._Dataset):
3636
@classmethod
3737
def create(
3838
cls,
39-
display_name: str,
39+
display_name: Optional[str] = None,
4040
gcs_source: Optional[Union[str, Sequence[str]]] = None,
4141
import_schema_uri: Optional[str] = None,
4242
data_item_labels: Optional[Dict] = None,
@@ -54,7 +54,7 @@ def create(
5454
5555
Args:
5656
display_name (str):
57-
Required. The user-defined name of the Dataset.
57+
Optional. The user-defined name of the Dataset.
5858
The name can be up to 128 characters long and can be consist
5959
of any UTF-8 characters.
6060
gcs_source (Union[str, Sequence[str]]):
@@ -129,6 +129,8 @@ def create(
129129
image_dataset (ImageDataset):
130130
Instantiated representation of the managed image dataset resource.
131131
"""
132+
if not display_name:
133+
display_name = cls._generate_display_name()
132134

133135
utils.validate_display_name(display_name)
134136
if labels:

google/cloud/aiplatform/datasets/tabular_dataset.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class TabularDataset(datasets._ColumnNamesDataset):
3636
@classmethod
3737
def create(
3838
cls,
39-
display_name: str,
39+
display_name: Optional[str] = None,
4040
gcs_source: Optional[Union[str, Sequence[str]]] = None,
4141
bq_source: Optional[str] = None,
4242
project: Optional[str] = None,
@@ -52,7 +52,7 @@ def create(
5252
5353
Args:
5454
display_name (str):
55-
Required. The user-defined name of the Dataset.
55+
Optional. The user-defined name of the Dataset.
5656
The name can be up to 128 characters long and can be consist
5757
of any UTF-8 characters.
5858
gcs_source (Union[str, Sequence[str]]):
@@ -110,7 +110,8 @@ def create(
110110
tabular_dataset (TabularDataset):
111111
Instantiated representation of the managed tabular dataset resource.
112112
"""
113-
113+
if not display_name:
114+
display_name = cls._generate_display_name()
114115
utils.validate_display_name(display_name)
115116
if labels:
116117
utils.validate_labels(labels)

google/cloud/aiplatform/datasets/text_dataset.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class TextDataset(datasets._Dataset):
3636
@classmethod
3737
def create(
3838
cls,
39-
display_name: str,
39+
display_name: Optional[str] = None,
4040
gcs_source: Optional[Union[str, Sequence[str]]] = None,
4141
import_schema_uri: Optional[str] = None,
4242
data_item_labels: Optional[Dict] = None,
@@ -61,7 +61,7 @@ def create(
6161
6262
Args:
6363
display_name (str):
64-
Required. The user-defined name of the Dataset.
64+
Optional. The user-defined name of the Dataset.
6565
The name can be up to 128 characters long and can be consist
6666
of any UTF-8 characters.
6767
gcs_source (Union[str, Sequence[str]]):
@@ -136,7 +136,8 @@ def create(
136136
text_dataset (TextDataset):
137137
Instantiated representation of the managed text dataset resource.
138138
"""
139-
139+
if not display_name:
140+
display_name = cls._generate_display_name()
140141
utils.validate_display_name(display_name)
141142
if labels:
142143
utils.validate_labels(labels)

google/cloud/aiplatform/datasets/time_series_dataset.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class TimeSeriesDataset(datasets._ColumnNamesDataset):
3636
@classmethod
3737
def create(
3838
cls,
39-
display_name: str,
39+
display_name: Optional[str] = None,
4040
gcs_source: Optional[Union[str, Sequence[str]]] = None,
4141
bq_source: Optional[str] = None,
4242
project: Optional[str] = None,
@@ -51,7 +51,7 @@ def create(
5151
5252
Args:
5353
display_name (str):
54-
Required. The user-defined name of the Dataset.
54+
Optional. The user-defined name of the Dataset.
5555
The name can be up to 128 characters long and can be consist
5656
of any UTF-8 characters.
5757
gcs_source (Union[str, Sequence[str]]):
@@ -108,7 +108,8 @@ def create(
108108
Instantiated representation of the managed time series dataset resource.
109109
110110
"""
111-
111+
if not display_name:
112+
display_name = cls._generate_display_name()
112113
utils.validate_display_name(display_name)
113114
if labels:
114115
utils.validate_labels(labels)

google/cloud/aiplatform/datasets/video_dataset.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class VideoDataset(datasets._Dataset):
3636
@classmethod
3737
def create(
3838
cls,
39-
display_name: str,
39+
display_name: Optional[str] = None,
4040
gcs_source: Optional[Union[str, Sequence[str]]] = None,
4141
import_schema_uri: Optional[str] = None,
4242
data_item_labels: Optional[Dict] = None,
@@ -54,7 +54,7 @@ def create(
5454
5555
Args:
5656
display_name (str):
57-
Required. The user-defined name of the Dataset.
57+
Optional. The user-defined name of the Dataset.
5858
The name can be up to 128 characters long and can be consist
5959
of any UTF-8 characters.
6060
gcs_source (Union[str, Sequence[str]]):
@@ -129,7 +129,8 @@ def create(
129129
video_dataset (VideoDataset):
130130
Instantiated representation of the managed video dataset resource.
131131
"""
132-
132+
if not display_name:
133+
display_name = cls._generate_display_name()
133134
utils.validate_display_name(display_name)
134135
if labels:
135136
utils.validate_labels(labels)

google/cloud/aiplatform/jobs.py

+12
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ def completion_stats(self) -> Optional[gca_completion_stats.CompletionStats]:
349349
@classmethod
350350
def create(
351351
cls,
352+
# TODO(b/223262536): Make the job_display_name parameter optional in the next major release
352353
job_display_name: str,
353354
model_name: Union[str, "aiplatform.Model"],
354355
instances_format: str = "jsonl",
@@ -537,6 +538,8 @@ def create(
537538
(jobs.BatchPredictionJob):
538539
Instantiated representation of the created batch prediction job.
539540
"""
541+
if not job_display_name:
542+
job_display_name = cls._generate_display_name()
540543

541544
utils.validate_display_name(job_display_name)
542545

@@ -1032,6 +1035,7 @@ class CustomJob(_RunnableJob):
10321035

10331036
def __init__(
10341037
self,
1038+
# TODO(b/223262536): Make display_name parameter fully optional in next major release
10351039
display_name: str,
10361040
worker_pool_specs: Union[List[Dict], List[aiplatform.gapic.WorkerPoolSpec]],
10371041
base_output_dir: Optional[str] = None,
@@ -1136,6 +1140,9 @@ def __init__(
11361140
staging_bucket, "aiplatform-custom-job"
11371141
)
11381142

1143+
if not display_name:
1144+
display_name = self.__class__._generate_display_name()
1145+
11391146
self._gca_resource = gca_custom_job_compat.CustomJob(
11401147
display_name=display_name,
11411148
job_spec=gca_custom_job_compat.CustomJobSpec(
@@ -1193,6 +1200,7 @@ def _log_web_access_uris(self):
11931200
@classmethod
11941201
def from_local_script(
11951202
cls,
1203+
# TODO(b/223262536): Make display_name parameter fully optional in next major release
11961204
display_name: str,
11971205
script_path: str,
11981206
container_uri: str,
@@ -1521,6 +1529,7 @@ class HyperparameterTuningJob(_RunnableJob):
15211529

15221530
def __init__(
15231531
self,
1532+
# TODO(b/223262536): Make display_name parameter fully optional in next major release
15241533
display_name: str,
15251534
custom_job: CustomJob,
15261535
metric_spec: Dict[str, str],
@@ -1717,6 +1726,9 @@ def __init__(
17171726
],
17181727
)
17191728

1729+
if not display_name:
1730+
display_name = self.__class__._generate_display_name()
1731+
17201732
self._gca_resource = (
17211733
gca_hyperparameter_tuning_job_compat.HyperparameterTuningJob(
17221734
display_name=display_name,

google/cloud/aiplatform/models.py

+23-9
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ def network(self) -> Optional[str]:
197197
@classmethod
198198
def create(
199199
cls,
200-
display_name: str,
200+
display_name: Optional[str] = None,
201201
description: Optional[str] = None,
202202
labels: Optional[Dict[str, str]] = None,
203203
metadata: Optional[Sequence[Tuple[str, str]]] = (),
@@ -212,7 +212,7 @@ def create(
212212
213213
Args:
214214
display_name (str):
215-
Required. The user-defined name of the Endpoint.
215+
Optional. The user-defined name of the Endpoint.
216216
The name can be up to 128 characters long and can be consist
217217
of any UTF-8 characters.
218218
project (str):
@@ -263,6 +263,9 @@ def create(
263263

264264
api_client = cls._instantiate_client(location=location, credentials=credentials)
265265

266+
if not display_name:
267+
display_name = cls._generate_display_name()
268+
266269
utils.validate_display_name(display_name)
267270
if labels:
268271
utils.validate_labels(labels)
@@ -1654,7 +1657,6 @@ def update(
16541657
@base.optional_sync()
16551658
def upload(
16561659
cls,
1657-
display_name: str,
16581660
serving_container_image_uri: str,
16591661
*,
16601662
artifact_uri: Optional[str] = None,
@@ -1670,6 +1672,7 @@ def upload(
16701672
prediction_schema_uri: Optional[str] = None,
16711673
explanation_metadata: Optional[explain.ExplanationMetadata] = None,
16721674
explanation_parameters: Optional[explain.ExplanationParameters] = None,
1675+
display_name: Optional[str] = None,
16731676
project: Optional[str] = None,
16741677
location: Optional[str] = None,
16751678
credentials: Optional[auth_credentials.Credentials] = None,
@@ -1692,7 +1695,7 @@ def upload(
16921695
16931696
Args:
16941697
display_name (str):
1695-
Required. The display name of the Model. The name can be up to 128
1698+
Optional. The display name of the Model. The name can be up to 128
16961699
characters long and can be consist of any UTF-8 characters.
16971700
serving_container_image_uri (str):
16981701
Required. The URI of the Model serving container.
@@ -1832,6 +1835,8 @@ def upload(
18321835
is specified.
18331836
Also if model directory does not contain a supported model file.
18341837
"""
1838+
if not display_name:
1839+
display_name = cls._generate_display_name()
18351840
utils.validate_display_name(display_name)
18361841
if labels:
18371842
utils.validate_labels(labels)
@@ -2231,7 +2236,7 @@ def _deploy(
22312236

22322237
def batch_predict(
22332238
self,
2234-
job_display_name: str,
2239+
job_display_name: Optional[str] = None,
22352240
gcs_source: Optional[Union[str, Sequence[str]]] = None,
22362241
bigquery_source: Optional[str] = None,
22372242
instances_format: str = "jsonl",
@@ -2269,7 +2274,7 @@ def batch_predict(
22692274
22702275
Args:
22712276
job_display_name (str):
2272-
Required. The user-defined name of the BatchPredictionJob.
2277+
Optional. The user-defined name of the BatchPredictionJob.
22732278
The name can be up to 128 characters long and can be consist
22742279
of any UTF-8 characters.
22752280
gcs_source: Optional[Sequence[str]] = None
@@ -2636,7 +2641,7 @@ def upload_xgboost_model_file(
26362641
cls,
26372642
model_file_path: str,
26382643
xgboost_version: Optional[str] = None,
2639-
display_name: str = "XGBoost model",
2644+
display_name: Optional[str] = None,
26402645
description: Optional[str] = None,
26412646
instance_schema_uri: Optional[str] = None,
26422647
parameters_schema_uri: Optional[str] = None,
@@ -2769,6 +2774,9 @@ def upload_xgboost_model_file(
27692774
is specified.
27702775
Also if model directory does not contain a supported model file.
27712776
"""
2777+
if not display_name:
2778+
display_name = cls.__class__.__generate_display_name("XGBoost model")
2779+
27722780
XGBOOST_SUPPORTED_MODEL_FILE_EXTENSIONS = [
27732781
".pkl",
27742782
".joblib",
@@ -2835,7 +2843,7 @@ def upload_scikit_learn_model_file(
28352843
cls,
28362844
model_file_path: str,
28372845
sklearn_version: Optional[str] = None,
2838-
display_name: str = "Scikit-learn model",
2846+
display_name: Optional[str] = None,
28392847
description: Optional[str] = None,
28402848
instance_schema_uri: Optional[str] = None,
28412849
parameters_schema_uri: Optional[str] = None,
@@ -2969,6 +2977,9 @@ def upload_scikit_learn_model_file(
29692977
is specified.
29702978
Also if model directory does not contain a supported model file.
29712979
"""
2980+
if not display_name:
2981+
display_name = cls._generate_display_name("Scikit-Learn model")
2982+
29722983
SKLEARN_SUPPORTED_MODEL_FILE_EXTENSIONS = [
29732984
".pkl",
29742985
".joblib",
@@ -3034,7 +3045,7 @@ def upload_tensorflow_saved_model(
30343045
saved_model_dir: str,
30353046
tensorflow_version: Optional[str] = None,
30363047
use_gpu: bool = False,
3037-
display_name: str = "Tensorflow model",
3048+
display_name: Optional[str] = None,
30383049
description: Optional[str] = None,
30393050
instance_schema_uri: Optional[str] = None,
30403051
parameters_schema_uri: Optional[str] = None,
@@ -3170,6 +3181,9 @@ def upload_tensorflow_saved_model(
31703181
is specified.
31713182
Also if model directory does not contain a supported model file.
31723183
"""
3184+
if not display_name:
3185+
display_name = cls._generate_display_name("Tensorflow model")
3186+
31733187
container_image_uri = aiplatform.helpers.get_prebuilt_prediction_container_uri(
31743188
region=location,
31753189
framework="tensorflow",

google/cloud/aiplatform/pipeline_jobs.py

+3
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class PipelineJob(base.VertexAiStatefulResource):
9292

9393
def __init__(
9494
self,
95+
# TODO(b/223262536): Make the display_name parameter optional in the next major release
9596
display_name: str,
9697
template_path: str,
9798
job_id: Optional[str] = None,
@@ -160,6 +161,8 @@ def __init__(
160161
Raises:
161162
ValueError: If job_id or labels have incorrect format.
162163
"""
164+
if not display_name:
165+
display_name = self.__class__._generate_display_name()
163166
utils.validate_display_name(display_name)
164167

165168
if labels:

0 commit comments

Comments
 (0)