The Registry provides a singleton-based mechanism for managing registered configuration classes.
from coastline import Registry
The Registry uses a singleton pattern to ensure only one registry instance exists:
registry1 = Registry.get_instance()
registry2 = Registry.get_instance()
print(registry1 is registry2) # True
get_instance()Returns the singleton Registry instance.
registry = Registry.get_instance()
register(name, cls)Registers a configuration class with a given name.
Parameters:
name (str): The key to register the class undercls (type): The class to registerfrom coastline import Registry, config
from pydantic import BaseModel
registry = Registry.get_instance()
@config
class Database(BaseModel):
host: str
port: int
# Or register manually
registry.register("Database", Database)
get(name)Retrieves a registered class by name.
Parameters:
name (str): The key of the class to retrieveReturns:
cls = registry.get("Database")
if cls:
instance = cls(host="localhost", port=5432)
list()Lists all registered configuration keys.
Returns:
list[str]: List of all registered key nameskeys = registry.list()
print(keys) # ['Database', 'Cache', 'Settings']
clear()Clears all registered configurations.
registry.clear()
print(registry.list()) # []
@config DecoratorThe @config decorator uses the Registry internally:
from coastline import config, Registry
@config
class Database(BaseModel):
host: str
port: int
# Equivalent to:
# Registry.get_instance().register("Database", Database)
You can use the Registry directly for more control:
from coastline import Registry
registry = Registry.get_instance()
# Register classes manually
class Database(BaseModel):
host: str
port: int
registry.register("DB", Database)
# Later, get the class
cls = registry.get("DB")
The Registry can be cleared between tests:
import pytest
from coastline import Registry
@pytest.fixture(autouse=True)
def clean_registry():
Registry.get_instance().clear()
yield
Registry.get_instance().clear()
@config decorator for most cases - it handles registration automatically