odxtools 8.3.3__py3-none-any.whl → 9.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/response.py CHANGED
@@ -1,15 +1,24 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
3
  from enum import Enum
4
- from typing import List, Optional, cast
4
+ from typing import Any, Dict, List, Optional, cast
5
5
  from xml.etree import ElementTree
6
6
 
7
- from .basicstructure import BasicStructure
7
+ from .admindata import AdminData
8
+ from .codec import (composite_codec_decode_from_pdu, composite_codec_encode_into_pdu,
9
+ composite_codec_get_coded_const_prefix, composite_codec_get_free_parameters,
10
+ composite_codec_get_required_parameters, composite_codec_get_static_bit_length)
11
+ from .decodestate import DecodeState
12
+ from .element import IdentifiableElement
8
13
  from .encodestate import EncodeState
9
14
  from .exceptions import odxraise
10
- from .odxlink import OdxDocFragment
11
- from .odxtypes import ParameterValue
15
+ from .nameditemlist import NamedItemList
16
+ from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
17
+ from .odxtypes import ParameterValue, ParameterValueDict
18
+ from .parameters.createanyparameter import create_any_parameter_from_et
19
+ from .parameters.parameter import Parameter
12
20
  from .snrefcontext import SnRefContext
21
+ from .specialdatagroup import SpecialDataGroup
13
22
  from .utils import dataclass_fields_asdict
14
23
 
15
24
 
@@ -19,17 +28,23 @@ class ResponseType(Enum):
19
28
  GLOBAL_NEGATIVE = "GLOBAL-NEG-RESPONSE"
20
29
 
21
30
 
22
- # TODO: The spec does not say that responses are basic structures. For
23
- # now, we derive from it anyway because it simplifies the en- and
24
- # decoding machinery...
25
31
  @dataclass
26
- class Response(BasicStructure):
32
+ class Response(IdentifiableElement):
33
+ """Represents all information related to an UDS response
34
+
35
+ This class implements the `CompositeCodec` interface.
36
+ """
37
+
27
38
  response_type: ResponseType
28
39
 
40
+ admin_data: Optional[AdminData]
41
+ parameters: NamedItemList[Parameter]
42
+ sdgs: List[SpecialDataGroup]
43
+
29
44
  @staticmethod
30
45
  def from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment]) -> "Response":
31
46
  """Reads a response."""
32
- kwargs = dataclass_fields_asdict(BasicStructure.from_et(et_element, doc_frags))
47
+ kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, doc_frags))
33
48
 
34
49
  try:
35
50
  response_type = ResponseType(et_element.tag)
@@ -37,18 +52,103 @@ class Response(BasicStructure):
37
52
  response_type = cast(ResponseType, None)
38
53
  odxraise(f"Encountered unknown response type '{et_element.tag}'")
39
54
 
40
- return Response(response_type=response_type, **kwargs)
55
+ admin_data = AdminData.from_et(et_element.find("ADMIN-DATA"), doc_frags)
56
+ parameters = NamedItemList([
57
+ create_any_parameter_from_et(et_parameter, doc_frags)
58
+ for et_parameter in et_element.iterfind("PARAMS/PARAM")
59
+ ])
60
+ sdgs = [
61
+ SpecialDataGroup.from_et(sdge, doc_frags) for sdge in et_element.iterfind("SDGS/SDG")
62
+ ]
41
63
 
42
- def encode(self, coded_request: Optional[bytes] = None, **kwargs: ParameterValue) -> bytes:
43
- encode_state = EncodeState(triggering_request=coded_request, is_end_of_pdu=True)
64
+ return Response(
65
+ response_type=response_type,
66
+ admin_data=admin_data,
67
+ parameters=parameters,
68
+ sdgs=sdgs,
69
+ **kwargs)
44
70
 
45
- self.encode_into_pdu(physical_value=kwargs, encode_state=encode_state)
71
+ def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
72
+ result = {self.odx_id: self}
46
73
 
47
- return encode_state.coded_message
74
+ if self.admin_data is not None:
75
+ result.update(self.admin_data._build_odxlinks())
76
+
77
+ for param in self.parameters:
78
+ result.update(param._build_odxlinks())
79
+
80
+ for sdg in self.sdgs:
81
+ result.update(sdg._build_odxlinks())
82
+
83
+ return result
84
+
85
+ def _resolve_odxlinks(self, odxlinks: OdxLinkDatabase) -> None:
86
+ if self.admin_data is not None:
87
+ self.admin_data._resolve_odxlinks(odxlinks)
88
+
89
+ for param in self.parameters:
90
+ param._resolve_odxlinks(odxlinks)
91
+
92
+ for sdg in self.sdgs:
93
+ sdg._resolve_odxlinks(odxlinks)
48
94
 
49
95
  def _resolve_snrefs(self, context: SnRefContext) -> None:
50
96
  context.response = self
97
+ context.parameters = self.parameters
51
98
 
52
- super()._resolve_snrefs(context)
99
+ if self.admin_data is not None:
100
+ self.admin_data._resolve_snrefs(context)
101
+
102
+ for param in self.parameters:
103
+ param._resolve_snrefs(context)
104
+
105
+ for sdg in self.sdgs:
106
+ sdg._resolve_snrefs(context)
53
107
 
54
108
  context.response = None
109
+ context.parameters = None
110
+
111
+ def encode(self, coded_request: Optional[bytes] = None, **kwargs: ParameterValue) -> bytearray:
112
+ encode_state = EncodeState(triggering_request=coded_request, is_end_of_pdu=True)
113
+
114
+ self.encode_into_pdu(physical_value=kwargs, encode_state=encode_state)
115
+
116
+ return encode_state.coded_message
117
+
118
+ def decode(self, message: bytes) -> ParameterValueDict:
119
+ decode_state = DecodeState(coded_message=message)
120
+ param_values = self.decode_from_pdu(decode_state)
121
+
122
+ if not isinstance(param_values, dict):
123
+ odxraise("Decoding a response must result in a dictionary")
124
+
125
+ return cast(ParameterValueDict, param_values)
126
+
127
+ def encode_into_pdu(self, physical_value: Optional[ParameterValue],
128
+ encode_state: EncodeState) -> None:
129
+ composite_codec_encode_into_pdu(self, physical_value, encode_state)
130
+
131
+ def decode_from_pdu(self, decode_state: DecodeState) -> ParameterValue:
132
+ return composite_codec_decode_from_pdu(self, decode_state)
133
+
134
+ def get_static_bit_length(self) -> Optional[int]:
135
+ return composite_codec_get_static_bit_length(self)
136
+
137
+ @property
138
+ def required_parameters(self) -> List[Parameter]:
139
+ return composite_codec_get_required_parameters(self)
140
+
141
+ @property
142
+ def free_parameters(self) -> List[Parameter]:
143
+ return composite_codec_get_free_parameters(self)
144
+
145
+ def print_free_parameters_info(self) -> None:
146
+ """Return a human readable description of the structure's
147
+ free parameters.
148
+ """
149
+ from .parameterinfo import parameter_info
150
+
151
+ print(parameter_info(self.free_parameters), end="")
152
+
153
+ def coded_const_prefix(self, request_prefix: bytes = b'') -> bytes:
154
+ return composite_codec_get_coded_const_prefix(self, request_prefix)
@@ -13,8 +13,8 @@ from .specialdatagroupcaption import SpecialDataGroupCaption
13
13
  class SpecialDataGroup:
14
14
  sdg_caption: Optional[SpecialDataGroupCaption]
15
15
  sdg_caption_ref: Optional[OdxLinkRef]
16
- semantic_info: Optional[str] # the "SI" attribute
17
16
  values: List[Union["SpecialDataGroup", SpecialData]]
17
+ semantic_info: Optional[str] # the "SI" attribute
18
18
 
19
19
  @staticmethod
20
20
  def from_et(et_element: ElementTree.Element,
@@ -145,5 +145,21 @@
145
145
  {%- endif %}
146
146
  {%- endfor %}
147
147
  </DTCS>
148
+ {%- if dop.linked_dtc_dops_raw %}
149
+ <LINKED-DTC-DOPS>
150
+ {%- for linked_dtc_dop in dop.linked_dtc_dops_raw %}
151
+ <LINKED-DTC-DOP>
152
+ {%- if linked_dtc_dop.not_inherited_dtc_snrefs %}
153
+ <NOT-INHERITED-DTC-SNREFS>
154
+ {%- for ni_snref in linked_dtc_dop.not_inherited_dtc_snrefs %}
155
+ <NOT-INHERITED-DTC-SNREF SHORT-NAME="{{ni_snref}}" />
156
+ {%- endfor %}
157
+ </NOT-INHERITED-DTC-SNREFS>
158
+ {%- endif %}
159
+ <DTC-DOP-REF ID-REF="{{linked_dtc_dop.dtc_dop_ref.ref_id}}" />
160
+ </LINKED-DTC-DOP>
161
+ {%- endfor %}
162
+ </LINKED-DTC-DOPS>
163
+ {%- endif %}
148
164
  </DTC-DOP>
149
165
  {%- endmacro -%}
odxtools/uds.py CHANGED
@@ -3,8 +3,6 @@ from enum import IntEnum
3
3
  from itertools import chain
4
4
  from typing import Optional
5
5
 
6
- from deprecation import deprecated
7
-
8
6
  import odxtools.obd as obd
9
7
 
10
8
 
@@ -170,9 +168,3 @@ def is_response_pending(telegram_payload: bytes, request_sid: Optional[int] = No
170
168
 
171
169
  # if all of the above applies, we received a "stay tuned" response
172
170
  return True
173
-
174
-
175
- # previous versions of odxtools had a typo here. hit happens!
176
- @deprecated(details="use is_response_pending()") # type: ignore[misc]
177
- def is_reponse_pending(telegram_payload: bytes, request_sid: Optional[int] = None) -> bool:
178
- return is_response_pending(telegram_payload, request_sid)
odxtools/version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '8.3.3'
16
- __version_tuple__ = version_tuple = (8, 3, 3)
15
+ __version__ = version = '9.0.0'
16
+ __version_tuple__ = version_tuple = (9, 0, 0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odxtools
3
- Version: 8.3.3
3
+ Version: 9.0.0
4
4
  Summary: Utilities to work with the ODX standard for automotive diagnostics
5
5
  Author-email: Katrin Bauer <katrin.bauer@mbition.io>, Andreas Lauser <andreas.lauser@mbition.io>, Ayoub Kaanich <kayoub5@live.com>
6
6
  Maintainer-email: Andreas Lauser <andreas.lauser@mbition.io>, Ayoub Kaanich <kayoub5@live.com>
@@ -23,27 +23,26 @@ Requires-Python: >=3.8
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE
25
25
  Requires-Dist: bitstruct>=8.17
26
- Requires-Dist: argparse-addons>=0.12
26
+ Requires-Dist: argparse_addons>=0.12
27
27
  Requires-Dist: jinja2>=3.1
28
28
  Requires-Dist: python-can>=4.2
29
29
  Requires-Dist: markdownify>=0.11
30
30
  Requires-Dist: deprecation>=2.1
31
31
  Requires-Dist: packaging
32
- Requires-Dist: tabulate>=0.9
33
32
  Requires-Dist: rich>=13.7
34
- Requires-Dist: typing-extensions>=4.9
35
- Provides-Extra: all
36
- Requires-Dist: odxtools[browse-tool,examples,test]; extra == "all"
33
+ Requires-Dist: typing_extensions>=4.9
37
34
  Provides-Extra: browse-tool
38
35
  Requires-Dist: InquirerPy>=0.3.4; extra == "browse-tool"
39
- Provides-Extra: examples
40
- Requires-Dist: can-isotp>=1.9; extra == "examples"
41
36
  Provides-Extra: test
42
37
  Requires-Dist: mypy>=1.5; extra == "test"
43
38
  Requires-Dist: types-tabulate>=0.9.0.3; extra == "test"
44
39
  Requires-Dist: ruff>=0.0.290; extra == "test"
45
40
  Requires-Dist: pytest>=7.4; extra == "test"
46
41
  Requires-Dist: coverage>=7.3; extra == "test"
42
+ Provides-Extra: examples
43
+ Requires-Dist: can-isotp>=1.9; extra == "examples"
44
+ Provides-Extra: all
45
+ Requires-Dist: odxtools[browse-tool,examples,test]; extra == "all"
47
46
 
48
47
  <!-- SPDX-License-Identifier: MIT -->
49
48
  [![PyPi - Version](https://img.shields.io/pypi/v/odxtools)](https://pypi.org/project/odxtools)
@@ -4,7 +4,8 @@ odxtools/additionalaudience.py,sha256=Xjy_PhTfTV23oAMvml5XeZw3ex8xssIhgRseSsxKcx
4
4
  odxtools/admindata.py,sha256=ue5MnYJK_jxNq6Okxy4aGtH15uBAnWXIjMBFSh36Q3g,1879
5
5
  odxtools/audience.py,sha256=_O6UPKnrDbwMMKRnCJ5b8M3_I2jU5jMR6Ss5zLzk9yM,3361
6
6
  odxtools/basecomparam.py,sha256=VxpIsTr6-S4e8Vw72hJXSLUFU5TvHy5CM0sweVL-ZWE,2384
7
- odxtools/basicstructure.py,sha256=wkbTuS9VlfLhAQCS59kXUkDtlhz9dKvLEQpXpsHrN90,12854
7
+ odxtools/basicstructure.py,sha256=GcyZuasaH62JcINgyeD300N297q7_LP6iMfDy8fwzMg,5071
8
+ odxtools/codec.py,sha256=2aTfrQc0-cNuPAfXeDDyjxXAHjBJ1xy3ELCVeA9UQP0,8108
8
9
  odxtools/commrelation.py,sha256=Gh3CqMuF9rS0X107oxUkISNT2VWDZVPCpOSu54q7hcs,4793
9
10
  odxtools/companydata.py,sha256=o8vRONHfzmon3Ws0LLKX3-9Och34Uu91aAmBnNg2N34,2539
10
11
  odxtools/companydocinfo.py,sha256=fcceuYX8eTKhVhtmji6yiMRi6gtqPAJdi5kpo-wyL_8,2267
@@ -32,8 +33,8 @@ odxtools/diagnostictroublecode.py,sha256=jKtO8JqU0HRpeSyrcHn4s21N4Jj-p19WVP-qw2H
32
33
  odxtools/diagservice.py,sha256=y1_qKI7kJXDWpjpw91loIdf-K7Ozo45BsYiOhVYGuXg,10291
33
34
  odxtools/diagvariable.py,sha256=KUyRCV-H5xKITWYk9wxDnaS_N2nwDFGQzHaQRfNndKA,3829
34
35
  odxtools/docrevision.py,sha256=m57a4lCWeR6QvNNxtwUNpLXAMgSq29ks1HorxoipFVk,2698
35
- odxtools/dopbase.py,sha256=JMqlMNKyZJlXwcBFROetCIy1RsK-V_mSCR0MDuA-G5Y,2493
36
- odxtools/dtcdop.py,sha256=3Tg1-N004xOoX9XWGF2mgHz0m0zuQK0Of6_VkBNXZC0,8359
36
+ odxtools/dopbase.py,sha256=NCTTq2NF4DJI9nUAwBoa79IBgBjQtWo4V0WvkxuTx5g,2616
37
+ odxtools/dtcdop.py,sha256=3H0jSH6EHOA0-UJ9GcJwJuBCCciPhxZsz_dfRnNYF7A,11560
37
38
  odxtools/dynamicendmarkerfield.py,sha256=Q7KKOBNSrAg5cehEP3i4YTPiqz5UetEIJDGah608DDk,5559
38
39
  odxtools/dynamiclengthfield.py,sha256=Us0qRvkRPId7xSNKrYdsr1AhVFdTBezRMCBhXl98E00,5273
39
40
  odxtools/dyndefinedspec.py,sha256=efvUG2kMUdwfmMG5qxGHzMSZ5CxdSJhmtzHecopnpHg,7610
@@ -49,15 +50,15 @@ odxtools/exceptions.py,sha256=ZApQkhOJ9gn4jk0uO1wmULn5PhNEl1aMYMSHDoXihh0,2714
49
50
  odxtools/field.py,sha256=pdQpWxybPsiQ4oFKtvnjIEcQXV2WD0qH-NnBV54KMcI,3860
50
51
  odxtools/functionalclass.py,sha256=IfhxKd02WNGftjSMyBJ8RsxVZgTBxzUM0h6EKHVrrxY,951
51
52
  odxtools/globals.py,sha256=P6YbgyTSWHMw3sk5cEzsCvVaLrTiakLvewTgySb1jLo,139
52
- odxtools/inputparam.py,sha256=lyffK4UBG2d_0JzIaf1QZCsPXFti6gejiIWRSdr-CYA,1841
53
+ odxtools/inputparam.py,sha256=-9BTmw8BjCM-zM7VOy30O220XKs7-GKRX032wjWGe3U,1667
53
54
  odxtools/internalconstr.py,sha256=QKEkaOcrFoL9xID-oHWWkeg-vtcPV6RFOW1fX2K3pwg,1363
54
55
  odxtools/isotp_state_machine.py,sha256=O6v29IK7p_4gFqrr-fahnbp9Qmo78EEQfEwRsA_Vfjw,13339
55
- odxtools/leadinglengthinfotype.py,sha256=mtq38k74hEh_CUY7NbVwdCc_aqKr7v5ABoS_SlKVXyI,4185
56
+ odxtools/leadinglengthinfotype.py,sha256=RnxA6On49hy1-SZ8GFOx1wwfNDjXo4zG1GXKJp_gcBM,3865
56
57
  odxtools/library.py,sha256=E_A6K6jcEoUdXh4h4sQILj7_JM-6X5OUUWSM47G69CU,2067
57
58
  odxtools/loadfile.py,sha256=hi8jVE7B1G9gklsb7MrGrp4aOAI65j0kNwvDeEEEN2k,1744
58
59
  odxtools/matchingparameter.py,sha256=2cqaxFCZ28GvvUKCIM-jas3ae4eYGbULbkBlb3aH5RY,2232
59
- odxtools/message.py,sha256=07GekN1MbYXm7HaUITDKTj2lBmGK-LB9W8gtBmfAOew,1057
60
- odxtools/minmaxlengthtype.py,sha256=FxcfbuPEmXgYava3h0EPF43I5yTZW_lUcgTqOF5mnes,8917
60
+ odxtools/message.py,sha256=PDY-CDgTmJA6dyNacCV57M-p_ETtR8MdU7WZGEew4zM,855
61
+ odxtools/minmaxlengthtype.py,sha256=GQUici8NS9_znw8qiTKWHO2Ky-5tr3SJmdrVKtDd__M,8917
61
62
  odxtools/modification.py,sha256=oyyFsYHixy6XHOdqqTCx3IIkTAKlSN9wxBpNpvhUaJA,838
62
63
  odxtools/multiplexer.py,sha256=flHlorv9grEMj8pNAWQJNrxhptnDxSsFERO7gpKYRME,10235
63
64
  odxtools/multiplexercase.py,sha256=qfxWJzfJLYAsnhFGheUWDsUaIte2dSRJ0nadiN9SXDw,3176
@@ -66,11 +67,11 @@ odxtools/multiplexerswitchkey.py,sha256=fnCpPcg47JQZQsrqS2RAa_O-JrfUb0pvhKv8hhs1
66
67
  odxtools/nameditemlist.py,sha256=IYN_OBVf_iIU6a5CQ-gCttiUMeJEe04uk9z6Ro6IGK8,6521
67
68
  odxtools/negoutputparam.py,sha256=u2IhJvy6n19t3nyADGG0H0XTm7JNdQ0-95FawGAdtiE,1373
68
69
  odxtools/obd.py,sha256=WsUbhdonqQJtxf972CUdYL78AMMTVjMQhoCJbaZhRIo,1860
69
- odxtools/odxlink.py,sha256=YoEovTx5T8c5YFJPa2CSxk_gwRfP8miGCwicHbpqQNg,9259
70
+ odxtools/odxlink.py,sha256=7_O8pZB9prgjN-2rJHPMkce1RwV7PT988EmOONgxfng,9414
70
71
  odxtools/odxtypes.py,sha256=MKfusVSYma_OZYmxCVm-kx7WBK8OHjeU3DnJhet4zeg,8055
71
- odxtools/outputparam.py,sha256=_NVZj4YfU_RdPpGUnz659-70DaYwBxYxwktxZ5lSMsY,1568
72
- odxtools/parameterinfo.py,sha256=oIVtlQUZVYVWuXVnjyosyzazkNJANk1Qe9URKfho5Hk,11223
73
- odxtools/paramlengthinfotype.py,sha256=vhgvCPIRnyCF9t8yhkYf5MsHXQhWWeEgz_kS8AbiONQ,4700
72
+ odxtools/outputparam.py,sha256=reBgrSE7fORxfSVSTuim0FyxHrE6OsQOGIFUjhn5FlE,1394
73
+ odxtools/parameterinfo.py,sha256=PzhIZyYINNxykecPQWnRH1Ywrfgxx31DVax2VNN__CY,11183
74
+ odxtools/paramlengthinfotype.py,sha256=QMXGN5fd834abUvwql6j04ZiIbqixVHkQACaOx4xyH0,4699
74
75
  odxtools/parentref.py,sha256=kcY3VMyVaIUWD0iVNX8sD9qeI4peU8gijboquu0zD7E,3751
75
76
  odxtools/physicaldimension.py,sha256=CEH7Ura4gqsqlBUxBW08ea9Pxh_Od8JruYQ8o9qOGME,3269
76
77
  odxtools/physicaltype.py,sha256=oYjOhdrTVCJcLLBYgy6pxKsZHpuwm1vZ8svwSjsUB6E,2699
@@ -78,14 +79,14 @@ odxtools/progcode.py,sha256=Cx8ziCmQm2OfhinAuRrFrMuoThU7hgA6zNQKAT-AT0A,2276
78
79
  odxtools/protstack.py,sha256=nb2RR4OEaGX6lJ6drHejJU-tkB1p0Ok0KLZhNMTdsEc,2012
79
80
  odxtools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
81
  odxtools/relateddoc.py,sha256=zb5Ea9vkd31kxTP4s5_PLF3LuCoUcG8rgLckStHVRDc,1301
81
- odxtools/request.py,sha256=58Qj8DaQBNnMLTINwDfFnbiTHkdqLvsSGBhnbQ-3aJ8,1236
82
- odxtools/response.py,sha256=-E7IKlocsg4EC5F0txoNXZloZBAqFVfrRnzXKAzFl2U,1808
82
+ odxtools/request.py,sha256=iX3D4VX-ctUEk0WpvQHr7UQHalhHkSeR9DLFbVoEQws,4902
83
+ odxtools/response.py,sha256=aJDoe-ZAKI4Zui4VbwnWLLb9g8Y_SgVZ0XFH7jYZRVI,5505
83
84
  odxtools/scaleconstr.py,sha256=xSH8kmld5Gg1lVgjLWTZINEtDn2a3HemVqlXiHsl4Fs,1783
84
85
  odxtools/servicebinner.py,sha256=TId3D3XHa98zbyC1sGWacQUlIZ5e2Egklelv6_Ra2II,3861
85
86
  odxtools/singleecujob.py,sha256=rlpReb9816abYX0oihYXMkIQo8hnzbUkZqkTvX-IRZ4,3920
86
87
  odxtools/snrefcontext.py,sha256=5ZbrZiX1gw6LC6o62RPuxzSo4tDR2LqRQ9w9Vi57FA8,953
87
88
  odxtools/specialdata.py,sha256=5-1D_6dcEmi-TodCzCoBZK7gqeDY-cuRe1ybkTh4rBY,1033
88
- odxtools/specialdatagroup.py,sha256=y2fMwWVX5h7W7-gBi6izlvdc26bkYRYXKNbinNel3RM,3070
89
+ odxtools/specialdatagroup.py,sha256=9pNCA89kGwhBiVN9nC_03ASHZT6q3FL8l2CxRf9jwU0,3070
89
90
  odxtools/specialdatagroupcaption.py,sha256=pIa1l6EXVDXBisUtRkn6hTzAcUXFnXJoWstesayLfME,987
90
91
  odxtools/standardlengthtype.py,sha256=SQBgdHIc9msFCBuS9GYyDeKE8bK1PgSvIkVEZSVoBcU,5225
91
92
  odxtools/state.py,sha256=d--nCbV1qBmOmiTmUrQjDC_naispOM0a-H1AvCe5_xI,898
@@ -98,24 +99,24 @@ odxtools/swvariable.py,sha256=tp8XJUokYOcAUkrQLM92IYDf7evIefwZR_DgMm33iYQ,622
98
99
  odxtools/table.py,sha256=zgpVveH8neSNhdcsPp0jG4f6H00M0NKCuAME8MSrf-Q,4024
99
100
  odxtools/tablerow.py,sha256=hOi7FCX7TiCRxErCD1hKU6h2hT5_8V3ghtt8dJXOiQY,6307
100
101
  odxtools/teammember.py,sha256=xn1y6k42zQoyM2SlEkZ8UFyiqBvVI5FNZAm_xt2Vt_Y,1772
101
- odxtools/uds.py,sha256=69SyVnQDcyspzSf6QVfm_Uk9iCxczD6UcrO1PxhNo7E,5894
102
+ odxtools/uds.py,sha256=JN_PPne3XNtanGx69-lR4oxOGqDtM05EFcX2F6DjxYU,5569
102
103
  odxtools/unit.py,sha256=PLMErZ6N9oA4z3fuwYsmqMajeVHFNtKhC-w7IzaTfvw,3588
103
104
  odxtools/unitgroup.py,sha256=_WNpnYFmkiHQnOY8XhIviiQLXziY3kplH--7ufAWXyI,2067
104
105
  odxtools/unitspec.py,sha256=RMdEQoLrPhGt9vo32fkwbTqymicHFkFQnydFoi3uBog,2924
105
106
  odxtools/utils.py,sha256=PJFXkG74BzoheurrDYOwHZ6EuIcr1sdxf1tQGk6zSgs,1122
106
107
  odxtools/variablegroup.py,sha256=--5sMDOMUg4I3hFyoVOFcGCTOrctrrMADdmH3Mn4wHk,848
107
- odxtools/version.py,sha256=_6tcVrnJk8Bv64RxNmrrj_1-CXILcdZloboQyV60lgQ,411
108
+ odxtools/version.py,sha256=JUhnhMDi5G11GnJKO5jPzthe0-jnAAo_Og_J2g7KSgc,411
108
109
  odxtools/writepdxfile.py,sha256=ZEoNkSxheqnXm836-HOpd04O6ipMXYKFzXZy6PM0YLc,7813
109
110
  odxtools/xdoc.py,sha256=gDq-8l8x-Tj1ZJOttPxZchcO5_jEPwcXxMgT29VgTS0,1433
110
111
  odxtools/cli/__init__.py,sha256=T7ano_FIyzBASxYpmcA5VJXU5bQLIy_Qk0HE_SDKelY,106
111
112
  odxtools/cli/_parser_utils.py,sha256=p0L9NYYnml5ydfD22oC04EMhz8PKHgU40GPOPkybZwg,1116
112
- odxtools/cli/_print_utils.py,sha256=uR3CTMD1XYCfZk-HVkdo2w8XzmTc7qar1Nh_Kow7nEU,10413
113
- odxtools/cli/browse.py,sha256=jOQoVabpPx9wyrOGZwApFElON1KzdyynK1f6GcwxwNM,16051
114
- odxtools/cli/compare.py,sha256=In5x66Y-vT85v7zZr5P50NgJXJl4P_ZbNg8uihOji9E,36778
113
+ odxtools/cli/_print_utils.py,sha256=NWAnlOqIuMN4obAs_b0EcpnVHumMej6yAskK_bBsxF4,12348
114
+ odxtools/cli/browse.py,sha256=Hkf269s7Tg8vWq0WDRzZoU65zGShdddgOo5vLnjMB6I,16537
115
+ odxtools/cli/compare.py,sha256=mXF7C0rBHnRn9l9_jYNgnoOchSbfUh5XshnCY02UBr0,37485
115
116
  odxtools/cli/decode.py,sha256=7tAUUyfJPaKNwVJfFZ61qGVc97i03wgb_wr2pAH_JWQ,4315
116
117
  odxtools/cli/dummy_sub_parser.py,sha256=F2N_lRrxuU-beORcyrJ4bdbRsQl42-aPEBtyPJ74Tvo,1466
117
118
  odxtools/cli/find.py,sha256=GZKzvsOus1Zv8n3nAG-ZsPgWJpB7z3wNxeqKtAL5mAo,4394
118
- odxtools/cli/list.py,sha256=4cJS7JbODR2aLwM_1QNutei4MIlZ4nvIMdLfR9mP1gw,9050
119
+ odxtools/cli/list.py,sha256=fQH1gK3ajUhbp9-giIZk8qIZ-57FtADU1EggXo2yH4I,8980
119
120
  odxtools/cli/main.py,sha256=_zPCU6N2ofpj_jQuQ_BU5EafBpMW0srhahZI8BgAM-0,2335
120
121
  odxtools/cli/snoop.py,sha256=z8USSpmz18VAvkGpzepeaOlVJhi-8aeW10XRylsvZLU,10610
121
122
  odxtools/compumethods/compucodecompumethod.py,sha256=cCgCCuFcu2K9QuW0ZNbfp6AQdgPy9QE7UnmRa6Iet28,2459
@@ -140,7 +141,7 @@ odxtools/compumethods/tabintpcompumethod.py,sha256=Gyf2qV5y53SHIcum5d5HQVGszoZCd
140
141
  odxtools/compumethods/texttablecompumethod.py,sha256=vDYafbM0YaipjfN0NSlCFMiIPvp8waMNj3thNcwuYgk,5929
141
142
  odxtools/diaglayers/basevariant.py,sha256=mXS-SF-tcwtdV-rxZZCH6_yqdA-yhtMX1SGo1MS8w7k,4452
142
143
  odxtools/diaglayers/basevariantraw.py,sha256=A9h6p2Ri0sPPTW217rtEdNpAt5g6t0MwP9sgXqZ8pFo,4673
143
- odxtools/diaglayers/diaglayer.py,sha256=aCL4dMehy-Q4JXp7ReRYxL0RwSJk-w2V7tvX7nN4ilg,16237
144
+ odxtools/diaglayers/diaglayer.py,sha256=xs529IVG_18Fi8kbEZkD2vHjHRr57jeE4A_2lDLRKCQ,16254
144
145
  odxtools/diaglayers/diaglayerraw.py,sha256=rQEH3Jzg6bzTmu0EyYhAoBlsL6qVm7Z46o2xlbL0nEo,12970
145
146
  odxtools/diaglayers/diaglayertype.py,sha256=FXL-EVBdrAURuHSHo9OthFuEYEybQO66aMB1o2GxVdI,1340
146
147
  odxtools/diaglayers/ecushareddata.py,sha256=QoV50wQIrJ2-faLtU1P7RrjdacbhPY2BfUtVtIyWqCM,3347
@@ -149,7 +150,7 @@ odxtools/diaglayers/ecuvariant.py,sha256=OsLWg-dx6OJ_OPuYcgoTJuDXEReaJclDRbU5YKq
149
150
  odxtools/diaglayers/ecuvariantraw.py,sha256=bKlqFnBWkKdkM9EY5rFGOno3ClIVQNhgBoU5DseNnRc,4944
150
151
  odxtools/diaglayers/functionalgroup.py,sha256=o5bUGGDYisr7CjHZZh83fokA80f0s0zpHC_501cg-f0,4093
151
152
  odxtools/diaglayers/functionalgroupraw.py,sha256=H0-_XXlFTV8POGnh0S7CVBOKKQuyKHMB9lEyoAHuG_A,3963
152
- odxtools/diaglayers/hierarchyelement.py,sha256=GWM7Gc4nLQlWMe8wjSY-fvyKlI7uAvqcmit3B1Zvcy0,37061
153
+ odxtools/diaglayers/hierarchyelement.py,sha256=kYGKyn6ZdThOeC58m31ESLjpZ1YZ532tLDxahWvXxxo,36708
153
154
  odxtools/diaglayers/hierarchyelementraw.py,sha256=IdFbnZIw7QGAMh3MW5N9vq5QNGBBAs5foCnbvotfqhQ,2058
154
155
  odxtools/diaglayers/protocol.py,sha256=ypIhfySB6F16Y48XLZIPL36GfrKUznTCmiJ0ROIxYJo,2083
155
156
  odxtools/diaglayers/protocolraw.py,sha256=Wf1q2l11mxw61gnveVVEZqgR0yj2RCxoaB3QLzdZQWc,3251
@@ -159,7 +160,7 @@ odxtools/parameters/dynamicparameter.py,sha256=mdZx12XbhTSYVVuXEsPYRll3zaHjbHIYI
159
160
  odxtools/parameters/lengthkeyparameter.py,sha256=WSpSIbxFmEwBov6Jj5Ubj9gMr46OgrdNi5-UaahCjAo,5270
160
161
  odxtools/parameters/matchingrequestparameter.py,sha256=VNYIpmP_Yt_pzMHPgGWZk1XYH5liIdyawNIwIR1Cbvw,2897
161
162
  odxtools/parameters/nrcconstparameter.py,sha256=SjTHQlaBzvyUATyOzSFFWCcdkTeHcaoKO54kTomzb6Y,4823
162
- odxtools/parameters/parameter.py,sha256=vb74YXUKEffF6ISshYtlIACf8TV-AOlIzlSthBIkxXc,6025
163
+ odxtools/parameters/parameter.py,sha256=0WhCvULPzvZ07g9Nz-0NyHt1Y8E8Q4YsW0VF-EUg2ow,6145
163
164
  odxtools/parameters/parameterwithdop.py,sha256=k7yJABRmHQTZNTEEPjyq3tBXJD4Aey365HpP7SGsEgk,3283
164
165
  odxtools/parameters/physicalconstantparameter.py,sha256=2iC6EKVJZVHwVVmd4h8KJ6OLc7B5QOUawivQMqWPCRA,3593
165
166
  odxtools/parameters/reservedparameter.py,sha256=8XQocU3_ExRZzXYEkITj535TTEUCNK87wIkrUTizgvI,1989
@@ -180,7 +181,7 @@ odxtools/templates/macros/printCompanyData.xml.jinja2,sha256=jcNmQBOGDw7wcKdam72
180
181
  odxtools/templates/macros/printComparam.xml.jinja2,sha256=e3hPCswAymJteQIUNoc7FOwsK_FrbJOvJooWdEx_vuQ,2408
181
182
  odxtools/templates/macros/printComparamRef.xml.jinja2,sha256=rBhrdUnp605fsUN9SaljpyaAojzaLBvTbkOuduKod18,1274
182
183
  odxtools/templates/macros/printCompuMethod.xml.jinja2,sha256=9DilxMWnqOsXu7bNNlDqls-lEqcr_GPzhZum8rzDJP0,4430
183
- odxtools/templates/macros/printDOP.xml.jinja2,sha256=t-6U0gZLdV2n6-YW5pkVFnHNVTAOnfqMch-mk_fGyjo,5146
184
+ odxtools/templates/macros/printDOP.xml.jinja2,sha256=SAmp1okfyecCmHf4XiF2rao78-TIzmPQW4azBtjbu9A,5709
184
185
  odxtools/templates/macros/printDescription.xml.jinja2,sha256=7jcYEIXr7hbbKqSvIUIgXaQSXV4dKAR9UhY352BZct8,452
185
186
  odxtools/templates/macros/printDiagComm.xml.jinja2,sha256=_SByYBYzPG9t7VNnAohFAXsgng9VrQcSacXH923wRzY,2239
186
187
  odxtools/templates/macros/printDiagLayer.xml.jinja2,sha256=gQQhNGpVQRfVichgJdwBS6gMvoLfi-nlGat9imlW62Y,6901
@@ -217,9 +218,9 @@ odxtools/templates/macros/printStructure.xml.jinja2,sha256=CJUPZv_9lko63C5fNpOn5
217
218
  odxtools/templates/macros/printSubComponent.xml.jinja2,sha256=ETo-k0K7px5nu9kgVjgDnjPoy8rYRfzq5ojvsZhM3Rw,3416
218
219
  odxtools/templates/macros/printTable.xml.jinja2,sha256=5DQjjJ-UxQ75ntov0S0LGnm_V7YWtKadBpNbmV1aBb8,1501
219
220
  odxtools/templates/macros/printUnitSpec.xml.jinja2,sha256=opS6_Gr94WlAtREEyX4sLo-D-17Gni9Wvr3y1nfVgSA,2715
220
- odxtools-8.3.3.dist-info/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
221
- odxtools-8.3.3.dist-info/METADATA,sha256=Nuk3UEqD8WVE_1ar62hwi35XUbUI7l_sobkwK2eCQVA,44084
222
- odxtools-8.3.3.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
223
- odxtools-8.3.3.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
224
- odxtools-8.3.3.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
225
- odxtools-8.3.3.dist-info/RECORD,,
221
+ odxtools-9.0.0.dist-info/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
222
+ odxtools-9.0.0.dist-info/METADATA,sha256=tWTGI9ZkJVc1N19f-GHHD1VpCnDl7s1g-LSUA1fmJPE,44055
223
+ odxtools-9.0.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
224
+ odxtools-9.0.0.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
225
+ odxtools-9.0.0.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
226
+ odxtools-9.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5