feature_flag_manager.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. # Licensed to the Apache Software Foundation (ASF) under one
  2. # or more contributor license agreements. See the NOTICE file
  3. # distributed with this work for additional information
  4. # regarding copyright ownership. The ASF licenses this file
  5. # to you under the Apache License, Version 2.0 (the
  6. # "License"); you may not use this file except in compliance
  7. # with the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing,
  12. # software distributed under the License is distributed on an
  13. # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  14. # KIND, either express or implied. See the License for the
  15. # specific language governing permissions and limitations
  16. # under the License.
  17. from copy import deepcopy
  18. class FeatureFlagManager:
  19. def __init__(self) -> None:
  20. super().__init__()
  21. self._get_feature_flags_func = None
  22. self._feature_flags = None
  23. def init_app(self, app):
  24. self._get_feature_flags_func = app.config.get("GET_FEATURE_FLAGS_FUNC")
  25. self._feature_flags = app.config.get("DEFAULT_FEATURE_FLAGS") or {}
  26. self._feature_flags.update(app.config.get("FEATURE_FLAGS") or {})
  27. def get_feature_flags(self):
  28. if self._get_feature_flags_func:
  29. return self._get_feature_flags_func(deepcopy(self._feature_flags))
  30. return self._feature_flags
  31. def is_feature_enabled(self, feature) -> bool:
  32. """Utility function for checking whether a feature is turned on"""
  33. return self.get_feature_flags().get(feature)