From 2c5cc0514785aab9c112466ef6ad9b4914ba6ecc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Ra=C4=8Dinsk=C3=BD?= Date: Sat, 7 Oct 2023 20:23:10 +0200 Subject: [PATCH 1/3] fix: keeping the non-default version of the model resource --- google/cloud/aiplatform/models.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/google/cloud/aiplatform/models.py b/google/cloud/aiplatform/models.py index 839711249a..8269c93aa6 100644 --- a/google/cloud/aiplatform/models.py +++ b/google/cloud/aiplatform/models.py @@ -5227,6 +5227,14 @@ def resource_name(self) -> str: self._assert_gca_resource_is_available() return ModelRegistry._parse_versioned_name(self._gca_resource.name)[0] + def _sync_gca_resource(self) -> None: + """Sync GAPIC service representation of client class resource. + Uses versioned resource name so the non-default version is not lost. + """ + self._gca_resource = self._get_gca_resource( + resource_name=self.versioned_resource_name + ) + @property def name(self) -> str: """Name of this resource.""" From f594934a42dbc8940b7e56342cbd68f0cda6b5f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Ra=C4=8Dinsk=C3=BD?= Date: Fri, 24 Apr 2026 12:22:04 +0200 Subject: [PATCH 2/3] test: nondefault models test --- tests/unit/aiplatform/test_models.py | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/unit/aiplatform/test_models.py b/tests/unit/aiplatform/test_models.py index bd008e0ed8..5916fced01 100644 --- a/tests/unit/aiplatform/test_models.py +++ b/tests/unit/aiplatform/test_models.py @@ -4728,6 +4728,42 @@ def test_versioning_registry_uses_project_from_resource_name( f"projects/{_TEST_PROJECT_2}/" ) + def test_sync_gca_resource_uses_versioned_name(self, get_model_with_version): + # Regression test for https://github.com/googleapis/python-aiplatform/issues/2619 + # _sync_gca_resource must use versioned_resource_name so the non-default + # version is not silently replaced by the default version. + model = models.Model(model_name=_TEST_MODEL_NAME, version=_TEST_VERSION_ID) + get_model_with_version.reset_mock() + + model._sync_gca_resource() + + versioned_name = models.ModelRegistry._get_versioned_name( + _TEST_MODEL_PARENT, _TEST_VERSION_ID + ) + get_model_with_version.assert_called_once_with( + name=versioned_name, retry=base._DEFAULT_RETRY + ) + + def test_update_preserves_version( + self, update_model_mock, get_model_with_version + ): + # Regression test for https://github.com/googleapis/python-aiplatform/issues/2619 + # Model.update() calls _sync_gca_resource(); verify it fetches the versioned name. + model = models.Model(model_name=_TEST_MODEL_NAME, version=_TEST_VERSION_ID) + get_model_with_version.reset_mock() + + model.update(display_name=_TEST_MODEL_NAME) + + versioned_name = models.ModelRegistry._get_versioned_name( + _TEST_MODEL_PARENT, _TEST_VERSION_ID + ) + get_model_with_version.assert_called_once_with( + name=versioned_name, retry=base._DEFAULT_RETRY + ) + # Version must still be intact after update + assert model.version_id == _TEST_VERSION_ID + assert model.versioned_resource_name.endswith(f"@{_TEST_VERSION_ID}") + @pytest.mark.parametrize( "parent,location,project", [ From 00fba9171e8b641d2107db48ed11d9819241af88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Ra=C4=8Dinsk=C3=BD?= Date: Thu, 30 Apr 2026 10:09:26 +0200 Subject: [PATCH 3/3] style: format --- tests/unit/aiplatform/test_models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/unit/aiplatform/test_models.py b/tests/unit/aiplatform/test_models.py index 5916fced01..33c15acf0b 100644 --- a/tests/unit/aiplatform/test_models.py +++ b/tests/unit/aiplatform/test_models.py @@ -4744,9 +4744,7 @@ def test_sync_gca_resource_uses_versioned_name(self, get_model_with_version): name=versioned_name, retry=base._DEFAULT_RETRY ) - def test_update_preserves_version( - self, update_model_mock, get_model_with_version - ): + def test_update_preserves_version(self, update_model_mock, get_model_with_version): # Regression test for https://github.com/googleapis/python-aiplatform/issues/2619 # Model.update() calls _sync_gca_resource(); verify it fetches the versioned name. model = models.Model(model_name=_TEST_MODEL_NAME, version=_TEST_VERSION_ID)