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