From 49e1ace78bdb1cb98aaa12a9d7bf2301ca6868e1 Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Sat, 21 Jun 2025 14:02:27 +0300 Subject: [PATCH] RuleSet/RuleSetHolder.contains_rules --- src/icmtoolchain/rule_set.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/icmtoolchain/rule_set.py b/src/icmtoolchain/rule_set.py index 65f99d2..0f1c03c 100644 --- a/src/icmtoolchain/rule_set.py +++ b/src/icmtoolchain/rule_set.py @@ -44,6 +44,19 @@ class RuleSet: if value == rule_value: return rule + def contains_rules(self, properties: MutableSequence[str], *rules: str) -> bool: + for rule in rules: + if not rule in self.rules: + return False + value_resolved = False + for rule_value in self.rules[rule]: + if rule_value in properties: + value_resolved = True + break + if not value_resolved: + return False + return True + def bisect_values(self, properties: MutableSequence[str], *values: str) -> None: for value in values: rule = self.rule_of(value) @@ -97,6 +110,9 @@ class RuleSetHolder(metaclass=ABCMeta): self.rule_set.bisect_values(self.properties, *properties) self.update_properties() + def contains_rules(self, *rules: str) -> bool: + return self.rule_set.contains_rules(self.properties, *rules) + def remove_rules(self, *rules: str) -> None: self.rule_set.remove_rules(self.properties, *rules) self.update_properties() @@ -110,6 +126,7 @@ class RuleSetConfig(Config): value = super().get_dict_value(key) if not self.overrides or not key in self.overrides: return value + overriden_value = self.overrides.get_dict_value(key) if isinstance(overriden_value, MutableMapping): if not isinstance(value, MutableMapping): @@ -121,6 +138,7 @@ class RuleSetConfig(Config): config = RuleSetConfig(map=value, overrides=overriden_value) self.set_value_unsafe(key, config) return config + if isinstance(overriden_value, MutableSequence): if not isinstance(value, MutableSequence): return overriden_value