phenotypic.sdk_.register.BaseRegistry#

class phenotypic.sdk_.register.BaseRegistry[source]#

Bases: Generic[T]

Base class for component registries.

Subclasses define _REGISTRY dict and implement register/get/available. Registered classes may define a call_name class attribute; if not set, the class name is used as the default.

Examples

Create a custom registry:

class MyComponentRegistry(BaseRegistry["MyComponent"]):
    _REGISTRY: ClassVar[dict[str, type["MyComponent"]]] = {}
    _registry_name: ClassVar[str] = "component"

@MyComponentRegistry.register
class ConcreteComponent:
    call_name = "concrete"

# Look up by name
cls = MyComponentRegistry.get("concrete")

Methods

__init__

available

Return names of all registered components.

get

Look up registered class by name.

register

Decorator that registers a class by its call_name class attribute.

classmethod register(target_cls: type[T]) type[T][source]#

Decorator that registers a class by its call_name class attribute.

If call_name is not defined on the class, defaults to the class name.

Parameters:

target_cls (type[T]) – The class to register.

Returns:

The registered class (unchanged).

Raises:

ValueError – If a component with the same name is already registered.

Return type:

type[T]

classmethod get(name: str) type[T][source]#

Look up registered class by name.

Parameters:

name (str) – The registered name of the component.

Returns:

The registered class.

Raises:

ValueError – If name is not registered.

Return type:

type[T]

classmethod available() tuple[str, ...][source]#

Return names of all registered components.

Returns:

Tuple of registered component names, sorted alphabetically.

Return type:

tuple[str, …]