diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dadc01..8172e0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ## Dessine-moi 25.2.0 (*upcoming release*) +- Cache registered type list ({ghpr}`12`). + ## Dessine-moi 25.1.0 (2025-06-25) - *Dessine-moi* is now on conda-forge. diff --git a/src/dessinemoi/_core.py b/src/dessinemoi/_core.py index 3db42dc..45bac4e 100644 --- a/src/dessinemoi/_core.py +++ b/src/dessinemoi/_core.py @@ -140,6 +140,8 @@ class Factory: ``Dict[str, FactoryRegistryEntry]``. """ + _registered_types: Optional[List[str]] = attrs.field(default=None, repr=False) + @property def registered_types(self) -> List[str]: """ @@ -147,7 +149,11 @@ def registered_types(self) -> List[str]: .. versionadded:: 21.3.0 """ - return list({_fullname(x.cls) for x in self.registry.values()}) + if self._registered_types is None: + self._registered_types = list( + {_fullname(x.cls) for x in self.registry.values()} + ) + return self._registered_types def _register_impl( self, @@ -161,6 +167,9 @@ def _register_impl( if isinstance(cls, str): cls = LazyType.from_str(cls) + # Invalidate registered type cache + self._registered_types = None + # Upon request, force eager loading of lazy type declarations if isinstance(cls, LazyType) and not allow_lazy: cls = cls.load()