From 75c2d8f54a110434f6daf231f51d10a8ee5da275 Mon Sep 17 00:00:00 2001 From: Andrew Bates Date: Thu, 26 Sep 2024 12:15:21 -0700 Subject: [PATCH] DiffSync deprecation fix (#281) * DiffSync deprecation fix * Formatting --- diffsync/__init__.py | 11 +++-------- tests/unit/test_deprecation.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 tests/unit/test_deprecation.py diff --git a/diffsync/__init__.py b/diffsync/__init__.py index 788b8e6..db404ea 100644 --- a/diffsync/__init__.py +++ b/diffsync/__init__.py @@ -28,7 +28,7 @@ Any, Set, ) -import warnings +from typing_extensions import deprecated from pydantic import ConfigDict, BaseModel, PrivateAttr import structlog # type: ignore @@ -894,15 +894,10 @@ def count(self, model: Union[StrType, "DiffSyncModel", Type["DiffSyncModel"], No return self.store.count(model=model) -def DiffSync(*args: Any, **kwargs: Any) -> Adapter: # noqa pylint: disable=invalid-name +@deprecated("'diffsync.DiffSync' is deprecated and will be removed with 2.1, use 'diffsync.Adapter' instead.") +class DiffSync(Adapter): """For backwards-compatibility, keep around the old name.""" - warnings.warn( - "'diffsync.DiffSync' is deprecated and will be removed with 2.1, use 'diffsync.Adapter' instead.", - DeprecationWarning, - ) - return Adapter(*args, **kwargs) - # DiffSyncModel references Adapter and Adapter references DiffSyncModel. Break the typing loop: DiffSyncModel.model_rebuild() diff --git a/tests/unit/test_deprecation.py b/tests/unit/test_deprecation.py new file mode 100644 index 0000000..c85345b --- /dev/null +++ b/tests/unit/test_deprecation.py @@ -0,0 +1,30 @@ +"""Unit tests for the DiffSync deprecation warning. + +Copyright (c) 2020-2024 Network To Code, LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import pytest + +from diffsync import DiffSync + + +def test_diffsync_deprecation_warning(): + """Test that `DiffSync` causes a deprecation warning.""" + with pytest.deprecated_call(): + + class TestAdapter(DiffSync): # pylint:disable=missing-class-docstring + pass + + TestAdapter()