From 3c25cd70ea8ee20349d072de3fa66f4de95a58d5 Mon Sep 17 00:00:00 2001 From: Kamil Date: Fri, 29 Nov 2024 22:47:46 +0000 Subject: [PATCH] Added MusicProviderRegistry --- app/registry/__init__.py | 3 +++ app/registry/music_provider_registry.py | 35 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 app/registry/__init__.py create mode 100644 app/registry/music_provider_registry.py diff --git a/app/registry/__init__.py b/app/registry/__init__.py new file mode 100644 index 0000000..2dc5919 --- /dev/null +++ b/app/registry/__init__.py @@ -0,0 +1,3 @@ +from .music_provider_registry import MusicProviderRegistry + +__all__ = ["MusicProviderRegistry"] \ No newline at end of file diff --git a/app/registry/music_provider_registry.py b/app/registry/music_provider_registry.py new file mode 100644 index 0000000..89aeaf4 --- /dev/null +++ b/app/registry/music_provider_registry.py @@ -0,0 +1,35 @@ +from app.providers.base import MusicProviderClient + + +class MusicProviderRegistry: + """ + Registry to manage and retrieve music provider clients. + """ + _providers = {} + + @classmethod + def register_provider(cls, provider: MusicProviderClient): + """ + Registers a music provider client instance. + :param provider: An instance of a MusicProviderClient subclass. + """ + cls._providers[provider._identifier] = provider + + @classmethod + def get_provider(cls, identifier: str) -> MusicProviderClient: + """ + Retrieves a registered music provider client by its identifier. + :param identifier: The unique identifier for the provider. + :return: An instance of MusicProviderClient. + """ + if identifier not in cls._providers: + raise ValueError(f"No provider found with identifier '{identifier}'.") + return cls._providers[identifier] + + @classmethod + def list_providers(cls) -> list: + """ + Lists all registered providers. + :return: A list of registered provider identifiers. + """ + return list(cls._providers.keys())