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.
Files changed (175) hide show
  1. odxtools/additionalaudience.py +5 -5
  2. odxtools/admindata.py +10 -9
  3. odxtools/audience.py +15 -15
  4. odxtools/basecomparam.py +7 -6
  5. odxtools/basevariantpattern.py +7 -7
  6. odxtools/basicstructure.py +9 -9
  7. odxtools/cli/_print_utils.py +1 -1
  8. odxtools/cli/browse.py +1 -1
  9. odxtools/cli/compare.py +143 -170
  10. odxtools/cli/list.py +1 -1
  11. odxtools/commrelation.py +14 -13
  12. odxtools/companydata.py +11 -11
  13. odxtools/companydocinfo.py +11 -13
  14. odxtools/companyrevisioninfo.py +7 -7
  15. odxtools/companyspecificinfo.py +9 -11
  16. odxtools/comparam.py +6 -5
  17. odxtools/comparaminstance.py +10 -10
  18. odxtools/comparamspec.py +8 -9
  19. odxtools/comparamsubset.py +14 -22
  20. odxtools/complexcomparam.py +10 -10
  21. odxtools/complexdop.py +1 -1
  22. odxtools/compositecodec.py +3 -3
  23. odxtools/compumethods/compucodecompumethod.py +4 -4
  24. odxtools/compumethods/compuconst.py +3 -3
  25. odxtools/compumethods/compudefaultvalue.py +2 -2
  26. odxtools/compumethods/compuinternaltophys.py +11 -10
  27. odxtools/compumethods/compumethod.py +8 -7
  28. odxtools/compumethods/compuphystointernal.py +11 -10
  29. odxtools/compumethods/compurationalcoeffs.py +6 -6
  30. odxtools/compumethods/compuscale.py +14 -14
  31. odxtools/compumethods/createanycompumethod.py +12 -12
  32. odxtools/compumethods/identicalcompumethod.py +4 -4
  33. odxtools/compumethods/limit.py +8 -8
  34. odxtools/compumethods/linearcompumethod.py +4 -4
  35. odxtools/compumethods/linearsegment.py +8 -8
  36. odxtools/compumethods/ratfunccompumethod.py +4 -4
  37. odxtools/compumethods/ratfuncsegment.py +8 -8
  38. odxtools/compumethods/scalelinearcompumethod.py +5 -5
  39. odxtools/compumethods/scaleratfunccompumethod.py +4 -4
  40. odxtools/compumethods/tabintpcompumethod.py +12 -12
  41. odxtools/compumethods/texttablecompumethod.py +4 -4
  42. odxtools/createanycomparam.py +4 -4
  43. odxtools/createanydiagcodedtype.py +7 -7
  44. odxtools/database.py +28 -26
  45. odxtools/dataobjectproperty.py +15 -16
  46. odxtools/description.py +7 -7
  47. odxtools/determinenumberofitems.py +6 -5
  48. odxtools/diagcodedtype.py +6 -6
  49. odxtools/diagcomm.py +26 -27
  50. odxtools/diagdatadictionaryspec.py +34 -34
  51. odxtools/diaglayercontainer.py +32 -31
  52. odxtools/diaglayers/basevariant.py +5 -4
  53. odxtools/diaglayers/basevariantraw.py +18 -19
  54. odxtools/diaglayers/diaglayer.py +5 -4
  55. odxtools/diaglayers/diaglayerraw.py +39 -48
  56. odxtools/diaglayers/ecushareddata.py +6 -6
  57. odxtools/diaglayers/ecushareddataraw.py +11 -12
  58. odxtools/diaglayers/ecuvariant.py +5 -4
  59. odxtools/diaglayers/ecuvariantraw.py +17 -18
  60. odxtools/diaglayers/functionalgroup.py +5 -5
  61. odxtools/diaglayers/functionalgroupraw.py +13 -14
  62. odxtools/diaglayers/hierarchyelement.py +9 -9
  63. odxtools/diaglayers/hierarchyelementraw.py +8 -9
  64. odxtools/diaglayers/protocol.py +4 -4
  65. odxtools/diaglayers/protocolraw.py +10 -11
  66. odxtools/diagnostictroublecode.py +12 -14
  67. odxtools/diagservice.py +19 -18
  68. odxtools/diagvariable.py +19 -20
  69. odxtools/docrevision.py +14 -13
  70. odxtools/dopbase.py +10 -11
  71. odxtools/dtcconnector.py +6 -5
  72. odxtools/dtcdop.py +15 -15
  73. odxtools/dynamicendmarkerfield.py +6 -6
  74. odxtools/dynamiclengthfield.py +6 -6
  75. odxtools/dyndefinedspec.py +7 -7
  76. odxtools/dynenddopref.py +7 -7
  77. odxtools/dyniddefmodeinfo.py +17 -17
  78. odxtools/ecuvariantpattern.py +6 -7
  79. odxtools/element.py +12 -12
  80. odxtools/endofpdufield.py +6 -7
  81. odxtools/envdataconnector.py +6 -6
  82. odxtools/environmentdata.py +7 -8
  83. odxtools/environmentdatadescription.py +13 -12
  84. odxtools/externalaccessmethod.py +4 -5
  85. odxtools/externaldoc.py +4 -4
  86. odxtools/field.py +12 -11
  87. odxtools/functionalclass.py +7 -7
  88. odxtools/inputparam.py +9 -8
  89. odxtools/internalconstr.py +10 -10
  90. odxtools/leadinglengthinfotype.py +5 -6
  91. odxtools/library.py +7 -6
  92. odxtools/linkeddtcdop.py +7 -6
  93. odxtools/matchingbasevariantparameter.py +5 -5
  94. odxtools/matchingparameter.py +6 -6
  95. odxtools/message.py +1 -1
  96. odxtools/minmaxlengthtype.py +6 -7
  97. odxtools/modification.py +5 -4
  98. odxtools/multiplexer.py +48 -12
  99. odxtools/multiplexercase.py +10 -10
  100. odxtools/multiplexerdefaultcase.py +8 -7
  101. odxtools/multiplexerswitchkey.py +6 -6
  102. odxtools/nameditemlist.py +1 -1
  103. odxtools/negoutputparam.py +6 -6
  104. odxtools/odxcategory.py +12 -24
  105. odxtools/odxdoccontext.py +16 -0
  106. odxtools/odxlink.py +11 -12
  107. odxtools/odxtypes.py +3 -3
  108. odxtools/outputparam.py +7 -6
  109. odxtools/parameters/codedconstparameter.py +6 -6
  110. odxtools/parameters/createanyparameter.py +15 -15
  111. odxtools/parameters/dynamicparameter.py +4 -5
  112. odxtools/parameters/lengthkeyparameter.py +6 -6
  113. odxtools/parameters/matchingrequestparameter.py +4 -4
  114. odxtools/parameters/nrcconstparameter.py +8 -8
  115. odxtools/parameters/parameter.py +12 -13
  116. odxtools/parameters/parameterwithdop.py +9 -9
  117. odxtools/parameters/physicalconstantparameter.py +5 -4
  118. odxtools/parameters/reservedparameter.py +4 -5
  119. odxtools/parameters/systemparameter.py +4 -5
  120. odxtools/parameters/tableentryparameter.py +6 -6
  121. odxtools/parameters/tablekeyparameter.py +12 -12
  122. odxtools/parameters/tablestructparameter.py +9 -9
  123. odxtools/parameters/valueparameter.py +6 -6
  124. odxtools/paramlengthinfotype.py +6 -7
  125. odxtools/parentref.py +12 -10
  126. odxtools/physicaldimension.py +12 -12
  127. odxtools/physicaltype.py +5 -5
  128. odxtools/posresponsesuppressible.py +11 -11
  129. odxtools/preconditionstateref.py +8 -8
  130. odxtools/progcode.py +9 -8
  131. odxtools/protstack.py +8 -7
  132. odxtools/relateddiagcommref.py +5 -5
  133. odxtools/relateddoc.py +8 -7
  134. odxtools/request.py +12 -13
  135. odxtools/response.py +12 -13
  136. odxtools/scaleconstr.py +8 -8
  137. odxtools/singleecujob.py +14 -13
  138. odxtools/snrefcontext.py +1 -1
  139. odxtools/specialdata.py +6 -5
  140. odxtools/specialdatagroup.py +13 -13
  141. odxtools/specialdatagroupcaption.py +5 -4
  142. odxtools/standardlengthtype.py +5 -13
  143. odxtools/state.py +5 -4
  144. odxtools/statechart.py +10 -9
  145. odxtools/statemachine.py +2 -2
  146. odxtools/statetransition.py +7 -7
  147. odxtools/statetransitionref.py +11 -11
  148. odxtools/staticfield.py +5 -4
  149. odxtools/structure.py +5 -5
  150. odxtools/subcomponent.py +18 -16
  151. odxtools/subcomponentparamconnector.py +8 -7
  152. odxtools/subcomponentpattern.py +7 -7
  153. odxtools/swvariable.py +6 -6
  154. odxtools/table.py +20 -21
  155. odxtools/tablediagcommconnector.py +7 -6
  156. odxtools/tablerow.py +57 -36
  157. odxtools/tablerowconnector.py +6 -6
  158. odxtools/teammember.py +14 -13
  159. odxtools/templates/macros/printParentRef.xml.jinja2 +3 -1
  160. odxtools/text.py +4 -4
  161. odxtools/unit.py +9 -8
  162. odxtools/unitgroup.py +9 -8
  163. odxtools/unitspec.py +15 -16
  164. odxtools/variablegroup.py +4 -5
  165. odxtools/variantpattern.py +3 -4
  166. odxtools/version.py +2 -2
  167. odxtools/writepdxfile.py +0 -19
  168. odxtools/xdoc.py +11 -10
  169. {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/METADATA +1 -1
  170. odxtools-10.1.1.dist-info/RECORD +265 -0
  171. {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/WHEEL +1 -1
  172. odxtools-10.0.0.dist-info/RECORD +0 -264
  173. {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/entry_points.txt +0 -0
  174. {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/licenses/LICENSE +0 -0
  175. {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/top_level.txt +0 -0
@@ -4,21 +4,21 @@ from typing import Any
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from .element import IdentifiableElement
7
- from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
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 AdditionalAudience(IdentifiableElement):
14
15
  """
15
16
  Corresponds to ADDITIONAL-AUDIENCE.
16
17
  """
17
18
 
18
19
  @staticmethod
19
- def from_et(et_element: ElementTree.Element,
20
- doc_frags: list[OdxDocFragment]) -> "AdditionalAudience":
21
- kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, doc_frags))
20
+ def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "AdditionalAudience":
21
+ kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, context))
22
22
 
23
23
  return AdditionalAudience(**kwargs)
24
24
 
odxtools/admindata.py CHANGED
@@ -1,23 +1,24 @@
1
1
  # SPDX-License-Identifier: MIT
2
- from dataclasses import dataclass
2
+ from dataclasses import dataclass, field
3
3
  from typing import Any, Optional
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from .companydocinfo import CompanyDocInfo
7
7
  from .docrevision import DocRevision
8
- from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
8
+ from .odxdoccontext import OdxDocContext
9
+ from .odxlink import OdxLinkDatabase, OdxLinkId
9
10
  from .snrefcontext import SnRefContext
10
11
 
11
12
 
12
- @dataclass
13
+ @dataclass(kw_only=True)
13
14
  class AdminData:
14
- language: str | None
15
- company_doc_infos: list[CompanyDocInfo]
16
- doc_revisions: list[DocRevision]
15
+ language: str | None = None
16
+ company_doc_infos: list[CompanyDocInfo] = field(default_factory=list)
17
+ doc_revisions: list[DocRevision] = field(default_factory=list)
17
18
 
18
19
  @staticmethod
19
20
  def from_et(et_element: ElementTree.Element | None,
20
- doc_frags: list[OdxDocFragment]) -> Optional["AdminData"]:
21
+ context: OdxDocContext) -> Optional["AdminData"]:
21
22
 
22
23
  if et_element is None:
23
24
  return None
@@ -25,12 +26,12 @@ class AdminData:
25
26
  language = et_element.findtext("LANGUAGE")
26
27
 
27
28
  company_doc_infos = [
28
- CompanyDocInfo.from_et(cdi_elem, doc_frags)
29
+ CompanyDocInfo.from_et(cdi_elem, context)
29
30
  for cdi_elem in et_element.iterfind("COMPANY-DOC-INFOS/COMPANY-DOC-INFO")
30
31
  ]
31
32
 
32
33
  doc_revisions = [
33
- DocRevision.from_et(dr_elem, doc_frags)
34
+ DocRevision.from_et(dr_elem, context)
34
35
  for dr_elem in et_element.iterfind("DOC-REVISIONS/DOC-REVISION")
35
36
  ]
36
37
 
odxtools/audience.py CHANGED
@@ -1,25 +1,26 @@
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
 
6
6
  from .additionalaudience import AdditionalAudience
7
7
  from .nameditemlist import NamedItemList
8
- from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
8
+ from .odxdoccontext import OdxDocContext
9
+ from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
9
10
  from .odxtypes import odxstr_to_bool
10
11
  from .snrefcontext import SnRefContext
11
12
 
12
13
 
13
- @dataclass
14
+ @dataclass(kw_only=True)
14
15
  class Audience:
15
- enabled_audience_refs: list[OdxLinkRef]
16
- disabled_audience_refs: list[OdxLinkRef]
16
+ enabled_audience_refs: list[OdxLinkRef] = field(default_factory=list)
17
+ disabled_audience_refs: list[OdxLinkRef] = field(default_factory=list)
17
18
 
18
- is_supplier_raw: bool | None
19
- is_development_raw: bool | None
20
- is_manufacturing_raw: bool | None
21
- is_aftersales_raw: bool | None
22
- is_aftermarket_raw: bool | None
19
+ is_supplier_raw: bool | None = None
20
+ is_development_raw: bool | None = None
21
+ is_manufacturing_raw: bool | None = None
22
+ is_aftersales_raw: bool | None = None
23
+ is_aftermarket_raw: bool | None = None
23
24
 
24
25
  @property
25
26
  def is_supplier(self) -> bool:
@@ -50,15 +51,14 @@ class Audience:
50
51
  return self._disabled_audiences
51
52
 
52
53
  @staticmethod
53
- def from_et(et_element: ElementTree.Element, doc_frags: list[OdxDocFragment]) -> "Audience":
54
+ def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "Audience":
54
55
 
55
56
  enabled_audience_refs = [
56
- OdxLinkRef.from_et(ref, doc_frags)
57
- for ref in et_element.iterfind("ENABLED-AUDIENCE-REFS/"
58
- "ENABLED-AUDIENCE-REF")
57
+ OdxLinkRef.from_et(ref, context) for ref in et_element.iterfind("ENABLED-AUDIENCE-REFS/"
58
+ "ENABLED-AUDIENCE-REF")
59
59
  ]
60
60
  disabled_audience_refs = [
61
- OdxLinkRef.from_et(ref, doc_frags)
61
+ OdxLinkRef.from_et(ref, context)
62
62
  for ref in et_element.iterfind("DISABLED-AUDIENCE-REFS/"
63
63
  "DISABLED-AUDIENCE-REF")
64
64
  ]
odxtools/basecomparam.py CHANGED
@@ -5,23 +5,24 @@ from xml.etree import ElementTree
5
5
 
6
6
  from .element import IdentifiableElement
7
7
  from .exceptions import odxraise, odxrequire
8
- from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
8
+ from .odxdoccontext import OdxDocContext
9
+ from .odxlink import OdxLinkDatabase, OdxLinkId
9
10
  from .snrefcontext import SnRefContext
10
11
  from .standardizationlevel import StandardizationLevel
11
12
  from .usage import Usage
12
13
  from .utils import dataclass_fields_asdict
13
14
 
14
15
 
15
- @dataclass
16
+ @dataclass(kw_only=True)
16
17
  class BaseComparam(IdentifiableElement):
17
18
  param_class: str
18
19
  cptype: StandardizationLevel
19
- display_level: int | None
20
- cpusage: Usage | None # Required in ODX 2.2, missing in ODX 2.0
20
+ display_level: int | None = None
21
+ cpusage: Usage | None = None # Required in ODX 2.2, missing in ODX 2.0
21
22
 
22
23
  @staticmethod
23
- def from_et(et_element: ElementTree.Element, doc_frags: list[OdxDocFragment]) -> "BaseComparam":
24
- kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, doc_frags))
24
+ def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "BaseComparam":
25
+ kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, context))
25
26
 
26
27
  param_class = odxrequire(et_element.attrib.get("PARAM-CLASS"))
27
28
 
@@ -1,5 +1,5 @@
1
1
  # SPDX-License-Identifier: MIT
2
- from dataclasses import dataclass
2
+ from dataclasses import dataclass, field
3
3
  from xml.etree import ElementTree
4
4
 
5
5
  from typing_extensions import override
@@ -7,23 +7,23 @@ from typing_extensions import override
7
7
  from .exceptions import odxassert
8
8
  from .matchingbasevariantparameter import MatchingBaseVariantParameter
9
9
  from .matchingparameter import MatchingParameter
10
- from .odxlink import OdxDocFragment
10
+ from .odxdoccontext import OdxDocContext
11
11
  from .variantpattern import VariantPattern
12
12
 
13
13
 
14
- @dataclass
14
+ @dataclass(kw_only=True)
15
15
  class BaseVariantPattern(VariantPattern):
16
16
  """Base variant patterns are variant patterns used to identify the
17
17
  base variant of an ECU.
18
18
  """
19
- matching_base_variant_parameters: list[MatchingBaseVariantParameter]
19
+ matching_base_variant_parameters: list[MatchingBaseVariantParameter] = field(
20
+ default_factory=list)
20
21
 
21
22
  @staticmethod
22
- def from_et(et_element: ElementTree.Element,
23
- doc_frags: list[OdxDocFragment]) -> "BaseVariantPattern":
23
+ def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "BaseVariantPattern":
24
24
 
25
25
  matching_base_variant_parameters = [
26
- MatchingBaseVariantParameter.from_et(mbvp_el, doc_frags)
26
+ MatchingBaseVariantParameter.from_et(mbvp_el, context)
27
27
  for mbvp_el in et_element.iterfind("MATCHING-BASE-VARIANT-PARAMETERS/"
28
28
  "MATCHING-BASE-VARIANT-PARAMETER")
29
29
  ]
@@ -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
 
@@ -14,7 +14,8 @@ from .decodestate import DecodeState
14
14
  from .encodestate import EncodeState
15
15
  from .exceptions import DecodeError, odxraise
16
16
  from .nameditemlist import NamedItemList
17
- from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
17
+ from .odxdoccontext import OdxDocContext
18
+ from .odxlink import OdxLinkDatabase, OdxLinkId
18
19
  from .odxtypes import ParameterValue
19
20
  from .parameters.createanyparameter import create_any_parameter_from_et
20
21
  from .parameters.parameter import Parameter
@@ -22,7 +23,7 @@ from .snrefcontext import SnRefContext
22
23
  from .utils import dataclass_fields_asdict
23
24
 
24
25
 
25
- @dataclass
26
+ @dataclass(kw_only=True)
26
27
  class BasicStructure(ComplexDop):
27
28
  """Base class for structure-like objects
28
29
 
@@ -30,8 +31,8 @@ class BasicStructure(ComplexDop):
30
31
  data objects. All structure-like objects adhere to the
31
32
  `CompositeCodec` type protocol.
32
33
  """
33
- byte_size: int | None
34
- parameters: NamedItemList[Parameter]
34
+ byte_size: int | None = None
35
+ parameters: NamedItemList[Parameter] = field(default_factory=NamedItemList)
35
36
 
36
37
  @property
37
38
  def required_parameters(self) -> list[Parameter]:
@@ -42,15 +43,14 @@ class BasicStructure(ComplexDop):
42
43
  return composite_codec_get_free_parameters(self)
43
44
 
44
45
  @staticmethod
45
- def from_et(et_element: ElementTree.Element,
46
- doc_frags: list[OdxDocFragment]) -> "BasicStructure":
46
+ def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "BasicStructure":
47
47
  """Read a BASIC-STRUCTURE."""
48
- kwargs = dataclass_fields_asdict(ComplexDop.from_et(et_element, doc_frags))
48
+ kwargs = dataclass_fields_asdict(ComplexDop.from_et(et_element, context))
49
49
 
50
50
  byte_size_str = et_element.findtext("BYTE-SIZE")
51
51
  byte_size = int(byte_size_str) if byte_size_str is not None else None
52
52
  parameters = NamedItemList([
53
- create_any_parameter_from_et(et_parameter, doc_frags)
53
+ create_any_parameter_from_et(et_parameter, context)
54
54
  for et_parameter in et_element.iterfind("PARAMS/PARAM")
55
55
  ])
56
56
 
@@ -214,7 +214,7 @@ def extract_parameter_tabulation_data(parameters: list[Parameter]) -> RichTable:
214
214
  value_column.append(str(param.coded_values))
215
215
  value_type_column.append('coded values')
216
216
  dop_column.append("")
217
- elif isinstance(param, PhysicalConstantParameter | SystemParameter | ValueParameter):
217
+ elif isinstance(param, (PhysicalConstantParameter, SystemParameter, ValueParameter)):
218
218
  # this is a hack to make this routine work for parameters
219
219
  # which reference DOPs of a type that a is not yet
220
220
  # internalized. (all parameter objects of the tested types
odxtools/cli/browse.py CHANGED
@@ -370,7 +370,7 @@ def browse(odxdb: Database) -> None:
370
370
 
371
371
  codec = answer.get("message_type")
372
372
  if codec is not None:
373
- assert isinstance(codec, Request | Response)
373
+ assert isinstance(codec, (Request, Response))
374
374
  table = extract_parameter_tabulation_data(codec.parameters)
375
375
  print(table)
376
376