_param.py
 1  # SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-or-later OR CERN-OHL-S-2.0+ OR Apache-2.0
 2  from .. import rule as _rle, property_ as _prp
 3  
 4  from . import _core
 5  
 6  
 7  class _PrimParam(_prp._Property):
 8      def __init__(self, *, primitive: "_core._Primitive", name: str, allow_none=False, default=None):
 9          super().__init__(name=name, allow_none=allow_none)
10  
11          self._primitive = primitive
12  
13          if default is not None:
14              try:
15                  default = self.cast(default)
16              except TypeError:
17                  raise TypeError(
18                      f"default can't be converted to type '{self.value_type_str}'"
19                  )
20              self.default = default
21  
22      def cast(self, value):
23          if (value is None) and hasattr(self, "default"):
24              return self.default
25          else:
26              return super().cast(value)
27  
28      def __eq__(self, other):
29          equal = super().__eq__(other)
30          if isinstance(equal, _rle.RuleT):
31              return equal
32          else:
33              return (
34                  equal
35                  and isinstance(other, _PrimParam)
36                  and (self._primitive == other._primitive)
37              )