odxtools 9.6.1__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.
- odxtools/additionalaudience.py +3 -3
- odxtools/addressing.py +8 -0
- odxtools/admindata.py +8 -8
- odxtools/audience.py +10 -10
- odxtools/basecomparam.py +7 -20
- odxtools/basevariantpattern.py +4 -5
- odxtools/basicstructure.py +12 -11
- odxtools/cli/_print_utils.py +35 -23
- odxtools/cli/browse.py +9 -9
- odxtools/cli/compare.py +24 -24
- odxtools/cli/decode.py +3 -4
- odxtools/cli/find.py +4 -5
- odxtools/cli/list.py +7 -7
- odxtools/cli/main.py +2 -2
- odxtools/cli/snoop.py +3 -3
- odxtools/codec.py +3 -186
- odxtools/commrelation.py +12 -19
- odxtools/commrelationvaluetype.py +9 -0
- odxtools/companydata.py +5 -5
- odxtools/companydocinfo.py +8 -8
- odxtools/companyrevisioninfo.py +5 -5
- odxtools/companyspecificinfo.py +5 -5
- odxtools/comparam.py +3 -3
- odxtools/comparaminstance.py +10 -10
- odxtools/comparamspec.py +3 -3
- odxtools/comparamsubset.py +5 -5
- odxtools/complexcomparam.py +7 -7
- odxtools/compositecodec.py +191 -0
- odxtools/compumethods/compucategory.py +13 -0
- odxtools/compumethods/compucodecompumethod.py +6 -5
- odxtools/compumethods/compuconst.py +4 -5
- odxtools/compumethods/compudefaultvalue.py +1 -2
- odxtools/compumethods/compuinternaltophys.py +6 -6
- odxtools/compumethods/compumethod.py +6 -17
- odxtools/compumethods/compuphystointernal.py +6 -6
- odxtools/compumethods/compurationalcoeffs.py +4 -4
- odxtools/compumethods/compuscale.py +9 -10
- odxtools/compumethods/createanycompumethod.py +1 -2
- odxtools/compumethods/identicalcompumethod.py +1 -2
- odxtools/compumethods/intervaltype.py +8 -0
- odxtools/compumethods/limit.py +13 -19
- odxtools/compumethods/linearcompumethod.py +4 -3
- odxtools/compumethods/linearsegment.py +14 -15
- odxtools/compumethods/ratfunccompumethod.py +5 -4
- odxtools/compumethods/ratfuncsegment.py +7 -8
- odxtools/compumethods/scalelinearcompumethod.py +10 -9
- odxtools/compumethods/scaleratfunccompumethod.py +6 -5
- odxtools/compumethods/tabintpcompumethod.py +19 -20
- odxtools/compumethods/texttablecompumethod.py +5 -4
- odxtools/createanycomparam.py +2 -4
- odxtools/createanydiagcodedtype.py +1 -2
- odxtools/database.py +9 -8
- odxtools/dataobjectproperty.py +10 -10
- odxtools/decodestate.py +5 -5
- odxtools/description.py +6 -22
- odxtools/determinenumberofitems.py +4 -4
- odxtools/diagclasstype.py +11 -0
- odxtools/diagcodedtype.py +7 -7
- odxtools/diagcomm.py +19 -42
- odxtools/diagdatadictionaryspec.py +6 -6
- odxtools/diaglayercontainer.py +4 -4
- odxtools/diaglayers/basevariant.py +10 -9
- odxtools/diaglayers/basevariantraw.py +9 -9
- odxtools/diaglayers/diaglayer.py +20 -19
- odxtools/diaglayers/diaglayerraw.py +10 -10
- odxtools/diaglayers/diaglayertype.py +1 -2
- odxtools/diaglayers/ecushareddata.py +4 -4
- odxtools/diaglayers/ecushareddataraw.py +6 -6
- odxtools/diaglayers/ecuvariant.py +11 -10
- odxtools/diaglayers/ecuvariantraw.py +9 -9
- odxtools/diaglayers/functionalgroup.py +8 -7
- odxtools/diaglayers/functionalgroupraw.py +7 -7
- odxtools/diaglayers/hierarchyelement.py +43 -49
- odxtools/diaglayers/hierarchyelementraw.py +4 -4
- odxtools/diaglayers/protocol.py +4 -4
- odxtools/diaglayers/protocolraw.py +6 -6
- odxtools/diagnostictroublecode.py +8 -8
- odxtools/diagservice.py +21 -97
- odxtools/diagvariable.py +14 -14
- odxtools/docrevision.py +11 -11
- odxtools/dopbase.py +6 -6
- odxtools/dtcconnector.py +45 -0
- odxtools/dtcdop.py +15 -56
- odxtools/dynamicendmarkerfield.py +5 -4
- odxtools/dynamiclengthfield.py +5 -4
- odxtools/dyndefinedspec.py +7 -159
- odxtools/dynenddopref.py +5 -5
- odxtools/dyniddefmodeinfo.py +161 -0
- odxtools/ecuvariantpattern.py +4 -5
- odxtools/element.py +5 -6
- odxtools/encodestate.py +11 -11
- odxtools/encoding.py +2 -3
- odxtools/endofpdufield.py +6 -6
- odxtools/envdataconnector.py +49 -0
- odxtools/environmentdata.py +3 -4
- odxtools/environmentdatadescription.py +11 -11
- odxtools/exceptions.py +5 -5
- odxtools/externalaccessmethod.py +22 -0
- odxtools/externaldoc.py +23 -0
- odxtools/field.py +9 -10
- odxtools/functionalclass.py +4 -4
- odxtools/inputparam.py +6 -6
- odxtools/internalconstr.py +4 -5
- odxtools/isotp_state_machine.py +12 -11
- odxtools/leadinglengthinfotype.py +2 -3
- odxtools/library.py +5 -5
- odxtools/linkeddtcdop.py +62 -0
- odxtools/loadfile.py +5 -6
- odxtools/matchingbasevariantparameter.py +2 -3
- odxtools/matchingparameter.py +7 -7
- odxtools/minmaxlengthtype.py +5 -11
- odxtools/modification.py +4 -4
- odxtools/multiplexer.py +11 -11
- odxtools/multiplexercase.py +6 -6
- odxtools/multiplexerdefaultcase.py +6 -6
- odxtools/multiplexerswitchkey.py +4 -4
- odxtools/nameditemlist.py +14 -14
- odxtools/negoutputparam.py +3 -3
- odxtools/obd.py +1 -2
- odxtools/odxcategory.py +6 -6
- odxtools/odxlink.py +19 -20
- odxtools/odxtypes.py +21 -18
- odxtools/outputparam.py +4 -4
- odxtools/parameterinfo.py +2 -2
- odxtools/parameters/codedconstparameter.py +5 -5
- odxtools/parameters/createanyparameter.py +1 -2
- odxtools/parameters/dynamicparameter.py +2 -3
- odxtools/parameters/lengthkeyparameter.py +5 -5
- odxtools/parameters/matchingrequestparameter.py +3 -4
- odxtools/parameters/nrcconstparameter.py +7 -7
- odxtools/parameters/parameter.py +11 -11
- odxtools/parameters/parameterwithdop.py +9 -9
- odxtools/parameters/physicalconstantparameter.py +4 -4
- odxtools/parameters/reservedparameter.py +3 -4
- odxtools/parameters/rowfragment.py +7 -0
- odxtools/parameters/systemparameter.py +2 -3
- odxtools/parameters/tableentryparameter.py +4 -9
- odxtools/parameters/tablekeyparameter.py +10 -10
- odxtools/parameters/tablestructparameter.py +7 -7
- odxtools/parameters/valueparameter.py +7 -7
- odxtools/paramlengthinfotype.py +5 -3
- odxtools/parentref.py +9 -9
- odxtools/physicaldimension.py +11 -11
- odxtools/physicaltype.py +4 -12
- odxtools/posresponsesuppressible.py +72 -0
- odxtools/preconditionstateref.py +7 -7
- odxtools/progcode.py +6 -6
- odxtools/protstack.py +4 -4
- odxtools/radix.py +9 -0
- odxtools/relateddiagcommref.py +22 -0
- odxtools/relateddoc.py +6 -6
- odxtools/request.py +14 -12
- odxtools/response.py +15 -13
- odxtools/scaleconstr.py +4 -12
- odxtools/servicebinner.py +5 -5
- odxtools/singleecujob.py +4 -4
- odxtools/snrefcontext.py +2 -2
- odxtools/specialdata.py +5 -5
- odxtools/specialdatagroup.py +9 -9
- odxtools/specialdatagroupcaption.py +3 -3
- odxtools/standardizationlevel.py +9 -0
- odxtools/standardlengthtype.py +12 -21
- odxtools/state.py +3 -3
- odxtools/statechart.py +4 -4
- odxtools/statemachine.py +4 -3
- odxtools/statetransition.py +5 -18
- odxtools/statetransitionref.py +18 -18
- odxtools/staticfield.py +5 -4
- odxtools/structure.py +2 -3
- odxtools/subcomponent.py +12 -245
- odxtools/subcomponentparamconnector.py +103 -0
- odxtools/subcomponentpattern.py +42 -0
- odxtools/swvariable.py +3 -4
- odxtools/table.py +17 -55
- odxtools/tablediagcommconnector.py +47 -0
- odxtools/tablerow.py +30 -30
- odxtools/tablerowconnector.py +46 -0
- odxtools/teammember.py +11 -11
- odxtools/templates/macros/printService.xml.jinja2 +2 -1
- odxtools/termination.py +8 -0
- odxtools/text.py +2 -3
- odxtools/transmode.py +9 -0
- odxtools/uds.py +2 -3
- odxtools/unit.py +9 -9
- odxtools/unitgroup.py +6 -11
- odxtools/unitgroupcategory.py +7 -0
- odxtools/unitspec.py +6 -6
- odxtools/usage.py +9 -0
- odxtools/utils.py +31 -2
- odxtools/validtype.py +9 -0
- odxtools/variablegroup.py +2 -2
- odxtools/variantmatcher.py +10 -10
- odxtools/variantpattern.py +3 -3
- odxtools/version.py +2 -2
- odxtools/writepdxfile.py +5 -5
- odxtools/xdoc.py +9 -9
- {odxtools-9.6.1.dist-info → odxtools-10.0.0.dist-info}/METADATA +4 -5
- odxtools-10.0.0.dist-info/RECORD +264 -0
- odxtools-9.6.1.dist-info/RECORD +0 -238
- {odxtools-9.6.1.dist-info → odxtools-10.0.0.dist-info}/WHEEL +0 -0
- {odxtools-9.6.1.dist-info → odxtools-10.0.0.dist-info}/entry_points.txt +0 -0
- {odxtools-9.6.1.dist-info → odxtools-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {odxtools-9.6.1.dist-info → odxtools-10.0.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from dataclasses import dataclass
|
3
|
-
from typing import Any
|
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:
|
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) ->
|
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:
|
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) ->
|
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) ->
|
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:
|
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
|
odxtools/parameters/parameter.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from dataclasses import dataclass
|
3
|
-
from typing import Any,
|
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:
|
46
|
-
semantic:
|
47
|
-
oid:
|
48
|
-
byte_position:
|
49
|
-
bit_position:
|
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:
|
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) ->
|
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) ->
|
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:
|
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:
|
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,
|
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:
|
25
|
-
dop_snref:
|
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:
|
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) ->
|
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) ->
|
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) ->
|
81
|
-
if isinstance(self.dop,
|
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:
|
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
|
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:
|
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) ->
|
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:
|
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:
|
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) ->
|
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:
|
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:
|
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:
|
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,7 +1,6 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from dataclasses import dataclass
|
3
|
-
from
|
4
|
-
from typing import TYPE_CHECKING, List, Optional, cast
|
3
|
+
from typing import TYPE_CHECKING, cast
|
5
4
|
from xml.etree import ElementTree
|
6
5
|
|
7
6
|
from typing_extensions import override
|
@@ -13,16 +12,12 @@ from ..odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkRef
|
|
13
12
|
from ..odxtypes import ParameterValue
|
14
13
|
from ..utils import dataclass_fields_asdict
|
15
14
|
from .parameter import Parameter, ParameterType
|
15
|
+
from .rowfragment import RowFragment
|
16
16
|
|
17
17
|
if TYPE_CHECKING:
|
18
18
|
from ..tablerow import TableRow
|
19
19
|
|
20
20
|
|
21
|
-
class RowFragment(Enum):
|
22
|
-
KEY = "KEY"
|
23
|
-
STRUCT = "STRUCT"
|
24
|
-
|
25
|
-
|
26
21
|
@dataclass
|
27
22
|
class TableEntryParameter(Parameter):
|
28
23
|
target: RowFragment
|
@@ -50,7 +45,7 @@ class TableEntryParameter(Parameter):
|
|
50
45
|
@staticmethod
|
51
46
|
@override
|
52
47
|
def from_et(et_element: ElementTree.Element,
|
53
|
-
doc_frags:
|
48
|
+
doc_frags: list[OdxDocFragment]) -> "TableEntryParameter":
|
54
49
|
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
|
55
50
|
|
56
51
|
target_str = odxrequire(et_element.findtext("TARGET"))
|
@@ -73,7 +68,7 @@ class TableEntryParameter(Parameter):
|
|
73
68
|
self._table_row = odxlinks.resolve(self.table_row_ref)
|
74
69
|
|
75
70
|
@override
|
76
|
-
def _encode_positioned_into_pdu(self, physical_value:
|
71
|
+
def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
|
77
72
|
encode_state: EncodeState) -> None:
|
78
73
|
raise NotImplementedError("Encoding a TableEntryParameter is not implemented yet.")
|
79
74
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from dataclasses import dataclass
|
3
|
-
from typing import TYPE_CHECKING, Any,
|
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:
|
30
|
-
table_snref:
|
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:
|
35
|
-
table_row_snref:
|
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:
|
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:
|
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) ->
|
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:
|
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:
|
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,
|
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:
|
25
|
-
table_key_snref:
|
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:
|
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) ->
|
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:
|
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,
|
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
|
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:
|
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) ->
|
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:
|
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:
|
54
|
+
self._physical_default_value: AtomicOdxType | None = None
|
55
55
|
|
56
56
|
@override
|
57
|
-
def _build_odxlinks(self) ->
|
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:
|
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:
|
odxtools/paramlengthinfotype.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from dataclasses import dataclass
|
3
|
-
from typing import TYPE_CHECKING, Any,
|
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:
|
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) ->
|
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
|
odxtools/parentref.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from copy import deepcopy
|
3
3
|
from dataclasses import dataclass
|
4
|
-
from typing import TYPE_CHECKING, Any
|
4
|
+
from typing import TYPE_CHECKING, Any
|
5
5
|
from xml.etree import ElementTree
|
6
6
|
|
7
7
|
from .exceptions import odxrequire
|
@@ -16,18 +16,18 @@ if TYPE_CHECKING:
|
|
16
16
|
@dataclass
|
17
17
|
class ParentRef:
|
18
18
|
layer_ref: OdxLinkRef
|
19
|
-
not_inherited_diag_comms:
|
20
|
-
not_inherited_variables:
|
21
|
-
not_inherited_dops:
|
22
|
-
not_inherited_tables:
|
23
|
-
not_inherited_global_neg_responses:
|
19
|
+
not_inherited_diag_comms: list[str] # short_name references
|
20
|
+
not_inherited_variables: list[str] # short_name references
|
21
|
+
not_inherited_dops: list[str] # short_name references
|
22
|
+
not_inherited_tables: list[str] # short_name references
|
23
|
+
not_inherited_global_neg_responses: list[str] # short_name references
|
24
24
|
|
25
25
|
@property
|
26
26
|
def layer(self) -> "DiagLayer":
|
27
27
|
return self._layer
|
28
28
|
|
29
29
|
@staticmethod
|
30
|
-
def from_et(et_element: ElementTree.Element, doc_frags:
|
30
|
+
def from_et(et_element: ElementTree.Element, doc_frags: list[OdxDocFragment]) -> "ParentRef":
|
31
31
|
|
32
32
|
layer_ref = odxrequire(OdxLinkRef.from_et(et_element, doc_frags))
|
33
33
|
|
@@ -69,7 +69,7 @@ class ParentRef:
|
|
69
69
|
not_inherited_global_neg_responses=not_inherited_global_neg_responses,
|
70
70
|
)
|
71
71
|
|
72
|
-
def _build_odxlinks(self) ->
|
72
|
+
def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
|
73
73
|
return {}
|
74
74
|
|
75
75
|
def _resolve_odxlinks(self, odxlinks: OdxLinkDatabase) -> None:
|
@@ -81,7 +81,7 @@ class ParentRef:
|
|
81
81
|
def _resolve_snrefs(self, context: SnRefContext) -> None:
|
82
82
|
pass
|
83
83
|
|
84
|
-
def __deepcopy__(self, memo:
|
84
|
+
def __deepcopy__(self, memo: dict[int, Any]) -> Any:
|
85
85
|
cls = self.__class__
|
86
86
|
result = cls.__new__(cls)
|
87
87
|
memo[id(self)] = result
|
odxtools/physicaldimension.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from dataclasses import dataclass
|
3
|
-
from typing import Any
|
3
|
+
from typing import Any
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .element import IdentifiableElement
|
@@ -41,20 +41,20 @@ class PhysicalDimension(IdentifiableElement):
|
|
41
41
|
)
|
42
42
|
```
|
43
43
|
"""
|
44
|
-
length_exp:
|
45
|
-
mass_exp:
|
46
|
-
time_exp:
|
47
|
-
current_exp:
|
48
|
-
temperature_exp:
|
49
|
-
molar_amount_exp:
|
50
|
-
luminous_intensity_exp:
|
44
|
+
length_exp: int | None
|
45
|
+
mass_exp: int | None
|
46
|
+
time_exp: int | None
|
47
|
+
current_exp: int | None
|
48
|
+
temperature_exp: int | None
|
49
|
+
molar_amount_exp: int | None
|
50
|
+
luminous_intensity_exp: int | None
|
51
51
|
|
52
52
|
@staticmethod
|
53
53
|
def from_et(et_element: ElementTree.Element,
|
54
|
-
doc_frags:
|
54
|
+
doc_frags: list[OdxDocFragment]) -> "PhysicalDimension":
|
55
55
|
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, doc_frags))
|
56
56
|
|
57
|
-
def read_optional_int(element: ElementTree.Element, name: str) ->
|
57
|
+
def read_optional_int(element: ElementTree.Element, name: str) -> int | None:
|
58
58
|
if (val_str := element.findtext(name)) is not None:
|
59
59
|
return int(val_str)
|
60
60
|
else:
|
@@ -78,7 +78,7 @@ class PhysicalDimension(IdentifiableElement):
|
|
78
78
|
luminous_intensity_exp=luminous_intensity_exp,
|
79
79
|
**kwargs)
|
80
80
|
|
81
|
-
def _build_odxlinks(self) ->
|
81
|
+
def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
|
82
82
|
return {self.odx_id: self}
|
83
83
|
|
84
84
|
def _resolve_odxlinks(self, odxlinks: OdxLinkDatabase) -> None:
|