Open stan-dot opened 3 days ago
example implementation
from dotenv import load_dotenv
import os
load_dotenv() # Load environment variables from .env file
class Settings(BaseSettings):
secret_route_enabled: bool = os.getenv('SECRET_ROUTE_ENABLED', 'False').lower() in ('true', '1', 't')
settings = Settings()
settings = Settings()
def feature_flag_enabled(feature_name: str):
def decorator(func):
@wraps(func)
async def wrapper(*args, **kwargs):
if feature_name == 'secret_route' and not settings.secret_route_enabled:
raise HTTPException(status_code=404, detail="Not Found")
return await func(*args, **kwargs)
return wrapper
return decorator
@app.get("/secret", response_class=HTMLResponse)
@feature_flag_enabled('for-i22-November')
async def secret_route(request: Request):
Would allow us a gradual rollout of features using env flags with a fine-grained control between beamlines, with all of them being potentially on the latest version of the main flow.
@DominicOram , @dperl-dls please send some pointers