odxtools 9.7.0__py3-none-any.whl → 10.1.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 +7 -7
- odxtools/admindata.py +14 -13
- odxtools/audience.py +17 -17
- odxtools/basecomparam.py +9 -8
- odxtools/basevariantpattern.py +9 -10
- odxtools/basicstructure.py +15 -15
- odxtools/cli/_print_utils.py +34 -22
- odxtools/cli/browse.py +8 -8
- odxtools/cli/compare.py +24 -24
- odxtools/cli/decode.py +3 -4
- odxtools/cli/find.py +4 -5
- odxtools/cli/list.py +6 -6
- odxtools/cli/main.py +2 -2
- odxtools/cli/snoop.py +3 -3
- odxtools/codec.py +3 -3
- odxtools/commrelation.py +18 -17
- odxtools/companydata.py +13 -13
- odxtools/companydocinfo.py +15 -17
- odxtools/companyrevisioninfo.py +9 -9
- odxtools/companyspecificinfo.py +11 -13
- odxtools/comparam.py +8 -7
- odxtools/comparaminstance.py +14 -14
- odxtools/comparamspec.py +10 -11
- odxtools/comparamsubset.py +17 -25
- odxtools/complexcomparam.py +14 -14
- odxtools/complexdop.py +1 -1
- odxtools/compositecodec.py +8 -8
- odxtools/compumethods/compucodecompumethod.py +7 -7
- odxtools/compumethods/compuconst.py +5 -6
- odxtools/compumethods/compudefaultvalue.py +2 -3
- odxtools/compumethods/compuinternaltophys.py +13 -12
- odxtools/compumethods/compumethod.py +10 -9
- odxtools/compumethods/compuphystointernal.py +13 -12
- odxtools/compumethods/compurationalcoeffs.py +7 -7
- odxtools/compumethods/compuscale.py +15 -16
- odxtools/compumethods/createanycompumethod.py +12 -13
- odxtools/compumethods/identicalcompumethod.py +4 -5
- odxtools/compumethods/limit.py +14 -14
- odxtools/compumethods/linearcompumethod.py +5 -5
- odxtools/compumethods/linearsegment.py +10 -11
- odxtools/compumethods/ratfunccompumethod.py +6 -6
- odxtools/compumethods/ratfuncsegment.py +7 -8
- odxtools/compumethods/scalelinearcompumethod.py +9 -9
- odxtools/compumethods/scaleratfunccompumethod.py +7 -7
- odxtools/compumethods/tabintpcompumethod.py +10 -13
- odxtools/compumethods/texttablecompumethod.py +6 -6
- odxtools/createanycomparam.py +5 -7
- odxtools/createanydiagcodedtype.py +7 -8
- odxtools/database.py +34 -31
- odxtools/dataobjectproperty.py +19 -20
- odxtools/decodestate.py +5 -5
- odxtools/description.py +9 -9
- odxtools/determinenumberofitems.py +8 -7
- odxtools/diagcodedtype.py +10 -10
- odxtools/diagcomm.py +29 -30
- odxtools/diagdatadictionaryspec.py +36 -36
- odxtools/diaglayercontainer.py +35 -34
- odxtools/diaglayers/basevariant.py +14 -12
- odxtools/diaglayers/basevariantraw.py +22 -23
- odxtools/diaglayers/diaglayer.py +24 -22
- odxtools/diaglayers/diaglayerraw.py +43 -52
- odxtools/diaglayers/diaglayertype.py +1 -2
- odxtools/diaglayers/ecushareddata.py +9 -9
- odxtools/diaglayers/ecushareddataraw.py +15 -16
- odxtools/diaglayers/ecuvariant.py +15 -13
- odxtools/diaglayers/ecuvariantraw.py +21 -22
- odxtools/diaglayers/functionalgroup.py +12 -11
- odxtools/diaglayers/functionalgroupraw.py +17 -18
- odxtools/diaglayers/hierarchyelement.py +48 -54
- odxtools/diaglayers/hierarchyelementraw.py +10 -11
- odxtools/diaglayers/protocol.py +7 -7
- odxtools/diaglayers/protocolraw.py +13 -14
- odxtools/diagnostictroublecode.py +15 -17
- odxtools/diagservice.py +28 -27
- odxtools/diagvariable.py +24 -25
- odxtools/docrevision.py +18 -17
- odxtools/dopbase.py +13 -14
- odxtools/dtcconnector.py +8 -7
- odxtools/dtcdop.py +24 -20
- odxtools/dynamicendmarkerfield.py +10 -9
- odxtools/dynamiclengthfield.py +10 -9
- odxtools/dyndefinedspec.py +10 -10
- odxtools/dynenddopref.py +9 -9
- odxtools/dyniddefmodeinfo.py +21 -21
- odxtools/ecuvariantpattern.py +8 -10
- odxtools/element.py +12 -13
- odxtools/encodestate.py +11 -11
- odxtools/encoding.py +2 -3
- odxtools/endofpdufield.py +9 -10
- odxtools/envdataconnector.py +8 -8
- odxtools/environmentdata.py +7 -9
- odxtools/environmentdatadescription.py +18 -17
- odxtools/exceptions.py +5 -5
- odxtools/externalaccessmethod.py +4 -6
- odxtools/externaldoc.py +6 -6
- odxtools/field.py +15 -15
- odxtools/functionalclass.py +9 -9
- odxtools/inputparam.py +11 -10
- odxtools/internalconstr.py +10 -11
- odxtools/isotp_state_machine.py +12 -11
- odxtools/leadinglengthinfotype.py +4 -6
- odxtools/library.py +9 -8
- odxtools/linkeddtcdop.py +9 -8
- odxtools/loadfile.py +5 -6
- odxtools/matchingbasevariantparameter.py +5 -6
- odxtools/matchingparameter.py +10 -10
- odxtools/message.py +1 -1
- odxtools/minmaxlengthtype.py +6 -7
- odxtools/modification.py +7 -6
- odxtools/multiplexer.py +54 -18
- odxtools/multiplexercase.py +13 -13
- odxtools/multiplexerdefaultcase.py +11 -10
- odxtools/multiplexerswitchkey.py +8 -8
- odxtools/nameditemlist.py +13 -13
- odxtools/negoutputparam.py +8 -8
- odxtools/obd.py +1 -2
- odxtools/odxcategory.py +14 -26
- odxtools/odxdoccontext.py +16 -0
- odxtools/odxlink.py +23 -25
- odxtools/odxtypes.py +18 -15
- odxtools/outputparam.py +9 -8
- odxtools/parameterinfo.py +1 -1
- odxtools/parameters/codedconstparameter.py +10 -10
- odxtools/parameters/createanyparameter.py +15 -16
- odxtools/parameters/dynamicparameter.py +5 -7
- odxtools/parameters/lengthkeyparameter.py +10 -10
- odxtools/parameters/matchingrequestparameter.py +6 -7
- odxtools/parameters/nrcconstparameter.py +13 -13
- odxtools/parameters/parameter.py +17 -18
- odxtools/parameters/parameterwithdop.py +13 -13
- odxtools/parameters/physicalconstantparameter.py +8 -7
- odxtools/parameters/reservedparameter.py +6 -8
- odxtools/parameters/systemparameter.py +5 -7
- odxtools/parameters/tableentryparameter.py +8 -8
- odxtools/parameters/tablekeyparameter.py +17 -17
- odxtools/parameters/tablestructparameter.py +11 -11
- odxtools/parameters/valueparameter.py +11 -11
- odxtools/paramlengthinfotype.py +10 -9
- odxtools/parentref.py +15 -13
- odxtools/physicaldimension.py +15 -15
- odxtools/physicaltype.py +5 -6
- odxtools/posresponsesuppressible.py +11 -12
- odxtools/preconditionstateref.py +11 -11
- odxtools/progcode.py +11 -10
- odxtools/protstack.py +10 -9
- odxtools/relateddiagcommref.py +5 -6
- odxtools/relateddoc.py +11 -10
- odxtools/request.py +18 -19
- odxtools/response.py +19 -20
- odxtools/scaleconstr.py +8 -9
- odxtools/servicebinner.py +5 -5
- odxtools/singleecujob.py +16 -15
- odxtools/snrefcontext.py +3 -3
- odxtools/specialdata.py +8 -7
- odxtools/specialdatagroup.py +17 -17
- odxtools/specialdatagroupcaption.py +7 -6
- odxtools/standardlengthtype.py +14 -22
- odxtools/state.py +7 -6
- odxtools/statechart.py +12 -11
- odxtools/statemachine.py +4 -3
- odxtools/statetransition.py +9 -9
- odxtools/statetransitionref.py +19 -19
- odxtools/staticfield.py +9 -7
- odxtools/structure.py +5 -6
- odxtools/subcomponent.py +20 -18
- odxtools/subcomponentparamconnector.py +10 -9
- odxtools/subcomponentpattern.py +9 -9
- odxtools/swvariable.py +6 -7
- odxtools/table.py +25 -26
- odxtools/tablediagcommconnector.py +9 -8
- odxtools/tablerow.py +64 -43
- odxtools/tablerowconnector.py +8 -8
- odxtools/teammember.py +16 -15
- odxtools/templates/macros/printParentRef.xml.jinja2 +3 -1
- odxtools/text.py +4 -5
- odxtools/uds.py +2 -3
- odxtools/unit.py +14 -13
- odxtools/unitgroup.py +11 -10
- odxtools/unitspec.py +18 -19
- odxtools/utils.py +3 -3
- odxtools/variablegroup.py +5 -6
- odxtools/variantmatcher.py +10 -10
- odxtools/variantpattern.py +5 -6
- odxtools/version.py +2 -2
- odxtools/writepdxfile.py +5 -24
- odxtools/xdoc.py +13 -12
- {odxtools-9.7.0.dist-info → odxtools-10.1.0.dist-info}/METADATA +4 -5
- odxtools-10.1.0.dist-info/RECORD +265 -0
- {odxtools-9.7.0.dist-info → odxtools-10.1.0.dist-info}/WHEEL +1 -1
- odxtools-9.7.0.dist-info/RECORD +0 -264
- {odxtools-9.7.0.dist-info → odxtools-10.1.0.dist-info}/entry_points.txt +0 -0
- {odxtools-9.7.0.dist-info → odxtools-10.1.0.dist-info}/licenses/LICENSE +0 -0
- {odxtools-9.7.0.dist-info → odxtools-10.1.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 final, override
|
@@ -8,14 +8,15 @@ from typing_extensions import final, override
|
|
8
8
|
from ..decodestate import DecodeState
|
9
9
|
from ..encodestate import EncodeState
|
10
10
|
from ..exceptions import EncodeError, odxraise, odxrequire
|
11
|
-
from ..
|
11
|
+
from ..odxdoccontext import OdxDocContext
|
12
|
+
from ..odxlink import OdxLinkId
|
12
13
|
from ..odxtypes import ParameterValue
|
13
14
|
from ..utils import dataclass_fields_asdict
|
14
15
|
from .parameter import ParameterType
|
15
16
|
from .parameterwithdop import ParameterWithDOP
|
16
17
|
|
17
18
|
|
18
|
-
@dataclass
|
19
|
+
@dataclass(kw_only=True)
|
19
20
|
class LengthKeyParameter(ParameterWithDOP):
|
20
21
|
"""Length Keys specify the bit (!) length of another parameter.
|
21
22
|
|
@@ -48,17 +49,16 @@ class LengthKeyParameter(ParameterWithDOP):
|
|
48
49
|
|
49
50
|
@staticmethod
|
50
51
|
@override
|
51
|
-
def from_et(et_element: ElementTree.Element,
|
52
|
-
doc_frags: List[OdxDocFragment]) -> "LengthKeyParameter":
|
52
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "LengthKeyParameter":
|
53
53
|
|
54
|
-
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element,
|
54
|
+
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, context))
|
55
55
|
|
56
|
-
odx_id = odxrequire(OdxLinkId.from_et(et_element,
|
56
|
+
odx_id = odxrequire(OdxLinkId.from_et(et_element, context))
|
57
57
|
|
58
58
|
return LengthKeyParameter(odx_id=odx_id, **kwargs)
|
59
59
|
|
60
60
|
@override
|
61
|
-
def _build_odxlinks(self) ->
|
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:
|
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:
|
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
|
@@ -8,13 +7,13 @@ from typing_extensions import override
|
|
8
7
|
from ..decodestate import DecodeState
|
9
8
|
from ..encodestate import EncodeState
|
10
9
|
from ..exceptions import EncodeError, odxraise, odxrequire
|
11
|
-
from ..
|
10
|
+
from ..odxdoccontext import OdxDocContext
|
12
11
|
from ..odxtypes import DataType, ParameterValue
|
13
12
|
from ..utils import dataclass_fields_asdict
|
14
13
|
from .parameter import Parameter, ParameterType
|
15
14
|
|
16
15
|
|
17
|
-
@dataclass
|
16
|
+
@dataclass(kw_only=True)
|
18
17
|
class MatchingRequestParameter(Parameter):
|
19
18
|
request_byte_position: int
|
20
19
|
byte_length: int
|
@@ -37,9 +36,9 @@ class MatchingRequestParameter(Parameter):
|
|
37
36
|
@staticmethod
|
38
37
|
@override
|
39
38
|
def from_et(et_element: ElementTree.Element,
|
40
|
-
|
39
|
+
context: OdxDocContext) -> "MatchingRequestParameter":
|
41
40
|
|
42
|
-
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element,
|
41
|
+
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, context))
|
43
42
|
|
44
43
|
request_byte_position = int(odxrequire(et_element.findtext("REQUEST-BYTE-POS")))
|
45
44
|
byte_length = int(odxrequire(et_element.findtext("BYTE-LENGTH")))
|
@@ -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) ->
|
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:
|
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
|
-
from dataclasses import dataclass
|
3
|
-
from typing import Any
|
2
|
+
from dataclasses import dataclass, field
|
3
|
+
from typing import Any
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from typing_extensions import override
|
@@ -10,13 +10,14 @@ from ..decodestate import DecodeState
|
|
10
10
|
from ..diagcodedtype import DiagCodedType
|
11
11
|
from ..encodestate import EncodeState
|
12
12
|
from ..exceptions import DecodeMismatch, EncodeError, odxraise, odxrequire
|
13
|
-
from ..
|
13
|
+
from ..odxdoccontext import OdxDocContext
|
14
|
+
from ..odxlink import OdxLinkId
|
14
15
|
from ..odxtypes import AtomicOdxType, DataType, ParameterValue
|
15
16
|
from ..utils import dataclass_fields_asdict
|
16
17
|
from .parameter import Parameter, ParameterType
|
17
18
|
|
18
19
|
|
19
|
-
@dataclass
|
20
|
+
@dataclass(kw_only=True)
|
20
21
|
class NrcConstParameter(Parameter):
|
21
22
|
"""A parameter of type NRC-CONST defines a set of values to be
|
22
23
|
matched for a negative response object to apply
|
@@ -34,7 +35,7 @@ class NrcConstParameter(Parameter):
|
|
34
35
|
|
35
36
|
"""
|
36
37
|
|
37
|
-
coded_values_raw:
|
38
|
+
coded_values_raw: list[str] = field(default_factory=list)
|
38
39
|
diag_coded_type: DiagCodedType
|
39
40
|
|
40
41
|
@property
|
@@ -57,21 +58,20 @@ class NrcConstParameter(Parameter):
|
|
57
58
|
return self.diag_coded_type.base_data_type
|
58
59
|
|
59
60
|
@property
|
60
|
-
def coded_values(self) ->
|
61
|
+
def coded_values(self) -> list[AtomicOdxType]:
|
61
62
|
return self._coded_values
|
62
63
|
|
63
64
|
@staticmethod
|
64
65
|
@override
|
65
|
-
def from_et(et_element: ElementTree.Element,
|
66
|
-
doc_frags: List[OdxDocFragment]) -> "NrcConstParameter":
|
66
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "NrcConstParameter":
|
67
67
|
|
68
|
-
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element,
|
68
|
+
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, context))
|
69
69
|
|
70
70
|
coded_values_raw = [
|
71
71
|
odxrequire(x.text) for x in et_element.iterfind("CODED-VALUES/CODED-VALUE")
|
72
72
|
]
|
73
73
|
dct_elem = odxrequire(et_element.find("DIAG-CODED-TYPE"))
|
74
|
-
diag_coded_type = create_any_diag_coded_type_from_et(dct_elem,
|
74
|
+
diag_coded_type = create_any_diag_coded_type_from_et(dct_elem, context)
|
75
75
|
|
76
76
|
return NrcConstParameter(
|
77
77
|
coded_values_raw=coded_values_raw, diag_coded_type=diag_coded_type, **kwargs)
|
@@ -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
|
-
from dataclasses import dataclass
|
3
|
-
from typing import Any,
|
2
|
+
from dataclasses import dataclass, field
|
3
|
+
from typing import Any, Literal
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from typing_extensions import final, override
|
@@ -8,7 +8,8 @@ from typing_extensions import final, override
|
|
8
8
|
from ..decodestate import DecodeState
|
9
9
|
from ..element import NamedElement
|
10
10
|
from ..encodestate import EncodeState
|
11
|
-
from ..
|
11
|
+
from ..odxdoccontext import OdxDocContext
|
12
|
+
from ..odxlink import OdxLinkDatabase, OdxLinkId
|
12
13
|
from ..odxtypes import ParameterValue
|
13
14
|
from ..snrefcontext import SnRefContext
|
14
15
|
from ..specialdatagroup import SpecialDataGroup
|
@@ -30,7 +31,7 @@ ParameterType = Literal[
|
|
30
31
|
]
|
31
32
|
|
32
33
|
|
33
|
-
@dataclass
|
34
|
+
@dataclass(kw_only=True)
|
34
35
|
class Parameter(NamedElement):
|
35
36
|
"""This class corresponds to POSITIONABLE-PARAM in the ODX
|
36
37
|
specification
|
@@ -42,11 +43,11 @@ class Parameter(NamedElement):
|
|
42
43
|
non-positionable parameter types.
|
43
44
|
|
44
45
|
"""
|
45
|
-
sdgs:
|
46
|
-
semantic:
|
47
|
-
oid:
|
48
|
-
byte_position:
|
49
|
-
bit_position:
|
46
|
+
sdgs: list[SpecialDataGroup] = field(default_factory=list)
|
47
|
+
semantic: str | None = None
|
48
|
+
oid: str | None = None
|
49
|
+
byte_position: int | None = None
|
50
|
+
bit_position: int | None = None
|
50
51
|
|
51
52
|
@property
|
52
53
|
def parameter_type(self) -> ParameterType:
|
@@ -78,13 +79,11 @@ class Parameter(NamedElement):
|
|
78
79
|
|
79
80
|
@staticmethod
|
80
81
|
@override
|
81
|
-
def from_et(et_element: ElementTree.Element,
|
82
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "Parameter":
|
82
83
|
|
83
|
-
kwargs = dataclass_fields_asdict(NamedElement.from_et(et_element,
|
84
|
+
kwargs = dataclass_fields_asdict(NamedElement.from_et(et_element, context))
|
84
85
|
|
85
|
-
sdgs = [
|
86
|
-
SpecialDataGroup.from_et(sdge, doc_frags) for sdge in et_element.iterfind("SDGS/SDG")
|
87
|
-
]
|
86
|
+
sdgs = [SpecialDataGroup.from_et(sdge, context) for sdge in et_element.iterfind("SDGS/SDG")]
|
88
87
|
semantic = et_element.attrib.get("SEMANTIC")
|
89
88
|
oid = et_element.attrib.get("OID")
|
90
89
|
byte_position_str = et_element.findtext("BYTE-POSITION")
|
@@ -100,7 +99,7 @@ class Parameter(NamedElement):
|
|
100
99
|
bit_position=bit_position,
|
101
100
|
**kwargs)
|
102
101
|
|
103
|
-
def _build_odxlinks(self) ->
|
102
|
+
def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
|
104
103
|
result = {}
|
105
104
|
|
106
105
|
for sdg in self.sdgs:
|
@@ -116,11 +115,11 @@ class Parameter(NamedElement):
|
|
116
115
|
for sdg in self.sdgs:
|
117
116
|
sdg._resolve_snrefs(context)
|
118
117
|
|
119
|
-
def get_static_bit_length(self) ->
|
118
|
+
def get_static_bit_length(self) -> int | None:
|
120
119
|
return None
|
121
120
|
|
122
121
|
@final
|
123
|
-
def encode_into_pdu(self, physical_value:
|
122
|
+
def encode_into_pdu(self, physical_value: ParameterValue | None,
|
124
123
|
encode_state: EncodeState) -> None:
|
125
124
|
"""Convert a physical value into its encoded form and place it
|
126
125
|
into the PDU
|
@@ -140,7 +139,7 @@ class Parameter(NamedElement):
|
|
140
139
|
|
141
140
|
encode_state.cursor_bit_position = 0
|
142
141
|
|
143
|
-
def _encode_positioned_into_pdu(self, physical_value:
|
142
|
+
def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
|
144
143
|
encode_state: EncodeState) -> None:
|
145
144
|
"""Method which actually encodes the parameter
|
146
145
|
|
@@ -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
|
@@ -11,7 +11,8 @@ from ..dopbase import DopBase
|
|
11
11
|
from ..dtcdop import DtcDop
|
12
12
|
from ..encodestate import EncodeState
|
13
13
|
from ..exceptions import odxassert, odxrequire
|
14
|
-
from ..
|
14
|
+
from ..odxdoccontext import OdxDocContext
|
15
|
+
from ..odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef, resolve_snref
|
15
16
|
from ..odxtypes import AtomicOdxType, ParameterValue
|
16
17
|
from ..physicaltype import PhysicalType
|
17
18
|
from ..snrefcontext import SnRefContext
|
@@ -19,10 +20,10 @@ from ..utils import dataclass_fields_asdict
|
|
19
20
|
from .parameter import Parameter
|
20
21
|
|
21
22
|
|
22
|
-
@dataclass
|
23
|
+
@dataclass(kw_only=True)
|
23
24
|
class ParameterWithDOP(Parameter):
|
24
|
-
dop_ref:
|
25
|
-
dop_snref:
|
25
|
+
dop_ref: OdxLinkRef | None = None
|
26
|
+
dop_snref: str | None = None
|
26
27
|
|
27
28
|
@property
|
28
29
|
def dop(self) -> DopBase:
|
@@ -32,12 +33,11 @@ class ParameterWithDOP(Parameter):
|
|
32
33
|
|
33
34
|
@staticmethod
|
34
35
|
@override
|
35
|
-
def from_et(et_element: ElementTree.Element,
|
36
|
-
doc_frags: List[OdxDocFragment]) -> "ParameterWithDOP":
|
36
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "ParameterWithDOP":
|
37
37
|
|
38
|
-
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element,
|
38
|
+
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, context))
|
39
39
|
|
40
|
-
dop_ref = OdxLinkRef.from_et(et_element.find("DOP-REF"),
|
40
|
+
dop_ref = OdxLinkRef.from_et(et_element.find("DOP-REF"), context)
|
41
41
|
dop_snref = None
|
42
42
|
if (dop_snref_elem := et_element.find("DOP-SNREF")) is not None:
|
43
43
|
dop_snref = odxrequire(dop_snref_elem.get("SHORT-NAME"))
|
@@ -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) ->
|
80
|
+
def physical_type(self) -> PhysicalType | None:
|
81
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
|
@@ -9,7 +9,8 @@ from ..dataobjectproperty import DataObjectProperty
|
|
9
9
|
from ..decodestate import DecodeState
|
10
10
|
from ..encodestate import EncodeState
|
11
11
|
from ..exceptions import DecodeError, EncodeError, odxraise, odxrequire
|
12
|
-
from ..
|
12
|
+
from ..odxdoccontext import OdxDocContext
|
13
|
+
from ..odxlink import OdxLinkDatabase, OdxLinkId
|
13
14
|
from ..odxtypes import ParameterValue
|
14
15
|
from ..snrefcontext import SnRefContext
|
15
16
|
from ..utils import dataclass_fields_asdict
|
@@ -17,7 +18,7 @@ from .parameter import ParameterType
|
|
17
18
|
from .parameterwithdop import ParameterWithDOP
|
18
19
|
|
19
20
|
|
20
|
-
@dataclass
|
21
|
+
@dataclass(kw_only=True)
|
21
22
|
class PhysicalConstantParameter(ParameterWithDOP):
|
22
23
|
physical_constant_value_raw: str
|
23
24
|
|
@@ -43,9 +44,9 @@ class PhysicalConstantParameter(ParameterWithDOP):
|
|
43
44
|
@staticmethod
|
44
45
|
@override
|
45
46
|
def from_et(et_element: ElementTree.Element,
|
46
|
-
|
47
|
+
context: OdxDocContext) -> "PhysicalConstantParameter":
|
47
48
|
|
48
|
-
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element,
|
49
|
+
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, context))
|
49
50
|
|
50
51
|
physical_constant_value_raw = odxrequire(et_element.findtext("PHYS-CONSTANT-VALUE"))
|
51
52
|
|
@@ -53,7 +54,7 @@ class PhysicalConstantParameter(ParameterWithDOP):
|
|
53
54
|
physical_constant_value_raw=physical_constant_value_raw, **kwargs)
|
54
55
|
|
55
56
|
@override
|
56
|
-
def _build_odxlinks(self) ->
|
57
|
+
def _build_odxlinks(self) -> dict[OdxLinkId, Any]:
|
57
58
|
return super()._build_odxlinks()
|
58
59
|
|
59
60
|
@override
|
@@ -72,7 +73,7 @@ class PhysicalConstantParameter(ParameterWithDOP):
|
|
72
73
|
self._physical_constant_value = base_data_type.from_string(self.physical_constant_value_raw)
|
73
74
|
|
74
75
|
@override
|
75
|
-
def _encode_positioned_into_pdu(self, physical_value:
|
76
|
+
def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
|
76
77
|
encode_state: EncodeState) -> None:
|
77
78
|
if physical_value is not None and physical_value != self.physical_constant_value:
|
78
79
|
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
|
@@ -8,13 +7,13 @@ from typing_extensions import override
|
|
8
7
|
from ..decodestate import DecodeState
|
9
8
|
from ..encodestate import EncodeState
|
10
9
|
from ..exceptions import odxrequire
|
11
|
-
from ..
|
10
|
+
from ..odxdoccontext import OdxDocContext
|
12
11
|
from ..odxtypes import DataType, ParameterValue
|
13
12
|
from ..utils import dataclass_fields_asdict
|
14
13
|
from .parameter import Parameter, ParameterType
|
15
14
|
|
16
15
|
|
17
|
-
@dataclass
|
16
|
+
@dataclass(kw_only=True)
|
18
17
|
class ReservedParameter(Parameter):
|
19
18
|
bit_length: int
|
20
19
|
|
@@ -35,20 +34,19 @@ class ReservedParameter(Parameter):
|
|
35
34
|
|
36
35
|
@staticmethod
|
37
36
|
@override
|
38
|
-
def from_et(et_element: ElementTree.Element,
|
39
|
-
|
40
|
-
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
|
37
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "ReservedParameter":
|
38
|
+
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, context))
|
41
39
|
|
42
40
|
bit_length = int(odxrequire(et_element.findtext("BIT-LENGTH")))
|
43
41
|
|
44
42
|
return ReservedParameter(bit_length=bit_length, **kwargs)
|
45
43
|
|
46
44
|
@override
|
47
|
-
def get_static_bit_length(self) ->
|
45
|
+
def get_static_bit_length(self) -> int | None:
|
48
46
|
return self.bit_length
|
49
47
|
|
50
48
|
@override
|
51
|
-
def _encode_positioned_into_pdu(self, physical_value:
|
49
|
+
def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
|
52
50
|
encode_state: EncodeState) -> None:
|
53
51
|
encode_state.cursor_byte_position += (encode_state.cursor_bit_position + self.bit_length +
|
54
52
|
7) // 8
|
@@ -2,14 +2,13 @@
|
|
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
|
9
8
|
|
10
9
|
from ..encodestate import EncodeState
|
11
10
|
from ..exceptions import odxraise, odxrequire
|
12
|
-
from ..
|
11
|
+
from ..odxdoccontext import OdxDocContext
|
13
12
|
from ..odxtypes import ParameterValue
|
14
13
|
from ..utils import dataclass_fields_asdict
|
15
14
|
from .parameter import ParameterType
|
@@ -25,7 +24,7 @@ PREDEFINED_SYSPARAM_VALUES = [
|
|
25
24
|
]
|
26
25
|
|
27
26
|
|
28
|
-
@dataclass
|
27
|
+
@dataclass(kw_only=True)
|
29
28
|
class SystemParameter(ParameterWithDOP):
|
30
29
|
sysparam: str
|
31
30
|
|
@@ -49,16 +48,15 @@ class SystemParameter(ParameterWithDOP):
|
|
49
48
|
|
50
49
|
@staticmethod
|
51
50
|
@override
|
52
|
-
def from_et(et_element: ElementTree.Element,
|
53
|
-
|
54
|
-
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, doc_frags))
|
51
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "SystemParameter":
|
52
|
+
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, context))
|
55
53
|
|
56
54
|
sysparam = odxrequire(et_element.get("SYSPARAM"))
|
57
55
|
|
58
56
|
return SystemParameter(sysparam=sysparam, **kwargs)
|
59
57
|
|
60
58
|
@override
|
61
|
-
def _encode_positioned_into_pdu(self, physical_value:
|
59
|
+
def _encode_positioned_into_pdu(self, physical_value: ParameterValue | None,
|
62
60
|
encode_state: EncodeState) -> None:
|
63
61
|
if physical_value is None:
|
64
62
|
# 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,
|
3
|
+
from typing import TYPE_CHECKING, cast
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from typing_extensions import override
|
@@ -8,7 +8,8 @@ from typing_extensions import override
|
|
8
8
|
from ..decodestate import DecodeState
|
9
9
|
from ..encodestate import EncodeState
|
10
10
|
from ..exceptions import odxraise, odxrequire
|
11
|
-
from ..
|
11
|
+
from ..odxdoccontext import OdxDocContext
|
12
|
+
from ..odxlink import OdxLinkDatabase, OdxLinkRef
|
12
13
|
from ..odxtypes import ParameterValue
|
13
14
|
from ..utils import dataclass_fields_asdict
|
14
15
|
from .parameter import Parameter, ParameterType
|
@@ -18,7 +19,7 @@ if TYPE_CHECKING:
|
|
18
19
|
from ..tablerow import TableRow
|
19
20
|
|
20
21
|
|
21
|
-
@dataclass
|
22
|
+
@dataclass(kw_only=True)
|
22
23
|
class TableEntryParameter(Parameter):
|
23
24
|
target: RowFragment
|
24
25
|
table_row_ref: OdxLinkRef
|
@@ -44,9 +45,8 @@ class TableEntryParameter(Parameter):
|
|
44
45
|
|
45
46
|
@staticmethod
|
46
47
|
@override
|
47
|
-
def from_et(et_element: ElementTree.Element,
|
48
|
-
|
49
|
-
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
|
48
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "TableEntryParameter":
|
49
|
+
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, context))
|
50
50
|
|
51
51
|
target_str = odxrequire(et_element.findtext("TARGET"))
|
52
52
|
try:
|
@@ -54,7 +54,7 @@ class TableEntryParameter(Parameter):
|
|
54
54
|
except ValueError:
|
55
55
|
odxraise(f"Encountered unknown target '{target_str}'")
|
56
56
|
target = cast(RowFragment, None)
|
57
|
-
table_row_ref = odxrequire(OdxLinkRef.from_et(et_element.find("TABLE-ROW-REF"),
|
57
|
+
table_row_ref = odxrequire(OdxLinkRef.from_et(et_element.find("TABLE-ROW-REF"), context))
|
58
58
|
|
59
59
|
return TableEntryParameter(target=target, table_row_ref=table_row_ref, **kwargs)
|
60
60
|
|
@@ -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:
|
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,
|
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
|
@@ -8,7 +8,8 @@ from typing_extensions import final, override
|
|
8
8
|
from ..decodestate import DecodeState
|
9
9
|
from ..encodestate import EncodeState
|
10
10
|
from ..exceptions import DecodeError, EncodeError, odxraise, odxrequire
|
11
|
-
from ..
|
11
|
+
from ..odxdoccontext import OdxDocContext
|
12
|
+
from ..odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef, resolve_snref
|
12
13
|
from ..odxtypes import ParameterValue
|
13
14
|
from ..snrefcontext import SnRefContext
|
14
15
|
from ..utils import dataclass_fields_asdict
|
@@ -19,35 +20,34 @@ if TYPE_CHECKING:
|
|
19
20
|
from ..tablerow import TableRow
|
20
21
|
|
21
22
|
|
22
|
-
@dataclass
|
23
|
+
@dataclass(kw_only=True)
|
23
24
|
class TableKeyParameter(Parameter):
|
24
25
|
|
25
26
|
odx_id: OdxLinkId
|
26
27
|
|
27
28
|
# the spec mandates that exactly one of the two attributes must
|
28
29
|
# be non-None
|
29
|
-
table_ref:
|
30
|
-
table_snref:
|
30
|
+
table_ref: OdxLinkRef | None = None
|
31
|
+
table_snref: str | None = None
|
31
32
|
|
32
33
|
# the spec mandates that exactly one of the two attributes must
|
33
34
|
# be non-None
|
34
|
-
table_row_ref:
|
35
|
-
table_row_snref:
|
35
|
+
table_row_ref: OdxLinkRef | None = None
|
36
|
+
table_row_snref: str | None = None
|
36
37
|
|
37
38
|
@staticmethod
|
38
39
|
@override
|
39
|
-
def from_et(et_element: ElementTree.Element,
|
40
|
-
|
41
|
-
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, doc_frags))
|
40
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "TableKeyParameter":
|
41
|
+
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, context))
|
42
42
|
|
43
|
-
odx_id = odxrequire(OdxLinkId.from_et(et_element,
|
43
|
+
odx_id = odxrequire(OdxLinkId.from_et(et_element, context))
|
44
44
|
|
45
|
-
table_ref = OdxLinkRef.from_et(et_element.find("TABLE-REF"),
|
45
|
+
table_ref = OdxLinkRef.from_et(et_element.find("TABLE-REF"), context)
|
46
46
|
table_snref = None
|
47
47
|
if (table_snref_elem := et_element.find("TABLE-SNREF")) is not None:
|
48
48
|
table_snref = odxrequire(table_snref_elem.get("SHORT-NAME"))
|
49
49
|
|
50
|
-
table_row_ref = OdxLinkRef.from_et(et_element.find("TABLE-ROW-REF"),
|
50
|
+
table_row_ref = OdxLinkRef.from_et(et_element.find("TABLE-ROW-REF"), context)
|
51
51
|
table_row_snref = None
|
52
52
|
if (table_row_snref_elem := et_element.find("TABLE-ROW-SNREF")) is not None:
|
53
53
|
table_row_snref = odxrequire(table_row_snref_elem.get("SHORT-NAME"))
|
@@ -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:
|