def set_feature_enabled(event, name, state): """Enables/disables a feature for an event :param event: The event. :param name: The name of the feature. :param state: If the feature is enabled or not. :return: Boolean indicating if the state of the feature changed. """ feature_definitions = get_feature_definitions() feature = feature_definitions[name] enabled = get_enabled_features(event) if name in enabled and name not in get_enabled_features( event, only_explicit=True): # if the feature was only implicitly enabled, enable it explicitly enabled.remove(name) names = {name} | feature.requires_deep if (state and names <= enabled) or (not state and name not in enabled): return False if state: funcs = {feature_definitions[x].enabled for x in names - enabled} enabled |= names else: old = set(enabled) enabled -= feature.required_by_deep | {name} funcs = {feature_definitions[x].disabled for x in old - enabled} features_event_settings.set(event, 'enabled', sorted(enabled)) db.session.flush() for func in funcs: func(event) return True
def set_feature_enabled(event, name, state): """Enables/disables a feature for an event :param event: The event. :param name: The name of the feature. :param state: If the feature is enabled or not. :return: Boolean indicating if the state of the feature changed. """ feature_definitions = get_feature_definitions() feature = feature_definitions[name] enabled = get_enabled_features(event) if name in enabled and name not in get_enabled_features(event, only_explicit=True): # if the feature was only implicitly enabled, enable it explicitly enabled.remove(name) names = {name} | feature.requires_deep if (state and names <= enabled) or (not state and name not in enabled): return False if state: funcs = {feature_definitions[x].enabled for x in names - enabled} enabled |= names else: old = set(enabled) enabled -= feature.required_by_deep | {name} funcs = {feature_definitions[x].disabled for x in old - enabled} features_event_settings.set(event, 'enabled', sorted(enabled)) db.session.flush() for func in funcs: func(event) return True
def set_feature_enabled(event, name, state): """Enables/disables a feature for an event :param event: The event. :param name: The name of the feature. :param state: If the feature is enabled or not. :return: Boolean indicating if the state of the feature changed. """ feature = get_feature_definition(name) enabled = get_enabled_features(event) if (name in enabled) == state: return False if state: enabled.add(name) func = feature.enabled else: enabled.discard(name) func = feature.disabled features_event_settings.set(event, 'enabled', sorted(enabled)) db.session.flush() func(event) return True