Source code for caspia.gateway.rules.activate

from caspia.meadow import rules, services

from . import activate_button, activate_group
from .filter import RulesFilter

__all__ = ['activate_rule', 'activate_rules']


[docs]def activate_rules(requested_rules, context): def rule_priority(rule): if isinstance(rule, rules.LightGroupAttachRule): return 100 else: return 50 requested_rules = sorted(requested_rules, key=rule_priority, reverse=True) active_rules = set() for rule in requested_rules: if is_rule_enabled(rule, context) and activate_rule(rule, context): active_rules.add(rule) return list(active_rules)
def is_rule_enabled(rule, context): if context.rules_filter == RulesFilter.ALL: return True elif context.rules_filter == RulesFilter.BASIC: if not isinstance(rule, rules.OnDoRule): return False if not isinstance(rule.on, (services.ButtonHoldEvent, services.ButtonClickEvent)): return False if not isinstance(rule.do, services.ButtonTriggerEvent): return False return True else: return False
[docs]def activate_rule(rule, context): if isinstance(rule, rules.OnDoRule): return activate_button.activate_on_do_rule(rule, context) elif isinstance(rule, rules.LightGroupAttachRule): return activate_group.activate_light_group_attach_rule(rule, context) return None