mirror of
https://github.com/Andre0512/pyhOn.git
synced 2025-05-23 03:06:54 -04:00
Add rule handling
This commit is contained in:
parent
9971fe95e2
commit
c2765fe953
10 changed files with 133 additions and 10 deletions
|
@ -1,4 +1,7 @@
|
|||
from typing import Dict, Any, List
|
||||
from typing import Dict, Any, List, Tuple, Callable, TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from pyhon.rules import HonRule
|
||||
|
||||
|
||||
class HonParameter:
|
||||
|
@ -9,6 +12,7 @@ class HonParameter:
|
|||
self._mandatory: int = attributes.get("mandatory", 0)
|
||||
self._value: str | float = ""
|
||||
self._group: str = group
|
||||
self._triggers: Dict[str, List[Tuple[Callable, "HonRule"]]] = {}
|
||||
|
||||
@property
|
||||
def key(self) -> str:
|
||||
|
@ -37,3 +41,21 @@ class HonParameter:
|
|||
@property
|
||||
def group(self) -> str:
|
||||
return self._group
|
||||
|
||||
def add_trigger(self, value, func, data):
|
||||
if self._value == value:
|
||||
func(data)
|
||||
self._triggers.setdefault(value, []).append((func, data))
|
||||
|
||||
def check_trigger(self, value) -> None:
|
||||
if str(value) in self._triggers:
|
||||
for trigger in self._triggers[str(value)]:
|
||||
func, args = trigger
|
||||
func(args)
|
||||
|
||||
@property
|
||||
def triggers(self):
|
||||
result = {}
|
||||
for value, rules in self._triggers.items():
|
||||
result[value] = {rule.param_key: rule.param_value for _, rule in rules}
|
||||
return result
|
||||
|
|
|
@ -19,6 +19,10 @@ class HonParameterEnum(HonParameter):
|
|||
def values(self) -> List[str]:
|
||||
return [str(value) for value in self._values]
|
||||
|
||||
@values.setter
|
||||
def values(self, values) -> None:
|
||||
self._values = values
|
||||
|
||||
@property
|
||||
def value(self) -> str | float:
|
||||
return self._value if self._value is not None else self.values[0]
|
||||
|
@ -27,5 +31,6 @@ class HonParameterEnum(HonParameter):
|
|||
def value(self, value: str) -> None:
|
||||
if value in self.values:
|
||||
self._value = value
|
||||
self.check_trigger(value)
|
||||
else:
|
||||
raise ValueError(f"Allowed values {self._value}")
|
||||
raise ValueError(f"Allowed values {self._values}")
|
||||
|
|
|
@ -19,3 +19,4 @@ class HonParameterFixed(HonParameter):
|
|||
def value(self, value: str | float) -> None:
|
||||
# Fixed values seems being not so fixed as thought
|
||||
self._value = value
|
||||
self.check_trigger(value)
|
||||
|
|
|
@ -35,8 +35,12 @@ class HonParameterProgram(HonParameterEnum):
|
|||
values = [v for v in self._programs if all(f not in v for f in self._FILTER)]
|
||||
return sorted(values)
|
||||
|
||||
@values.setter
|
||||
def values(self, values) -> None:
|
||||
return
|
||||
|
||||
@property
|
||||
def ids(self):
|
||||
def ids(self) -> Dict[int, str]:
|
||||
values = {
|
||||
int(p.parameters["prCode"].value): n
|
||||
for i, (n, p) in enumerate(self._programs.items())
|
||||
|
|
|
@ -45,6 +45,7 @@ class HonParameterRange(HonParameter):
|
|||
value = str_to_float(value)
|
||||
if self._min <= value <= self._max and not (value - self._min) % self._step:
|
||||
self._value = value
|
||||
self.check_trigger(value)
|
||||
else:
|
||||
raise ValueError(
|
||||
f"Allowed: min {self._min} max {self._max} step {self._step}"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue