odxtools 9.7.0__py3-none-any.whl → 10.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. odxtools/additionalaudience.py +3 -3
  2. odxtools/admindata.py +8 -8
  3. odxtools/audience.py +10 -10
  4. odxtools/basecomparam.py +5 -5
  5. odxtools/basevariantpattern.py +4 -5
  6. odxtools/basicstructure.py +8 -8
  7. odxtools/cli/_print_utils.py +35 -23
  8. odxtools/cli/browse.py +9 -9
  9. odxtools/cli/compare.py +24 -24
  10. odxtools/cli/decode.py +3 -4
  11. odxtools/cli/find.py +4 -5
  12. odxtools/cli/list.py +7 -7
  13. odxtools/cli/main.py +2 -2
  14. odxtools/cli/snoop.py +3 -3
  15. odxtools/codec.py +3 -3
  16. odxtools/commrelation.py +11 -11
  17. odxtools/companydata.py +5 -5
  18. odxtools/companydocinfo.py +8 -8
  19. odxtools/companyrevisioninfo.py +5 -5
  20. odxtools/companyspecificinfo.py +5 -5
  21. odxtools/comparam.py +3 -3
  22. odxtools/comparaminstance.py +10 -10
  23. odxtools/comparamspec.py +3 -3
  24. odxtools/comparamsubset.py +5 -5
  25. odxtools/complexcomparam.py +7 -7
  26. odxtools/compositecodec.py +11 -11
  27. odxtools/compumethods/compucodecompumethod.py +4 -4
  28. odxtools/compumethods/compuconst.py +4 -5
  29. odxtools/compumethods/compudefaultvalue.py +1 -2
  30. odxtools/compumethods/compuinternaltophys.py +6 -6
  31. odxtools/compumethods/compumethod.py +5 -5
  32. odxtools/compumethods/compuphystointernal.py +6 -6
  33. odxtools/compumethods/compurationalcoeffs.py +4 -4
  34. odxtools/compumethods/compuscale.py +9 -10
  35. odxtools/compumethods/createanycompumethod.py +1 -2
  36. odxtools/compumethods/identicalcompumethod.py +1 -2
  37. odxtools/compumethods/limit.py +12 -12
  38. odxtools/compumethods/linearcompumethod.py +2 -2
  39. odxtools/compumethods/linearsegment.py +14 -15
  40. odxtools/compumethods/ratfunccompumethod.py +3 -3
  41. odxtools/compumethods/ratfuncsegment.py +7 -8
  42. odxtools/compumethods/scalelinearcompumethod.py +7 -7
  43. odxtools/compumethods/scaleratfunccompumethod.py +4 -4
  44. odxtools/compumethods/tabintpcompumethod.py +15 -18
  45. odxtools/compumethods/texttablecompumethod.py +3 -3
  46. odxtools/createanycomparam.py +2 -4
  47. odxtools/createanydiagcodedtype.py +1 -2
  48. odxtools/database.py +9 -8
  49. odxtools/dataobjectproperty.py +10 -10
  50. odxtools/decodestate.py +5 -5
  51. odxtools/description.py +5 -5
  52. odxtools/determinenumberofitems.py +4 -4
  53. odxtools/diagcodedtype.py +7 -7
  54. odxtools/diagcomm.py +17 -17
  55. odxtools/diagdatadictionaryspec.py +6 -6
  56. odxtools/diaglayercontainer.py +4 -4
  57. odxtools/diaglayers/basevariant.py +10 -9
  58. odxtools/diaglayers/basevariantraw.py +9 -9
  59. odxtools/diaglayers/diaglayer.py +20 -19
  60. odxtools/diaglayers/diaglayerraw.py +10 -10
  61. odxtools/diaglayers/diaglayertype.py +1 -2
  62. odxtools/diaglayers/ecushareddata.py +4 -4
  63. odxtools/diaglayers/ecushareddataraw.py +6 -6
  64. odxtools/diaglayers/ecuvariant.py +11 -10
  65. odxtools/diaglayers/ecuvariantraw.py +9 -9
  66. odxtools/diaglayers/functionalgroup.py +8 -7
  67. odxtools/diaglayers/functionalgroupraw.py +7 -7
  68. odxtools/diaglayers/hierarchyelement.py +43 -49
  69. odxtools/diaglayers/hierarchyelementraw.py +4 -4
  70. odxtools/diaglayers/protocol.py +4 -4
  71. odxtools/diaglayers/protocolraw.py +6 -6
  72. odxtools/diagnostictroublecode.py +8 -8
  73. odxtools/diagservice.py +18 -18
  74. odxtools/diagvariable.py +14 -14
  75. odxtools/docrevision.py +11 -11
  76. odxtools/dopbase.py +6 -6
  77. odxtools/dtcconnector.py +3 -3
  78. odxtools/dtcdop.py +13 -9
  79. odxtools/dynamicendmarkerfield.py +5 -4
  80. odxtools/dynamiclengthfield.py +5 -4
  81. odxtools/dyndefinedspec.py +5 -5
  82. odxtools/dynenddopref.py +5 -5
  83. odxtools/dyniddefmodeinfo.py +13 -13
  84. odxtools/ecuvariantpattern.py +4 -5
  85. odxtools/element.py +5 -6
  86. odxtools/encodestate.py +11 -11
  87. odxtools/encoding.py +2 -3
  88. odxtools/endofpdufield.py +6 -6
  89. odxtools/envdataconnector.py +3 -3
  90. odxtools/environmentdata.py +3 -4
  91. odxtools/environmentdatadescription.py +11 -11
  92. odxtools/exceptions.py +5 -5
  93. odxtools/externalaccessmethod.py +1 -2
  94. odxtools/externaldoc.py +4 -4
  95. odxtools/field.py +9 -10
  96. odxtools/functionalclass.py +4 -4
  97. odxtools/inputparam.py +6 -6
  98. odxtools/internalconstr.py +4 -5
  99. odxtools/isotp_state_machine.py +12 -11
  100. odxtools/leadinglengthinfotype.py +2 -3
  101. odxtools/library.py +5 -5
  102. odxtools/linkeddtcdop.py +4 -4
  103. odxtools/loadfile.py +5 -6
  104. odxtools/matchingbasevariantparameter.py +2 -3
  105. odxtools/matchingparameter.py +7 -7
  106. odxtools/minmaxlengthtype.py +4 -4
  107. odxtools/modification.py +4 -4
  108. odxtools/multiplexer.py +11 -11
  109. odxtools/multiplexercase.py +6 -6
  110. odxtools/multiplexerdefaultcase.py +6 -6
  111. odxtools/multiplexerswitchkey.py +4 -4
  112. odxtools/nameditemlist.py +14 -14
  113. odxtools/negoutputparam.py +3 -3
  114. odxtools/obd.py +1 -2
  115. odxtools/odxcategory.py +6 -6
  116. odxtools/odxlink.py +19 -20
  117. odxtools/odxtypes.py +21 -18
  118. odxtools/outputparam.py +4 -4
  119. odxtools/parameterinfo.py +1 -1
  120. odxtools/parameters/codedconstparameter.py +5 -5
  121. odxtools/parameters/createanyparameter.py +1 -2
  122. odxtools/parameters/dynamicparameter.py +2 -3
  123. odxtools/parameters/lengthkeyparameter.py +5 -5
  124. odxtools/parameters/matchingrequestparameter.py +3 -4
  125. odxtools/parameters/nrcconstparameter.py +7 -7
  126. odxtools/parameters/parameter.py +11 -11
  127. odxtools/parameters/parameterwithdop.py +9 -9
  128. odxtools/parameters/physicalconstantparameter.py +4 -4
  129. odxtools/parameters/reservedparameter.py +3 -4
  130. odxtools/parameters/systemparameter.py +2 -3
  131. odxtools/parameters/tableentryparameter.py +3 -3
  132. odxtools/parameters/tablekeyparameter.py +10 -10
  133. odxtools/parameters/tablestructparameter.py +7 -7
  134. odxtools/parameters/valueparameter.py +7 -7
  135. odxtools/paramlengthinfotype.py +5 -3
  136. odxtools/parentref.py +9 -9
  137. odxtools/physicaldimension.py +11 -11
  138. odxtools/physicaltype.py +3 -4
  139. odxtools/posresponsesuppressible.py +9 -10
  140. odxtools/preconditionstateref.py +7 -7
  141. odxtools/progcode.py +6 -6
  142. odxtools/protstack.py +4 -4
  143. odxtools/relateddiagcommref.py +1 -2
  144. odxtools/relateddoc.py +6 -6
  145. odxtools/request.py +9 -9
  146. odxtools/response.py +10 -10
  147. odxtools/scaleconstr.py +3 -4
  148. odxtools/servicebinner.py +5 -5
  149. odxtools/singleecujob.py +4 -4
  150. odxtools/snrefcontext.py +2 -2
  151. odxtools/specialdata.py +5 -5
  152. odxtools/specialdatagroup.py +9 -9
  153. odxtools/specialdatagroupcaption.py +3 -3
  154. odxtools/standardlengthtype.py +10 -10
  155. odxtools/state.py +3 -3
  156. odxtools/statechart.py +4 -4
  157. odxtools/statemachine.py +4 -3
  158. odxtools/statetransition.py +4 -4
  159. odxtools/statetransitionref.py +18 -18
  160. odxtools/staticfield.py +5 -4
  161. odxtools/structure.py +2 -3
  162. odxtools/subcomponent.py +5 -5
  163. odxtools/subcomponentparamconnector.py +5 -5
  164. odxtools/subcomponentpattern.py +4 -4
  165. odxtools/swvariable.py +3 -4
  166. odxtools/table.py +14 -14
  167. odxtools/tablediagcommconnector.py +5 -5
  168. odxtools/tablerow.py +30 -30
  169. odxtools/tablerowconnector.py +3 -3
  170. odxtools/teammember.py +11 -11
  171. odxtools/text.py +2 -3
  172. odxtools/uds.py +2 -3
  173. odxtools/unit.py +9 -9
  174. odxtools/unitgroup.py +5 -5
  175. odxtools/unitspec.py +6 -6
  176. odxtools/utils.py +3 -3
  177. odxtools/variablegroup.py +2 -2
  178. odxtools/variantmatcher.py +10 -10
  179. odxtools/variantpattern.py +3 -3
  180. odxtools/version.py +2 -2
  181. odxtools/writepdxfile.py +5 -5
  182. odxtools/xdoc.py +9 -9
  183. {odxtools-9.7.0.dist-info → odxtools-10.0.0.dist-info}/METADATA +4 -5
  184. odxtools-10.0.0.dist-info/RECORD +264 -0
  185. odxtools-9.7.0.dist-info/RECORD +0 -264
  186. {odxtools-9.7.0.dist-info → odxtools-10.0.0.dist-info}/WHEEL +0 -0
  187. {odxtools-9.7.0.dist-info → odxtools-10.0.0.dist-info}/entry_points.txt +0 -0
  188. {odxtools-9.7.0.dist-info → odxtools-10.0.0.dist-info}/licenses/LICENSE +0 -0
  189. {odxtools-9.7.0.dist-info → odxtools-10.0.0.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  import warnings
3
3
  from dataclasses import dataclass
4
- from typing import Any, Dict, List, Optional, cast
4
+ from typing import Any, cast
5
5
  from xml.etree import ElementTree
6
6
 
7
7
  from typing_extensions import override
@@ -45,7 +45,7 @@ class CodedConstParameter(Parameter):
45
45
  @staticmethod
46
46
  @override
47
47
  def from_et(et_element: ElementTree.Element,
48
- doc_frags: List[OdxDocFragment]) -> "CodedConstParameter":
48
+ doc_frags: list[OdxDocFragment]) -> "CodedConstParameter":
49
49
 
50
50
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
51
51
 
@@ -61,7 +61,7 @@ class CodedConstParameter(Parameter):
61
61
  AtomicOdxType, self.diag_coded_type.base_data_type.from_string(self.coded_value_raw))
62
62
 
63
63
  @override
64
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
64
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
65
65
  result = super()._build_odxlinks()
66
66
 
67
67
  result.update(self.diag_coded_type._build_odxlinks())
@@ -69,7 +69,7 @@ class CodedConstParameter(Parameter):
69
69
  return result
70
70
 
71
71
  @override
72
- def get_static_bit_length(self) -> Optional[int]:
72
+ def get_static_bit_length(self) -> int | None:
73
73
  return self.diag_coded_type.get_static_bit_length()
74
74
 
75
75
  @property
@@ -77,7 +77,7 @@ class CodedConstParameter(Parameter):
77
77
  return self.diag_coded_type.base_data_type
78
78
 
79
79
  @override
80
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
80
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
81
81
  encode_state: EncodeState) -> None:
82
82
  if physical_value is not None and physical_value != self.coded_value:
83
83
  odxraise(
@@ -1,5 +1,4 @@
1
1
  # SPDX-License-Identifier: MIT
2
- from typing import List
3
2
  from xml.etree import ElementTree
4
3
 
5
4
  from ..exceptions import odxraise
@@ -21,7 +20,7 @@ from .valueparameter import ValueParameter
21
20
 
22
21
 
23
22
  def create_any_parameter_from_et(et_element: ElementTree.Element,
24
- doc_frags: List[OdxDocFragment]) \
23
+ doc_frags: list[OdxDocFragment]) \
25
24
  -> Parameter:
26
25
  parameter_type = et_element.get(f"{xsi}type")
27
26
 
@@ -1,6 +1,5 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import List, Optional
4
3
  from xml.etree import ElementTree
5
4
 
6
5
  from typing_extensions import override
@@ -34,14 +33,14 @@ class DynamicParameter(Parameter):
34
33
  @staticmethod
35
34
  @override
36
35
  def from_et(et_element: ElementTree.Element,
37
- doc_frags: List[OdxDocFragment]) -> "DynamicParameter":
36
+ doc_frags: list[OdxDocFragment]) -> "DynamicParameter":
38
37
 
39
38
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
40
39
 
41
40
  return DynamicParameter(**kwargs)
42
41
 
43
42
  @override
44
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
43
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
45
44
  encode_state: EncodeState) -> None:
46
45
  raise NotImplementedError("Encoding DynamicParameter is not implemented yet.")
47
46
 
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import Any, Dict, List, Optional
3
+ from typing import Any
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import final, override
@@ -49,7 +49,7 @@ class LengthKeyParameter(ParameterWithDOP):
49
49
  @staticmethod
50
50
  @override
51
51
  def from_et(et_element: ElementTree.Element,
52
- doc_frags: List[OdxDocFragment]) -> "LengthKeyParameter":
52
+ doc_frags: list[OdxDocFragment]) -> "LengthKeyParameter":
53
53
 
54
54
  kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, doc_frags))
55
55
 
@@ -58,7 +58,7 @@ class LengthKeyParameter(ParameterWithDOP):
58
58
  return LengthKeyParameter(odx_id=odx_id, **kwargs)
59
59
 
60
60
  @override
61
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
61
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
62
62
  result = super()._build_odxlinks()
63
63
 
64
64
  result[self.odx_id] = self
@@ -67,7 +67,7 @@ class LengthKeyParameter(ParameterWithDOP):
67
67
 
68
68
  @override
69
69
  @final
70
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
70
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
71
71
  encode_state: EncodeState) -> None:
72
72
  # if you get this exception, you ought to use
73
73
  # `.encode_placeholder_into_pdu()` followed by (after the
@@ -75,7 +75,7 @@ class LengthKeyParameter(ParameterWithDOP):
75
75
  # `.encode_value_into_pdu()`.
76
76
  raise RuntimeError("_encode_positioned_into_pdu() cannot be called for length keys.")
77
77
 
78
- def encode_placeholder_into_pdu(self, physical_value: Optional[ParameterValue],
78
+ def encode_placeholder_into_pdu(self, physical_value: ParameterValue | None,
79
79
  encode_state: EncodeState) -> None:
80
80
 
81
81
  if physical_value is not None:
@@ -1,6 +1,5 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import List, Optional
4
3
  from xml.etree import ElementTree
5
4
 
6
5
  from typing_extensions import override
@@ -37,7 +36,7 @@ class MatchingRequestParameter(Parameter):
37
36
  @staticmethod
38
37
  @override
39
38
  def from_et(et_element: ElementTree.Element,
40
- doc_frags: List[OdxDocFragment]) -> "MatchingRequestParameter":
39
+ doc_frags: list[OdxDocFragment]) -> "MatchingRequestParameter":
41
40
 
42
41
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
43
42
 
@@ -48,11 +47,11 @@ class MatchingRequestParameter(Parameter):
48
47
  request_byte_position=request_byte_position, byte_length=byte_length, **kwargs)
49
48
 
50
49
  @override
51
- def get_static_bit_length(self) -> Optional[int]:
50
+ def get_static_bit_length(self) -> int | None:
52
51
  return 8 * self.byte_length
53
52
 
54
53
  @override
55
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
54
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
56
55
  encode_state: EncodeState) -> None:
57
56
  if encode_state.triggering_request is None:
58
57
  odxraise(
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import Any, Dict, List, Optional
3
+ from typing import Any
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import override
@@ -34,7 +34,7 @@ class NrcConstParameter(Parameter):
34
34
 
35
35
  """
36
36
 
37
- coded_values_raw: List[str]
37
+ coded_values_raw: list[str]
38
38
  diag_coded_type: DiagCodedType
39
39
 
40
40
  @property
@@ -57,13 +57,13 @@ class NrcConstParameter(Parameter):
57
57
  return self.diag_coded_type.base_data_type
58
58
 
59
59
  @property
60
- def coded_values(self) -> List[AtomicOdxType]:
60
+ def coded_values(self) -> list[AtomicOdxType]:
61
61
  return self._coded_values
62
62
 
63
63
  @staticmethod
64
64
  @override
65
65
  def from_et(et_element: ElementTree.Element,
66
- doc_frags: List[OdxDocFragment]) -> "NrcConstParameter":
66
+ doc_frags: list[OdxDocFragment]) -> "NrcConstParameter":
67
67
 
68
68
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
69
69
 
@@ -82,7 +82,7 @@ class NrcConstParameter(Parameter):
82
82
  ]
83
83
 
84
84
  @override
85
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
85
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
86
86
  result = super()._build_odxlinks()
87
87
 
88
88
  result.update(self.diag_coded_type._build_odxlinks())
@@ -90,11 +90,11 @@ class NrcConstParameter(Parameter):
90
90
  return result
91
91
 
92
92
  @override
93
- def get_static_bit_length(self) -> Optional[int]:
93
+ def get_static_bit_length(self) -> int | None:
94
94
  return self.diag_coded_type.get_static_bit_length()
95
95
 
96
96
  @override
97
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
97
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
98
98
  encode_state: EncodeState) -> None:
99
99
  # NRC-CONST parameters are not encoding any value on its
100
100
  # own. instead, it is supposed to overlap with a value
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import Any, Dict, List, Literal, Optional
3
+ from typing import Any, Literal
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import final, override
@@ -42,11 +42,11 @@ class Parameter(NamedElement):
42
42
  non-positionable parameter types.
43
43
 
44
44
  """
45
- sdgs: List[SpecialDataGroup]
46
- semantic: Optional[str]
47
- oid: Optional[str]
48
- byte_position: Optional[int]
49
- bit_position: Optional[int]
45
+ sdgs: list[SpecialDataGroup]
46
+ semantic: str | None
47
+ oid: str | None
48
+ byte_position: int | None
49
+ bit_position: int | None
50
50
 
51
51
  @property
52
52
  def parameter_type(self) -> ParameterType:
@@ -78,7 +78,7 @@ class Parameter(NamedElement):
78
78
 
79
79
  @staticmethod
80
80
  @override
81
- def from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment]) -> "Parameter":
81
+ def from_et(et_element: ElementTree.Element, doc_frags: list[OdxDocFragment]) -> "Parameter":
82
82
 
83
83
  kwargs = dataclass_fields_asdict(NamedElement.from_et(et_element, doc_frags))
84
84
 
@@ -100,7 +100,7 @@ class Parameter(NamedElement):
100
100
  bit_position=bit_position,
101
101
  **kwargs)
102
102
 
103
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
103
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
104
104
  result = {}
105
105
 
106
106
  for sdg in self.sdgs:
@@ -116,11 +116,11 @@ class Parameter(NamedElement):
116
116
  for sdg in self.sdgs:
117
117
  sdg._resolve_snrefs(context)
118
118
 
119
- def get_static_bit_length(self) -> Optional[int]:
119
+ def get_static_bit_length(self) -> int | None:
120
120
  return None
121
121
 
122
122
  @final
123
- def encode_into_pdu(self, physical_value: Optional[ParameterValue],
123
+ def encode_into_pdu(self, physical_value: ParameterValue | None,
124
124
  encode_state: EncodeState) -> None:
125
125
  """Convert a physical value into its encoded form and place it
126
126
  into the PDU
@@ -140,7 +140,7 @@ class Parameter(NamedElement):
140
140
 
141
141
  encode_state.cursor_bit_position = 0
142
142
 
143
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
143
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
144
144
  encode_state: EncodeState) -> None:
145
145
  """Method which actually encodes the parameter
146
146
 
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import Any, Dict, List, Optional, cast
3
+ from typing import Any, cast
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import override
@@ -21,8 +21,8 @@ from .parameter import Parameter
21
21
 
22
22
  @dataclass
23
23
  class ParameterWithDOP(Parameter):
24
- dop_ref: Optional[OdxLinkRef]
25
- dop_snref: Optional[str]
24
+ dop_ref: OdxLinkRef | None
25
+ dop_snref: str | None
26
26
 
27
27
  @property
28
28
  def dop(self) -> DopBase:
@@ -33,7 +33,7 @@ class ParameterWithDOP(Parameter):
33
33
  @staticmethod
34
34
  @override
35
35
  def from_et(et_element: ElementTree.Element,
36
- doc_frags: List[OdxDocFragment]) -> "ParameterWithDOP":
36
+ doc_frags: list[OdxDocFragment]) -> "ParameterWithDOP":
37
37
 
38
38
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
39
39
 
@@ -50,7 +50,7 @@ class ParameterWithDOP(Parameter):
50
50
  self._dop: DopBase
51
51
 
52
52
  @override
53
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
53
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
54
54
  return super()._build_odxlinks()
55
55
 
56
56
  @override
@@ -70,21 +70,21 @@ class ParameterWithDOP(Parameter):
70
70
  self._dop = resolve_snref(self.dop_snref, ddds.all_data_object_properties, DopBase)
71
71
 
72
72
  @override
73
- def get_static_bit_length(self) -> Optional[int]:
73
+ def get_static_bit_length(self) -> int | None:
74
74
  if self._dop is not None:
75
75
  return self._dop.get_static_bit_length()
76
76
  else:
77
77
  return None
78
78
 
79
79
  @property
80
- def physical_type(self) -> Optional[PhysicalType]:
81
- if isinstance(self.dop, (DataObjectProperty, DtcDop)):
80
+ def physical_type(self) -> PhysicalType | None:
81
+ if isinstance(self.dop, DataObjectProperty | DtcDop):
82
82
  return self.dop.physical_type
83
83
  else:
84
84
  return None
85
85
 
86
86
  @override
87
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
87
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
88
88
  encode_state: EncodeState) -> None:
89
89
  self.dop.encode_into_pdu(cast(AtomicOdxType, physical_value), encode_state)
90
90
 
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import Any, Dict, List, Optional
3
+ from typing import Any
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import override
@@ -43,7 +43,7 @@ class PhysicalConstantParameter(ParameterWithDOP):
43
43
  @staticmethod
44
44
  @override
45
45
  def from_et(et_element: ElementTree.Element,
46
- doc_frags: List[OdxDocFragment]) -> "PhysicalConstantParameter":
46
+ doc_frags: list[OdxDocFragment]) -> "PhysicalConstantParameter":
47
47
 
48
48
  kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, doc_frags))
49
49
 
@@ -53,7 +53,7 @@ class PhysicalConstantParameter(ParameterWithDOP):
53
53
  physical_constant_value_raw=physical_constant_value_raw, **kwargs)
54
54
 
55
55
  @override
56
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
56
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
57
57
  return super()._build_odxlinks()
58
58
 
59
59
  @override
@@ -72,7 +72,7 @@ class PhysicalConstantParameter(ParameterWithDOP):
72
72
  self._physical_constant_value = base_data_type.from_string(self.physical_constant_value_raw)
73
73
 
74
74
  @override
75
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
75
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
76
76
  encode_state: EncodeState) -> None:
77
77
  if physical_value is not None and physical_value != self.physical_constant_value:
78
78
  odxraise(
@@ -1,6 +1,5 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import List, Optional
4
3
  from xml.etree import ElementTree
5
4
 
6
5
  from typing_extensions import override
@@ -36,7 +35,7 @@ class ReservedParameter(Parameter):
36
35
  @staticmethod
37
36
  @override
38
37
  def from_et(et_element: ElementTree.Element,
39
- doc_frags: List[OdxDocFragment]) -> "ReservedParameter":
38
+ doc_frags: list[OdxDocFragment]) -> "ReservedParameter":
40
39
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
41
40
 
42
41
  bit_length = int(odxrequire(et_element.findtext("BIT-LENGTH")))
@@ -44,11 +43,11 @@ class ReservedParameter(Parameter):
44
43
  return ReservedParameter(bit_length=bit_length, **kwargs)
45
44
 
46
45
  @override
47
- def get_static_bit_length(self) -> Optional[int]:
46
+ def get_static_bit_length(self) -> int | None:
48
47
  return self.bit_length
49
48
 
50
49
  @override
51
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
50
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
52
51
  encode_state: EncodeState) -> None:
53
52
  encode_state.cursor_byte_position += (encode_state.cursor_bit_position + self.bit_length +
54
53
  7) // 8
@@ -2,7 +2,6 @@
2
2
  import getpass
3
3
  from dataclasses import dataclass
4
4
  from datetime import datetime
5
- from typing import List, Optional
6
5
  from xml.etree import ElementTree
7
6
 
8
7
  from typing_extensions import override
@@ -50,7 +49,7 @@ class SystemParameter(ParameterWithDOP):
50
49
  @staticmethod
51
50
  @override
52
51
  def from_et(et_element: ElementTree.Element,
53
- doc_frags: List[OdxDocFragment]) -> "SystemParameter":
52
+ doc_frags: list[OdxDocFragment]) -> "SystemParameter":
54
53
  kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, doc_frags))
55
54
 
56
55
  sysparam = odxrequire(et_element.get("SYSPARAM"))
@@ -58,7 +57,7 @@ class SystemParameter(ParameterWithDOP):
58
57
  return SystemParameter(sysparam=sysparam, **kwargs)
59
58
 
60
59
  @override
61
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
60
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
62
61
  encode_state: EncodeState) -> None:
63
62
  if physical_value is None:
64
63
  # determine the value to be encoded automatically
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import TYPE_CHECKING, List, Optional, cast
3
+ from typing import TYPE_CHECKING, cast
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import override
@@ -45,7 +45,7 @@ class TableEntryParameter(Parameter):
45
45
  @staticmethod
46
46
  @override
47
47
  def from_et(et_element: ElementTree.Element,
48
- doc_frags: List[OdxDocFragment]) -> "TableEntryParameter":
48
+ doc_frags: list[OdxDocFragment]) -> "TableEntryParameter":
49
49
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
50
50
 
51
51
  target_str = odxrequire(et_element.findtext("TARGET"))
@@ -68,7 +68,7 @@ class TableEntryParameter(Parameter):
68
68
  self._table_row = odxlinks.resolve(self.table_row_ref)
69
69
 
70
70
  @override
71
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
71
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
72
72
  encode_state: EncodeState) -> None:
73
73
  raise NotImplementedError("Encoding a TableEntryParameter is not implemented yet.")
74
74
 
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import TYPE_CHECKING, Any, Dict, List, Optional
3
+ from typing import TYPE_CHECKING, Any, Optional
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import final, override
@@ -26,18 +26,18 @@ class TableKeyParameter(Parameter):
26
26
 
27
27
  # the spec mandates that exactly one of the two attributes must
28
28
  # be non-None
29
- table_ref: Optional[OdxLinkRef]
30
- table_snref: Optional[str]
29
+ table_ref: OdxLinkRef | None
30
+ table_snref: str | None
31
31
 
32
32
  # the spec mandates that exactly one of the two attributes must
33
33
  # be non-None
34
- table_row_ref: Optional[OdxLinkRef]
35
- table_row_snref: Optional[str]
34
+ table_row_ref: OdxLinkRef | None
35
+ table_row_snref: str | None
36
36
 
37
37
  @staticmethod
38
38
  @override
39
39
  def from_et(et_element: ElementTree.Element,
40
- doc_frags: List[OdxDocFragment]) -> "TableKeyParameter":
40
+ doc_frags: list[OdxDocFragment]) -> "TableKeyParameter":
41
41
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
42
42
 
43
43
  odx_id = odxrequire(OdxLinkId.from_et(et_element, doc_frags))
@@ -62,7 +62,7 @@ class TableKeyParameter(Parameter):
62
62
 
63
63
  def __post_init__(self) -> None:
64
64
  self._table: Table
65
- self._table_row: Optional[TableRow] = None
65
+ self._table_row: TableRow | None = None
66
66
 
67
67
  @property
68
68
  @override
@@ -70,7 +70,7 @@ class TableKeyParameter(Parameter):
70
70
  return "TABLE-KEY"
71
71
 
72
72
  @override
73
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
73
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
74
74
  result = super()._build_odxlinks()
75
75
 
76
76
  result[self.odx_id] = self
@@ -143,7 +143,7 @@ class TableKeyParameter(Parameter):
143
143
 
144
144
  @override
145
145
  @final
146
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
146
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
147
147
  encode_state: EncodeState) -> None:
148
148
  # if you get this exception, you ought to use
149
149
  # `.encode_placeholder_into_pdu()` followed by (after the
@@ -151,7 +151,7 @@ class TableKeyParameter(Parameter):
151
151
  # `.encode_value_into_pdu()`.
152
152
  raise RuntimeError("_encode_positioned_into_pdu() cannot be called for table keys.")
153
153
 
154
- def encode_placeholder_into_pdu(self, physical_value: Optional[ParameterValue],
154
+ def encode_placeholder_into_pdu(self, physical_value: ParameterValue | None,
155
155
  encode_state: EncodeState) -> None:
156
156
 
157
157
  if physical_value is not None:
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
3
+ from typing import TYPE_CHECKING, Any, cast
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import override
@@ -21,8 +21,8 @@ if TYPE_CHECKING:
21
21
 
22
22
  @dataclass
23
23
  class TableStructParameter(Parameter):
24
- table_key_ref: Optional[OdxLinkRef]
25
- table_key_snref: Optional[str]
24
+ table_key_ref: OdxLinkRef | None
25
+ table_key_snref: str | None
26
26
 
27
27
  @property
28
28
  @override
@@ -50,7 +50,7 @@ class TableStructParameter(Parameter):
50
50
  @staticmethod
51
51
  @override
52
52
  def from_et(et_element: ElementTree.Element,
53
- doc_frags: List[OdxDocFragment]) -> "TableStructParameter":
53
+ doc_frags: list[OdxDocFragment]) -> "TableStructParameter":
54
54
 
55
55
  kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
56
56
 
@@ -67,7 +67,7 @@ class TableStructParameter(Parameter):
67
67
  odxraise("Either table_key_ref or table_key_snref must be defined.")
68
68
 
69
69
  @override
70
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
70
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
71
71
  return super()._build_odxlinks()
72
72
 
73
73
  @override
@@ -86,10 +86,10 @@ class TableStructParameter(Parameter):
86
86
  TableKeyParameter)
87
87
 
88
88
  @override
89
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
89
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
90
90
  encode_state: EncodeState) -> None:
91
91
 
92
- if not isinstance(physical_value, (tuple, list)) or \
92
+ if not isinstance(physical_value, tuple|list) or \
93
93
  len(physical_value) != 2 or \
94
94
  not isinstance(physical_value[0], str):
95
95
  odxraise(
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import Any, Dict, List, Optional
3
+ from typing import Any
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import override
@@ -18,7 +18,7 @@ from .parameterwithdop import ParameterWithDOP
18
18
 
19
19
  @dataclass
20
20
  class ValueParameter(ParameterWithDOP):
21
- physical_default_value_raw: Optional[str]
21
+ physical_default_value_raw: str | None
22
22
 
23
23
  @property
24
24
  @override
@@ -26,7 +26,7 @@ class ValueParameter(ParameterWithDOP):
26
26
  return "VALUE"
27
27
 
28
28
  @property
29
- def physical_default_value(self) -> Optional[AtomicOdxType]:
29
+ def physical_default_value(self) -> AtomicOdxType | None:
30
30
  return self._physical_default_value
31
31
 
32
32
  @property
@@ -42,7 +42,7 @@ class ValueParameter(ParameterWithDOP):
42
42
  @staticmethod
43
43
  @override
44
44
  def from_et(et_element: ElementTree.Element,
45
- doc_frags: List[OdxDocFragment]) -> "ValueParameter":
45
+ doc_frags: list[OdxDocFragment]) -> "ValueParameter":
46
46
 
47
47
  kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, doc_frags))
48
48
 
@@ -51,10 +51,10 @@ class ValueParameter(ParameterWithDOP):
51
51
  return ValueParameter(physical_default_value_raw=physical_default_value_raw, **kwargs)
52
52
 
53
53
  def __post_init__(self) -> None:
54
- self._physical_default_value: Optional[AtomicOdxType] = None
54
+ self._physical_default_value: AtomicOdxType | None = None
55
55
 
56
56
  @override
57
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
57
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
58
58
  return super()._build_odxlinks()
59
59
 
60
60
  @override
@@ -75,7 +75,7 @@ class ValueParameter(ParameterWithDOP):
75
75
  self.physical_default_value_raw)
76
76
 
77
77
  @override
78
- def _encode_positioned_into_pdu(self, physical_value: Optional[ParameterValue],
78
+ def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
79
79
  encode_state: EncodeState) -> None:
80
80
 
81
81
  if physical_value is None:
@@ -1,6 +1,6 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import TYPE_CHECKING, Any, Dict, List, cast
3
+ from typing import TYPE_CHECKING, Any, cast
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from typing_extensions import override
@@ -33,7 +33,7 @@ class ParamLengthInfoType(DiagCodedType):
33
33
  @staticmethod
34
34
  @override
35
35
  def from_et(et_element: ElementTree.Element,
36
- doc_frags: List[OdxDocFragment]) -> "ParamLengthInfoType":
36
+ doc_frags: list[OdxDocFragment]) -> "ParamLengthInfoType":
37
37
  kwargs = dataclass_fields_asdict(DiagCodedType.from_et(et_element, doc_frags))
38
38
 
39
39
  length_key_ref = odxrequire(
@@ -41,7 +41,7 @@ class ParamLengthInfoType(DiagCodedType):
41
41
 
42
42
  return ParamLengthInfoType(length_key_ref=length_key_ref, **kwargs)
43
43
 
44
- def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
44
+ def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
45
45
  return super()._build_odxlinks()
46
46
 
47
47
  def _resolve_odxlinks(self, odxlinks: OdxLinkDatabase) -> None:
@@ -74,6 +74,8 @@ class ParamLengthInfoType(DiagCodedType):
74
74
  elif self.base_data_type in [DataType.A_UNICODE2STRING]:
75
75
  bit_length = 16 * len(cast(str, internal_value))
76
76
  elif self.base_data_type in [DataType.A_INT32, DataType.A_UINT32]:
77
+ if not isinstance(internal_value, int):
78
+ odxraise()
77
79
  bit_length = int(internal_value).bit_length()
78
80
  if self.base_data_type == DataType.A_INT32:
79
81
  bit_length += 1