infrasynth-backend-kit/infrasynth/features/registry.py
2026-08-28 14:38:47 -05:00

42 lines
1,001 B
Python

import logging
from dataclasses import dataclass
logger = logging.getLogger(__name__)
@dataclass
class FeatureDefinition:
slug: str
name: str = ""
description: str = ""
default: bool = True
category: str | None = None
class FeatureRegistry:
"""Registry where every app registers its feature flags in apps.py:ready()."""
_features: dict[str, FeatureDefinition] = {}
@classmethod
def register(
cls,
slug: str,
*,
name: str = "",
description: str = "",
default: bool = True,
category: str | None = None,
):
cls._features[slug] = FeatureDefinition(
slug=slug,
name=name or slug,
description=description,
default=default,
category=category,
)
logger.debug(f"Feature flag registered: {slug} (default={default})")
@classmethod
def get_all(cls) -> dict[str, FeatureDefinition]:
return dict(cls._features)