def getFeatureFlag(self, flag_name, active_scopes=()): scopes = list(default_scopes) for scope_name in active_scopes: if scope_name.startswith('user:'******'user:'):]) if person is not None: scopes.append(TeamScope(lambda: person)) else: scopes.append(FixedScope(scope_name)) flag_name = unicode(flag_name) controller = FeatureController( MultiScopeHandler(scopes).lookup, StormFeatureRuleSource()) return controller.getFlag(flag_name)
def makeControllerInScopes(self, scopes): """Make a controller that will report it's in the given scopes.""" call_log = [] def scope_cb(scope): call_log.append(scope) return scope in scopes controller = FeatureController(scope_cb, StormFeatureRuleSource()) return controller, call_log
def make_script_feature_controller(script_name): """Create a `FeatureController` for the named script. You can then install this feature controller using `install_feature_controller`. """ # Avoid circular import. from lp.services.features.flags import FeatureController from lp.services.features.rulesource import StormFeatureRuleSource from lp.services.features.scopes import ScopesForScript return FeatureController( ScopesForScript(script_name).lookup, StormFeatureRuleSource())
def test_getFeatureFlag_ignores_relevant_feature_controller(self): # getFeatureFlag should only consider the scopes it is asked to # consider, not any that happen to be active due to the XML-RPC # request itself. flag_name = u'flag' scope_name = u'scope' self.installFeatureController( FeatureController( MultiScopeHandler([DefaultScope(), FixedScope(scope_name)]).lookup, StormFeatureRuleSource())) set_feature_flag(flag_name, u'1', scope_name) self.assertEqual(None, self.endpoint.getFeatureFlag(flag_name))
def _setUp(self): """Set the feature flags that this fixture is responsible for.""" rule_source = self.makeRuleSource(self.makeNewRules()) original_controller = get_relevant_feature_controller() def scope_lookup(scope_name): request = get_current_browser_request() return ScopesFromRequest(request).lookup(scope_name) if self.override_scope_lookup: scope_lookup = self.override_scope_lookup install_feature_controller(FeatureController(scope_lookup, rule_source)) self.addCleanup(install_feature_controller, original_controller)
def start_request(event): """Register FeatureController.""" event.request.features = FeatureController( ScopesFromRequest(event.request).lookup, StormFeatureRuleSource()) install_feature_controller(event.request.features)