diff --git a/asdf_pydantic/converter.py b/asdf_pydantic/converter.py index 89b54af..4be2684 100644 --- a/asdf_pydantic/converter.py +++ b/asdf_pydantic/converter.py @@ -1,37 +1,29 @@ from __future__ import annotations -from typing import Optional, Type +from typing import Type from asdf.extension import Converter from asdf_pydantic.model import AsdfPydanticModel -_ASDF_PYDANTIC_SINGLETON_CONVERTER: Optional[AsdfPydanticConverter] = None - class AsdfPydanticConverter(Converter): - """Implements a converter compatible with all subclass of AsdfPydanticModel. - - The instance is a singleton. - """ - - _tag_to_class: dict[str, Type[AsdfPydanticModel]] = {} + """Implements a converter compatible with all subclass of AsdfPydanticModel.""" + _tag_to_class: dict[str, Type[AsdfPydanticModel]] - def __new__(cls, *args, **kwargs): - global _ASDF_PYDANTIC_SINGLETON_CONVERTER - if _ASDF_PYDANTIC_SINGLETON_CONVERTER is None: - _ASDF_PYDANTIC_SINGLETON_CONVERTER = super().__new__(cls) + def __init__(self, *model_classes: Type[AsdfPydanticModel]) -> None: + self._tag_to_class = {} + self.add_models(*model_classes) + super().__init__() - return _ASDF_PYDANTIC_SINGLETON_CONVERTER - - @classmethod def add_models( - cls, *model_classes: Type[AsdfPydanticModel] + self, *model_classes: Type[AsdfPydanticModel] ) -> "AsdfPydanticConverter": for model_class in model_classes: - cls._tag_to_class[model_class.get_tag_uri()] = model_class - return cls() + self._tag_to_class[model_class.get_tag_uri()] = model_class + + return self @property def tags(self) -> tuple[str]: diff --git a/tests/test_converter.py b/tests/test_converter.py new file mode 100644 index 0000000..5421296 --- /dev/null +++ b/tests/test_converter.py @@ -0,0 +1,13 @@ +import pytest + +from asdf_pydantic.converter import AsdfPydanticConverter +from asdf_pydantic.model import AsdfPydanticModel + + +class TestModel(AsdfPydanticModel): + _tag = "https://example.org/test_model" + + +@pytest.mark.parametrize("args", [tuple(), (TestModel,)]) +def test_converter_is_unscoped_by_default(args): + assert AsdfPydanticConverter(*args) is not AsdfPydanticConverter(*args)