42 lines
1,001 B
Python
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)
|