Added MusicProviderRegistry

This commit is contained in:
Kamil
2024-11-29 22:47:46 +00:00
parent 25e51f1ef2
commit 3c25cd70ea
2 changed files with 38 additions and 0 deletions

3
app/registry/__init__.py Normal file
View File

@@ -0,0 +1,3 @@
from .music_provider_registry import MusicProviderRegistry
__all__ = ["MusicProviderRegistry"]

View File

@@ -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())