Skip to content

Commit dfc4c9b

Browse files
committed
feat(flags): Use feature flags in configs
- switch behaviors on feature flags instead of config params
1 parent d8d8cd1 commit dfc4c9b

3 files changed

Lines changed: 12 additions & 3 deletions

File tree

src/lsst/cmservice/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from pydantic_settings import BaseSettings, SettingsConfigDict
1818

1919
from .common.enums import ScriptMethodEnum, StatusEnum, WmsComputeSite
20+
from .common.flags import EnabledFeatures
2021

2122
__all__ = ["Configuration", "config"]
2223

@@ -634,6 +635,7 @@ class Configuration(BaseSettings):
634635
slurm: SlurmConfiguration = SlurmConfiguration()
635636
panda: PandaConfiguration = PandaConfiguration()
636637
notifications: NotificationConfiguration = NotificationConfiguration()
638+
features: EnabledFeatures = EnabledFeatures()
637639

638640
# Root fields
639641
script_handler: ScriptMethodEnum = Field(

src/lsst/cmservice/main.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from safir.middleware.x_forwarded import XForwardedMiddleware
99

1010
from . import __version__
11+
from .common.flags import Features
1112
from .config import config
1213
from .db.session import db_session_dependency
1314
from .routers import (
@@ -53,11 +54,13 @@ async def lifespan(app: FastAPI) -> AsyncGenerator:
5354

5455
app.include_router(healthz.health_router, prefix="")
5556
app.include_router(index.router, prefix="")
56-
app.include_router(v1.router, prefix=config.asgi.prefix)
57-
app.include_router(v2.router, prefix=config.asgi.prefix)
57+
if Features.API_V1 in config.features.enabled:
58+
app.include_router(v1.router, prefix=config.asgi.prefix)
59+
if Features.API_V2 in config.features.enabled:
60+
app.include_router(v2.router, prefix=config.asgi.prefix)
5861

5962
# Start the frontend web application.
60-
if config.asgi.enable_frontend:
63+
if Features.WEBAPP_V1 in config.features.enabled:
6164
app.mount(config.asgi.frontend_prefix, web_app)
6265

6366

tests/v2/conftest.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from sqlalchemy.schema import CreateSchema, DropSchema
1515
from testcontainers.postgres import PostgresContainer
1616

17+
from lsst.cmservice.common.flags import Features
1718
from lsst.cmservice.common.types import AnyAsyncSession
1819
from lsst.cmservice.config import config
1920
from lsst.cmservice.db.campaigns_v2 import metadata
@@ -38,6 +39,9 @@ def patched_config(monkeypatch_module: pytest.MonkeyPatch, tmp_path_factory: pyt
3839
target=config.bps, name="artifact_path", value=tmp_path_factory.mktemp("output")
3940
)
4041
monkeypatch_module.setattr(target=config.db, name="echo", value=False)
42+
monkeypatch_module.setattr(
43+
target=config.features, name="enabled", value=Features.API_V2 | Features.DAEMON_V2
44+
)
4145

4246

4347
@pytest_asyncio.fixture(scope="module", loop_scope="module")

0 commit comments

Comments
 (0)