odxtools 10.0.0__py3-none-any.whl → 10.1.1__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 +5 -5
- odxtools/admindata.py +10 -9
- odxtools/audience.py +15 -15
- odxtools/basecomparam.py +7 -6
- odxtools/basevariantpattern.py +7 -7
- odxtools/basicstructure.py +9 -9
- odxtools/cli/_print_utils.py +1 -1
- odxtools/cli/browse.py +1 -1
- odxtools/cli/compare.py +143 -170
- odxtools/cli/list.py +1 -1
- odxtools/commrelation.py +14 -13
- odxtools/companydata.py +11 -11
- odxtools/companydocinfo.py +11 -13
- odxtools/companyrevisioninfo.py +7 -7
- odxtools/companyspecificinfo.py +9 -11
- odxtools/comparam.py +6 -5
- odxtools/comparaminstance.py +10 -10
- odxtools/comparamspec.py +8 -9
- odxtools/comparamsubset.py +14 -22
- odxtools/complexcomparam.py +10 -10
- odxtools/complexdop.py +1 -1
- odxtools/compositecodec.py +3 -3
- odxtools/compumethods/compucodecompumethod.py +4 -4
- odxtools/compumethods/compuconst.py +3 -3
- odxtools/compumethods/compudefaultvalue.py +2 -2
- odxtools/compumethods/compuinternaltophys.py +11 -10
- odxtools/compumethods/compumethod.py +8 -7
- odxtools/compumethods/compuphystointernal.py +11 -10
- odxtools/compumethods/compurationalcoeffs.py +6 -6
- odxtools/compumethods/compuscale.py +14 -14
- odxtools/compumethods/createanycompumethod.py +12 -12
- odxtools/compumethods/identicalcompumethod.py +4 -4
- odxtools/compumethods/limit.py +8 -8
- odxtools/compumethods/linearcompumethod.py +4 -4
- odxtools/compumethods/linearsegment.py +8 -8
- odxtools/compumethods/ratfunccompumethod.py +4 -4
- odxtools/compumethods/ratfuncsegment.py +8 -8
- odxtools/compumethods/scalelinearcompumethod.py +5 -5
- odxtools/compumethods/scaleratfunccompumethod.py +4 -4
- odxtools/compumethods/tabintpcompumethod.py +12 -12
- odxtools/compumethods/texttablecompumethod.py +4 -4
- odxtools/createanycomparam.py +4 -4
- odxtools/createanydiagcodedtype.py +7 -7
- odxtools/database.py +28 -26
- odxtools/dataobjectproperty.py +15 -16
- odxtools/description.py +7 -7
- odxtools/determinenumberofitems.py +6 -5
- odxtools/diagcodedtype.py +6 -6
- odxtools/diagcomm.py +26 -27
- odxtools/diagdatadictionaryspec.py +34 -34
- odxtools/diaglayercontainer.py +32 -31
- odxtools/diaglayers/basevariant.py +5 -4
- odxtools/diaglayers/basevariantraw.py +18 -19
- odxtools/diaglayers/diaglayer.py +5 -4
- odxtools/diaglayers/diaglayerraw.py +39 -48
- odxtools/diaglayers/ecushareddata.py +6 -6
- odxtools/diaglayers/ecushareddataraw.py +11 -12
- odxtools/diaglayers/ecuvariant.py +5 -4
- odxtools/diaglayers/ecuvariantraw.py +17 -18
- odxtools/diaglayers/functionalgroup.py +5 -5
- odxtools/diaglayers/functionalgroupraw.py +13 -14
- odxtools/diaglayers/hierarchyelement.py +9 -9
- odxtools/diaglayers/hierarchyelementraw.py +8 -9
- odxtools/diaglayers/protocol.py +4 -4
- odxtools/diaglayers/protocolraw.py +10 -11
- odxtools/diagnostictroublecode.py +12 -14
- odxtools/diagservice.py +19 -18
- odxtools/diagvariable.py +19 -20
- odxtools/docrevision.py +14 -13
- odxtools/dopbase.py +10 -11
- odxtools/dtcconnector.py +6 -5
- odxtools/dtcdop.py +15 -15
- odxtools/dynamicendmarkerfield.py +6 -6
- odxtools/dynamiclengthfield.py +6 -6
- odxtools/dyndefinedspec.py +7 -7
- odxtools/dynenddopref.py +7 -7
- odxtools/dyniddefmodeinfo.py +17 -17
- odxtools/ecuvariantpattern.py +6 -7
- odxtools/element.py +12 -12
- odxtools/endofpdufield.py +6 -7
- odxtools/envdataconnector.py +6 -6
- odxtools/environmentdata.py +7 -8
- odxtools/environmentdatadescription.py +13 -12
- odxtools/externalaccessmethod.py +4 -5
- odxtools/externaldoc.py +4 -4
- odxtools/field.py +12 -11
- odxtools/functionalclass.py +7 -7
- odxtools/inputparam.py +9 -8
- odxtools/internalconstr.py +10 -10
- odxtools/leadinglengthinfotype.py +5 -6
- odxtools/library.py +7 -6
- odxtools/linkeddtcdop.py +7 -6
- odxtools/matchingbasevariantparameter.py +5 -5
- odxtools/matchingparameter.py +6 -6
- odxtools/message.py +1 -1
- odxtools/minmaxlengthtype.py +6 -7
- odxtools/modification.py +5 -4
- odxtools/multiplexer.py +48 -12
- odxtools/multiplexercase.py +10 -10
- odxtools/multiplexerdefaultcase.py +8 -7
- odxtools/multiplexerswitchkey.py +6 -6
- odxtools/nameditemlist.py +1 -1
- odxtools/negoutputparam.py +6 -6
- odxtools/odxcategory.py +12 -24
- odxtools/odxdoccontext.py +16 -0
- odxtools/odxlink.py +11 -12
- odxtools/odxtypes.py +3 -3
- odxtools/outputparam.py +7 -6
- odxtools/parameters/codedconstparameter.py +6 -6
- odxtools/parameters/createanyparameter.py +15 -15
- odxtools/parameters/dynamicparameter.py +4 -5
- odxtools/parameters/lengthkeyparameter.py +6 -6
- odxtools/parameters/matchingrequestparameter.py +4 -4
- odxtools/parameters/nrcconstparameter.py +8 -8
- odxtools/parameters/parameter.py +12 -13
- odxtools/parameters/parameterwithdop.py +9 -9
- odxtools/parameters/physicalconstantparameter.py +5 -4
- odxtools/parameters/reservedparameter.py +4 -5
- odxtools/parameters/systemparameter.py +4 -5
- odxtools/parameters/tableentryparameter.py +6 -6
- odxtools/parameters/tablekeyparameter.py +12 -12
- odxtools/parameters/tablestructparameter.py +9 -9
- odxtools/parameters/valueparameter.py +6 -6
- odxtools/paramlengthinfotype.py +6 -7
- odxtools/parentref.py +12 -10
- odxtools/physicaldimension.py +12 -12
- odxtools/physicaltype.py +5 -5
- odxtools/posresponsesuppressible.py +11 -11
- odxtools/preconditionstateref.py +8 -8
- odxtools/progcode.py +9 -8
- odxtools/protstack.py +8 -7
- odxtools/relateddiagcommref.py +5 -5
- odxtools/relateddoc.py +8 -7
- odxtools/request.py +12 -13
- odxtools/response.py +12 -13
- odxtools/scaleconstr.py +8 -8
- odxtools/singleecujob.py +14 -13
- odxtools/snrefcontext.py +1 -1
- odxtools/specialdata.py +6 -5
- odxtools/specialdatagroup.py +13 -13
- odxtools/specialdatagroupcaption.py +5 -4
- odxtools/standardlengthtype.py +5 -13
- odxtools/state.py +5 -4
- odxtools/statechart.py +10 -9
- odxtools/statemachine.py +2 -2
- odxtools/statetransition.py +7 -7
- odxtools/statetransitionref.py +11 -11
- odxtools/staticfield.py +5 -4
- odxtools/structure.py +5 -5
- odxtools/subcomponent.py +18 -16
- odxtools/subcomponentparamconnector.py +8 -7
- odxtools/subcomponentpattern.py +7 -7
- odxtools/swvariable.py +6 -6
- odxtools/table.py +20 -21
- odxtools/tablediagcommconnector.py +7 -6
- odxtools/tablerow.py +57 -36
- odxtools/tablerowconnector.py +6 -6
- odxtools/teammember.py +14 -13
- odxtools/templates/macros/printParentRef.xml.jinja2 +3 -1
- odxtools/text.py +4 -4
- odxtools/unit.py +9 -8
- odxtools/unitgroup.py +9 -8
- odxtools/unitspec.py +15 -16
- odxtools/variablegroup.py +4 -5
- odxtools/variantpattern.py +3 -4
- odxtools/version.py +2 -2
- odxtools/writepdxfile.py +0 -19
- odxtools/xdoc.py +11 -10
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/METADATA +1 -1
- odxtools-10.1.1.dist-info/RECORD +265 -0
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/WHEEL +1 -1
- odxtools-10.0.0.dist-info/RECORD +0 -264
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/entry_points.txt +0 -0
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/licenses/LICENSE +0 -0
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/top_level.txt +0 -0
@@ -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
|
|
@@ -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: OdxLinkRef | None
|
30
|
-
table_snref: str | None
|
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: OdxLinkRef | None
|
35
|
-
table_row_snref: str | None
|
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"))
|
@@ -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 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,10 +20,10 @@ if TYPE_CHECKING:
|
|
19
20
|
from ..table import Table
|
20
21
|
|
21
22
|
|
22
|
-
@dataclass
|
23
|
+
@dataclass(kw_only=True)
|
23
24
|
class TableStructParameter(Parameter):
|
24
|
-
table_key_ref: OdxLinkRef | None
|
25
|
-
table_key_snref: str | None
|
25
|
+
table_key_ref: OdxLinkRef | None = None
|
26
|
+
table_key_snref: str | None = None
|
26
27
|
|
27
28
|
@property
|
28
29
|
@override
|
@@ -49,12 +50,11 @@ class TableStructParameter(Parameter):
|
|
49
50
|
|
50
51
|
@staticmethod
|
51
52
|
@override
|
52
|
-
def from_et(et_element: ElementTree.Element,
|
53
|
-
doc_frags: list[OdxDocFragment]) -> "TableStructParameter":
|
53
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "TableStructParameter":
|
54
54
|
|
55
|
-
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element,
|
55
|
+
kwargs = dataclass_fields_asdict(Parameter.from_et(et_element, context))
|
56
56
|
|
57
|
-
table_key_ref = OdxLinkRef.from_et(et_element.find("TABLE-KEY-REF"),
|
57
|
+
table_key_ref = OdxLinkRef.from_et(et_element.find("TABLE-KEY-REF"), context)
|
58
58
|
table_key_snref = None
|
59
59
|
if (table_key_snref_elem := et_element.find("TABLE-KEY-SNREF")) is not None:
|
60
60
|
table_key_snref = odxrequire(table_key_snref_elem.get("SHORT-NAME"))
|
@@ -89,7 +89,7 @@ class TableStructParameter(Parameter):
|
|
89
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
|
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(
|
@@ -8,7 +8,8 @@ from typing_extensions import override
|
|
8
8
|
from ..dataobjectproperty import DataObjectProperty
|
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 OdxLinkDatabase, OdxLinkId
|
12
13
|
from ..odxtypes import AtomicOdxType, ParameterValue
|
13
14
|
from ..snrefcontext import SnRefContext
|
14
15
|
from ..utils import dataclass_fields_asdict
|
@@ -16,9 +17,9 @@ from .parameter import ParameterType
|
|
16
17
|
from .parameterwithdop import ParameterWithDOP
|
17
18
|
|
18
19
|
|
19
|
-
@dataclass
|
20
|
+
@dataclass(kw_only=True)
|
20
21
|
class ValueParameter(ParameterWithDOP):
|
21
|
-
physical_default_value_raw: str | None
|
22
|
+
physical_default_value_raw: str | None = None
|
22
23
|
|
23
24
|
@property
|
24
25
|
@override
|
@@ -41,10 +42,9 @@ class ValueParameter(ParameterWithDOP):
|
|
41
42
|
|
42
43
|
@staticmethod
|
43
44
|
@override
|
44
|
-
def from_et(et_element: ElementTree.Element,
|
45
|
-
doc_frags: list[OdxDocFragment]) -> "ValueParameter":
|
45
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "ValueParameter":
|
46
46
|
|
47
|
-
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element,
|
47
|
+
kwargs = dataclass_fields_asdict(ParameterWithDOP.from_et(et_element, context))
|
48
48
|
|
49
49
|
physical_default_value_raw = et_element.findtext("PHYSICAL-DEFAULT-VALUE")
|
50
50
|
|
odxtools/paramlengthinfotype.py
CHANGED
@@ -9,7 +9,8 @@ from .decodestate import DecodeState
|
|
9
9
|
from .diagcodedtype import DctType, DiagCodedType
|
10
10
|
from .encodestate import EncodeState
|
11
11
|
from .exceptions import EncodeError, odxraise, odxrequire
|
12
|
-
from .
|
12
|
+
from .odxdoccontext import OdxDocContext
|
13
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
|
13
14
|
from .odxtypes import AtomicOdxType, DataType
|
14
15
|
from .snrefcontext import SnRefContext
|
15
16
|
from .utils import dataclass_fields_asdict
|
@@ -18,7 +19,7 @@ if TYPE_CHECKING:
|
|
18
19
|
from .parameters.lengthkeyparameter import LengthKeyParameter
|
19
20
|
|
20
21
|
|
21
|
-
@dataclass
|
22
|
+
@dataclass(kw_only=True)
|
22
23
|
class ParamLengthInfoType(DiagCodedType):
|
23
24
|
length_key_ref: OdxLinkRef
|
24
25
|
|
@@ -32,12 +33,10 @@ class ParamLengthInfoType(DiagCodedType):
|
|
32
33
|
|
33
34
|
@staticmethod
|
34
35
|
@override
|
35
|
-
def from_et(et_element: ElementTree.Element,
|
36
|
-
|
37
|
-
kwargs = dataclass_fields_asdict(DiagCodedType.from_et(et_element, doc_frags))
|
36
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "ParamLengthInfoType":
|
37
|
+
kwargs = dataclass_fields_asdict(DiagCodedType.from_et(et_element, context))
|
38
38
|
|
39
|
-
length_key_ref = odxrequire(
|
40
|
-
OdxLinkRef.from_et(et_element.find("LENGTH-KEY-REF"), doc_frags))
|
39
|
+
length_key_ref = odxrequire(OdxLinkRef.from_et(et_element.find("LENGTH-KEY-REF"), context))
|
41
40
|
|
42
41
|
return ParamLengthInfoType(length_key_ref=length_key_ref, **kwargs)
|
43
42
|
|
odxtools/parentref.py
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
2
|
from copy import deepcopy
|
3
|
-
from dataclasses import dataclass
|
3
|
+
from dataclasses import dataclass, field
|
4
4
|
from typing import TYPE_CHECKING, Any
|
5
5
|
from xml.etree import ElementTree
|
6
6
|
|
7
7
|
from .exceptions import odxrequire
|
8
|
-
from .
|
8
|
+
from .odxdoccontext import OdxDocContext
|
9
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
|
9
10
|
from .snrefcontext import SnRefContext
|
10
11
|
from .utils import dataclass_fields_asdict
|
11
12
|
|
@@ -13,23 +14,24 @@ if TYPE_CHECKING:
|
|
13
14
|
from .diaglayers.diaglayer import DiagLayer
|
14
15
|
|
15
16
|
|
16
|
-
@dataclass
|
17
|
+
@dataclass(kw_only=True)
|
17
18
|
class ParentRef:
|
18
19
|
layer_ref: OdxLinkRef
|
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]
|
20
|
+
not_inherited_diag_comms: list[str] = field(default_factory=list) # short_name references
|
21
|
+
not_inherited_variables: list[str] = field(default_factory=list) # short_name references
|
22
|
+
not_inherited_dops: list[str] = field(default_factory=list) # short_name references
|
23
|
+
not_inherited_tables: list[str] = field(default_factory=list) # short_name references
|
24
|
+
not_inherited_global_neg_responses: list[str] = field(
|
25
|
+
default_factory=list) # short_name references
|
24
26
|
|
25
27
|
@property
|
26
28
|
def layer(self) -> "DiagLayer":
|
27
29
|
return self._layer
|
28
30
|
|
29
31
|
@staticmethod
|
30
|
-
def from_et(et_element: ElementTree.Element,
|
32
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "ParentRef":
|
31
33
|
|
32
|
-
layer_ref = odxrequire(OdxLinkRef.from_et(et_element,
|
34
|
+
layer_ref = odxrequire(OdxLinkRef.from_et(et_element, context))
|
33
35
|
|
34
36
|
not_inherited_diag_comms = [
|
35
37
|
odxrequire(el.get("SHORT-NAME"))
|
odxtools/physicaldimension.py
CHANGED
@@ -4,12 +4,13 @@ from typing import Any
|
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .element import IdentifiableElement
|
7
|
-
from .
|
7
|
+
from .odxdoccontext import OdxDocContext
|
8
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId
|
8
9
|
from .snrefcontext import SnRefContext
|
9
10
|
from .utils import dataclass_fields_asdict
|
10
11
|
|
11
12
|
|
12
|
-
@dataclass
|
13
|
+
@dataclass(kw_only=True)
|
13
14
|
class PhysicalDimension(IdentifiableElement):
|
14
15
|
"""A physical dimension is a formal definition of a unit.
|
15
16
|
|
@@ -41,18 +42,17 @@ class PhysicalDimension(IdentifiableElement):
|
|
41
42
|
)
|
42
43
|
```
|
43
44
|
"""
|
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
|
45
|
+
length_exp: int | None = None
|
46
|
+
mass_exp: int | None = None
|
47
|
+
time_exp: int | None = None
|
48
|
+
current_exp: int | None = None
|
49
|
+
temperature_exp: int | None = None
|
50
|
+
molar_amount_exp: int | None = None
|
51
|
+
luminous_intensity_exp: int | None = None
|
51
52
|
|
52
53
|
@staticmethod
|
53
|
-
def from_et(et_element: ElementTree.Element,
|
54
|
-
|
55
|
-
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, doc_frags))
|
54
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "PhysicalDimension":
|
55
|
+
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, context))
|
56
56
|
|
57
57
|
def read_optional_int(element: ElementTree.Element, name: str) -> int | None:
|
58
58
|
if (val_str := element.findtext(name)) is not None:
|
odxtools/physicaltype.py
CHANGED
@@ -3,12 +3,12 @@ from dataclasses import dataclass
|
|
3
3
|
from xml.etree import ElementTree
|
4
4
|
|
5
5
|
from .exceptions import odxraise
|
6
|
-
from .
|
6
|
+
from .odxdoccontext import OdxDocContext
|
7
7
|
from .odxtypes import DataType
|
8
8
|
from .radix import Radix
|
9
9
|
|
10
10
|
|
11
|
-
@dataclass
|
11
|
+
@dataclass(kw_only=True)
|
12
12
|
class PhysicalType:
|
13
13
|
"""The physical type describes the base data type of a parameter.
|
14
14
|
|
@@ -31,20 +31,20 @@ class PhysicalType:
|
|
31
31
|
PhysicalType(DataType.A_FLOAT64, precision=2)
|
32
32
|
"""
|
33
33
|
|
34
|
-
precision: int | None
|
34
|
+
precision: int | None = None
|
35
35
|
"""Number of digits after the decimal point to display to the user
|
36
36
|
The precision is only applicable if the base data type is A_FLOAT32 or A_FLOAT64.
|
37
37
|
"""
|
38
38
|
|
39
39
|
base_data_type: DataType
|
40
40
|
|
41
|
-
display_radix: Radix | None
|
41
|
+
display_radix: Radix | None = None
|
42
42
|
"""The display radix defines how integers are displayed to the user.
|
43
43
|
The display radix is only applicable if the base data type is A_UINT32.
|
44
44
|
"""
|
45
45
|
|
46
46
|
@staticmethod
|
47
|
-
def from_et(et_element: ElementTree.Element,
|
47
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "PhysicalType":
|
48
48
|
precision_str = et_element.findtext("PRECISION")
|
49
49
|
precision = int(precision_str) if precision_str is not None else None
|
50
50
|
|
@@ -3,31 +3,31 @@ from dataclasses import dataclass
|
|
3
3
|
from xml.etree import ElementTree
|
4
4
|
|
5
5
|
from .exceptions import odxrequire
|
6
|
-
from .
|
6
|
+
from .odxdoccontext import OdxDocContext
|
7
7
|
from .utils import read_hex_binary
|
8
8
|
|
9
9
|
|
10
10
|
# note that the spec has a typo here: it calls the corresponding
|
11
11
|
# XML tag POS-RESPONSE-SUPPRESSABLE...
|
12
|
-
@dataclass
|
12
|
+
@dataclass(kw_only=True)
|
13
13
|
class PosResponseSuppressible:
|
14
14
|
bit_mask: int
|
15
15
|
|
16
|
-
coded_const_snref: str | None
|
17
|
-
coded_const_snpathref: str | None
|
16
|
+
coded_const_snref: str | None = None
|
17
|
+
coded_const_snpathref: str | None = None
|
18
18
|
|
19
|
-
value_snref: str | None
|
20
|
-
value_snpathref: str | None
|
19
|
+
value_snref: str | None = None
|
20
|
+
value_snpathref: str | None = None
|
21
21
|
|
22
|
-
phys_const_snref: str | None
|
23
|
-
phys_const_snpathref: str | None
|
22
|
+
phys_const_snref: str | None = None
|
23
|
+
phys_const_snpathref: str | None = None
|
24
24
|
|
25
|
-
table_key_snref: str | None
|
26
|
-
table_key_snpathref: str | None
|
25
|
+
table_key_snref: str | None = None
|
26
|
+
table_key_snpathref: str | None = None
|
27
27
|
|
28
28
|
@staticmethod
|
29
29
|
def from_et(et_element: ElementTree.Element,
|
30
|
-
|
30
|
+
context: OdxDocContext) -> "PosResponseSuppressible":
|
31
31
|
|
32
32
|
bit_mask = odxrequire(read_hex_binary(et_element.find("BIT-MASK")))
|
33
33
|
|
odxtools/preconditionstateref.py
CHANGED
@@ -4,7 +4,8 @@ from typing import TYPE_CHECKING, Any
|
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .exceptions import odxassert, odxrequire
|
7
|
-
from .
|
7
|
+
from .odxdoccontext import OdxDocContext
|
8
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
|
8
9
|
from .odxtypes import ParameterValueDict
|
9
10
|
from .parameters.parameter import Parameter
|
10
11
|
from .snrefcontext import SnRefContext
|
@@ -16,15 +17,15 @@ if TYPE_CHECKING:
|
|
16
17
|
from .statemachine import StateMachine
|
17
18
|
|
18
19
|
|
19
|
-
@dataclass
|
20
|
+
@dataclass(kw_only=True)
|
20
21
|
class PreConditionStateRef(OdxLinkRef):
|
21
22
|
"""
|
22
23
|
This class represents the PRE-CONDITION-STATE-REF XML tag.
|
23
24
|
"""
|
24
|
-
value: str | None
|
25
|
+
value: str | None = None
|
25
26
|
|
26
|
-
in_param_if_snref: str | None
|
27
|
-
in_param_if_snpathref: str | None
|
27
|
+
in_param_if_snref: str | None = None
|
28
|
+
in_param_if_snpathref: str | None = None
|
28
29
|
|
29
30
|
@property
|
30
31
|
def state(self) -> "State":
|
@@ -32,9 +33,8 @@ class PreConditionStateRef(OdxLinkRef):
|
|
32
33
|
|
33
34
|
@staticmethod
|
34
35
|
def from_et( # type: ignore[override]
|
35
|
-
et_element: ElementTree.Element,
|
36
|
-
|
37
|
-
kwargs = dataclass_fields_asdict(OdxLinkRef.from_et(et_element, doc_frags))
|
36
|
+
et_element: ElementTree.Element, context: OdxDocContext) -> "PreConditionStateRef":
|
37
|
+
kwargs = dataclass_fields_asdict(OdxLinkRef.from_et(et_element, context))
|
38
38
|
|
39
39
|
value = et_element.findtext("VALUE")
|
40
40
|
|
odxtools/progcode.py
CHANGED
@@ -1,24 +1,25 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
|
-
from dataclasses import dataclass
|
2
|
+
from dataclasses import dataclass, field
|
3
3
|
from typing import Any, cast
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .exceptions import odxraise, odxrequire
|
7
7
|
from .library import Library
|
8
8
|
from .nameditemlist import NamedItemList
|
9
|
-
from .
|
9
|
+
from .odxdoccontext import OdxDocContext
|
10
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
|
10
11
|
from .snrefcontext import SnRefContext
|
11
12
|
|
12
13
|
|
13
|
-
@dataclass
|
14
|
+
@dataclass(kw_only=True)
|
14
15
|
class ProgCode:
|
15
16
|
"""A reference to code that is executed by a single ECU job"""
|
16
17
|
code_file: str
|
17
|
-
encryption: str | None
|
18
|
+
encryption: str | None = None
|
18
19
|
syntax: str
|
19
20
|
revision: str
|
20
|
-
entrypoint: str | None
|
21
|
-
library_refs: list[OdxLinkRef]
|
21
|
+
entrypoint: str | None = None
|
22
|
+
library_refs: list[OdxLinkRef] = field(default_factory=list)
|
22
23
|
|
23
24
|
@property
|
24
25
|
def code(self) -> bytes:
|
@@ -29,7 +30,7 @@ class ProgCode:
|
|
29
30
|
return self._libraries
|
30
31
|
|
31
32
|
@staticmethod
|
32
|
-
def from_et(et_element: ElementTree.Element,
|
33
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "ProgCode":
|
33
34
|
code_file = odxrequire(et_element.findtext("CODE-FILE"))
|
34
35
|
encryption = et_element.findtext("ENCRYPTION")
|
35
36
|
syntax = odxrequire(et_element.findtext("SYNTAX"))
|
@@ -37,7 +38,7 @@ class ProgCode:
|
|
37
38
|
entrypoint = et_element.findtext("ENTRYPOINT")
|
38
39
|
|
39
40
|
library_refs = [
|
40
|
-
odxrequire(OdxLinkRef.from_et(el,
|
41
|
+
odxrequire(OdxLinkRef.from_et(el, context))
|
41
42
|
for el in et_element.iterfind("LIBRARY-REFS/LIBRARY-REF")
|
42
43
|
]
|
43
44
|
|
odxtools/protstack.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
|
-
from dataclasses import dataclass
|
2
|
+
from dataclasses import dataclass, field
|
3
3
|
from typing import Any
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
@@ -7,30 +7,31 @@ from .comparamsubset import ComparamSubset
|
|
7
7
|
from .element import IdentifiableElement
|
8
8
|
from .exceptions import odxrequire
|
9
9
|
from .nameditemlist import NamedItemList
|
10
|
-
from .
|
10
|
+
from .odxdoccontext import OdxDocContext
|
11
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
|
11
12
|
from .snrefcontext import SnRefContext
|
12
13
|
from .utils import dataclass_fields_asdict
|
13
14
|
|
14
15
|
|
15
|
-
@dataclass
|
16
|
+
@dataclass(kw_only=True)
|
16
17
|
class ProtStack(IdentifiableElement):
|
17
18
|
# mandatory in ODX 2.2, but non existent in ODX 2.0
|
18
19
|
pdu_protocol_type: str
|
19
20
|
physical_link_type: str
|
20
|
-
comparam_subset_refs: list[OdxLinkRef]
|
21
|
+
comparam_subset_refs: list[OdxLinkRef] = field(default_factory=list)
|
21
22
|
|
22
23
|
@property
|
23
24
|
def comparam_subsets(self) -> NamedItemList[ComparamSubset]:
|
24
25
|
return self._comparam_subsets
|
25
26
|
|
26
27
|
@staticmethod
|
27
|
-
def from_et(et_element: ElementTree.Element,
|
28
|
-
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element,
|
28
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "ProtStack":
|
29
|
+
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, context))
|
29
30
|
|
30
31
|
pdu_protocol_type = odxrequire(et_element.findtext("PDU-PROTOCOL-TYPE"))
|
31
32
|
physical_link_type = odxrequire(et_element.findtext("PHYSICAL-LINK-TYPE"))
|
32
33
|
comparam_subset_refs = [
|
33
|
-
OdxLinkRef.from_et(csr_element,
|
34
|
+
OdxLinkRef.from_et(csr_element, context)
|
34
35
|
for csr_element in et_element.iterfind("COMPARAM-SUBSET-REFS/"
|
35
36
|
"COMPARAM-SUBSET-REF")
|
36
37
|
]
|
odxtools/relateddiagcommref.py
CHANGED
@@ -3,19 +3,19 @@ from dataclasses import dataclass
|
|
3
3
|
from xml.etree import ElementTree
|
4
4
|
|
5
5
|
from .exceptions import odxrequire
|
6
|
-
from .
|
6
|
+
from .odxdoccontext import OdxDocContext
|
7
|
+
from .odxlink import OdxLinkRef
|
7
8
|
from .utils import dataclass_fields_asdict
|
8
9
|
|
9
10
|
|
10
|
-
@dataclass
|
11
|
+
@dataclass(kw_only=True)
|
11
12
|
class RelatedDiagCommRef(OdxLinkRef):
|
12
13
|
relation_type: str
|
13
14
|
|
14
15
|
@staticmethod
|
15
16
|
def from_et( # type: ignore[override]
|
16
|
-
et_element: ElementTree.Element,
|
17
|
-
|
18
|
-
kwargs = dataclass_fields_asdict(odxrequire(OdxLinkRef.from_et(et_element, doc_frags)))
|
17
|
+
et_element: ElementTree.Element, context: OdxDocContext) -> "RelatedDiagCommRef":
|
18
|
+
kwargs = dataclass_fields_asdict(odxrequire(OdxLinkRef.from_et(et_element, context)))
|
19
19
|
|
20
20
|
relation_type = odxrequire(et_element.findtext("RELATION-TYPE"))
|
21
21
|
|
odxtools/relateddoc.py
CHANGED
@@ -4,22 +4,23 @@ from typing import Any
|
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .description import Description
|
7
|
-
from .
|
7
|
+
from .odxdoccontext import OdxDocContext
|
8
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId
|
8
9
|
from .snrefcontext import SnRefContext
|
9
10
|
from .xdoc import XDoc
|
10
11
|
|
11
12
|
|
12
|
-
@dataclass
|
13
|
+
@dataclass(kw_only=True)
|
13
14
|
class RelatedDoc:
|
14
|
-
xdoc: XDoc | None
|
15
|
-
description: Description | None
|
15
|
+
xdoc: XDoc | None = None
|
16
|
+
description: Description | None = None
|
16
17
|
|
17
18
|
@staticmethod
|
18
|
-
def from_et(et_element: ElementTree.Element,
|
19
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "RelatedDoc":
|
19
20
|
xdoc: XDoc | None = None
|
20
21
|
if (xdoc_elem := et_element.find("XDOC")) is not None:
|
21
|
-
xdoc = XDoc.from_et(xdoc_elem,
|
22
|
-
description = Description.from_et(et_element.find("DESC"),
|
22
|
+
xdoc = XDoc.from_et(xdoc_elem, context)
|
23
|
+
description = Description.from_et(et_element.find("DESC"), context)
|
23
24
|
|
24
25
|
return RelatedDoc(
|
25
26
|
xdoc=xdoc,
|
odxtools/request.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
|
-
from dataclasses import dataclass
|
2
|
+
from dataclasses import dataclass, field
|
3
3
|
from typing import Any, cast
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
@@ -14,7 +14,8 @@ from .element import IdentifiableElement
|
|
14
14
|
from .encodestate import EncodeState
|
15
15
|
from .exceptions import odxraise
|
16
16
|
from .nameditemlist import NamedItemList
|
17
|
-
from .
|
17
|
+
from .odxdoccontext import OdxDocContext
|
18
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId
|
18
19
|
from .odxtypes import ParameterValue, ParameterValueDict
|
19
20
|
from .parameters.createanyparameter import create_any_parameter_from_et
|
20
21
|
from .parameters.parameter import Parameter
|
@@ -23,15 +24,15 @@ from .specialdatagroup import SpecialDataGroup
|
|
23
24
|
from .utils import dataclass_fields_asdict
|
24
25
|
|
25
26
|
|
26
|
-
@dataclass
|
27
|
+
@dataclass(kw_only=True)
|
27
28
|
class Request(IdentifiableElement):
|
28
29
|
"""Represents all information related to an UDS request
|
29
30
|
|
30
31
|
This class implements the `CompositeCodec` interface.
|
31
32
|
"""
|
32
|
-
admin_data: AdminData | None
|
33
|
-
parameters: NamedItemList[Parameter]
|
34
|
-
sdgs: list[SpecialDataGroup]
|
33
|
+
admin_data: AdminData | None = None
|
34
|
+
parameters: NamedItemList[Parameter] = field(default_factory=NamedItemList)
|
35
|
+
sdgs: list[SpecialDataGroup] = field(default_factory=list)
|
35
36
|
|
36
37
|
@property
|
37
38
|
def required_parameters(self) -> list[Parameter]:
|
@@ -42,17 +43,15 @@ class Request(IdentifiableElement):
|
|
42
43
|
return composite_codec_get_free_parameters(self)
|
43
44
|
|
44
45
|
@staticmethod
|
45
|
-
def from_et(et_element: ElementTree.Element,
|
46
|
-
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element,
|
46
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "Request":
|
47
|
+
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, context))
|
47
48
|
|
48
|
-
admin_data = AdminData.from_et(et_element.find("ADMIN-DATA"),
|
49
|
+
admin_data = AdminData.from_et(et_element.find("ADMIN-DATA"), context)
|
49
50
|
parameters = NamedItemList([
|
50
|
-
create_any_parameter_from_et(et_parameter,
|
51
|
+
create_any_parameter_from_et(et_parameter, context)
|
51
52
|
for et_parameter in et_element.iterfind("PARAMS/PARAM")
|
52
53
|
])
|
53
|
-
sdgs = [
|
54
|
-
SpecialDataGroup.from_et(sdge, doc_frags) for sdge in et_element.iterfind("SDGS/SDG")
|
55
|
-
]
|
54
|
+
sdgs = [SpecialDataGroup.from_et(sdge, context) for sdge in et_element.iterfind("SDGS/SDG")]
|
56
55
|
|
57
56
|
return Request(admin_data=admin_data, parameters=parameters, sdgs=sdgs, **kwargs)
|
58
57
|
|