odxtools 8.2.0__py3-none-any.whl → 8.2.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.
@@ -13,6 +13,7 @@ from ..diagcomm import DiagComm
13
13
  from ..diagdatadictionaryspec import DiagDataDictionarySpec
14
14
  from ..diagservice import DiagService
15
15
  from ..exceptions import DecodeError, odxassert, odxraise
16
+ from ..library import Library
16
17
  from ..message import Message
17
18
  from ..nameditemlist import NamedItemList, TNamed
18
19
  from ..odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
@@ -259,6 +260,10 @@ class DiagLayer:
259
260
  def import_refs(self) -> List[OdxLinkRef]:
260
261
  return self.diag_layer_raw.import_refs
261
262
 
263
+ @property
264
+ def libraries(self) -> List[Library]:
265
+ return self.diag_layer_raw.libraries
266
+
262
267
  @property
263
268
  def sdgs(self) -> List[SpecialDataGroup]:
264
269
  return self.diag_layer_raw.sdgs
@@ -13,6 +13,7 @@ from ..diagservice import DiagService
13
13
  from ..element import IdentifiableElement
14
14
  from ..exceptions import odxassert, odxraise, odxrequire
15
15
  from ..functionalclass import FunctionalClass
16
+ from ..library import Library
16
17
  from ..nameditemlist import NamedItemList
17
18
  from ..odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
18
19
  from ..request import Request
@@ -47,7 +48,7 @@ class DiagLayerRaw(IdentifiableElement):
47
48
  state_charts: NamedItemList[StateChart]
48
49
  additional_audiences: NamedItemList[AdditionalAudience]
49
50
  # sub_components: List[DiagLayer] # TODO
50
- # libraries: List[DiagLayer] # TODO
51
+ libraries: NamedItemList[Library]
51
52
  sdgs: List[SpecialDataGroup]
52
53
 
53
54
  @property
@@ -149,6 +150,10 @@ class DiagLayerRaw(IdentifiableElement):
149
150
  for el in et_element.iterfind("ADDITIONAL-AUDIENCES/ADDITIONAL-AUDIENCE")
150
151
  ]
151
152
 
153
+ libraries = [
154
+ Library.from_et(el, doc_frags) for el in et_element.iterfind("LIBRARYS/LIBRARY")
155
+ ]
156
+
152
157
  sdgs = [
153
158
  SpecialDataGroup.from_et(sdge, doc_frags) for sdge in et_element.iterfind("SDGS/SDG")
154
159
  ]
@@ -168,6 +173,7 @@ class DiagLayerRaw(IdentifiableElement):
168
173
  import_refs=import_refs,
169
174
  state_charts=NamedItemList(state_charts),
170
175
  additional_audiences=NamedItemList(additional_audiences),
176
+ libraries=NamedItemList(libraries),
171
177
  sdgs=sdgs,
172
178
  **kwargs)
173
179
 
@@ -200,6 +206,8 @@ class DiagLayerRaw(IdentifiableElement):
200
206
  odxlinks.update(state_chart._build_odxlinks())
201
207
  for additional_audience in self.additional_audiences:
202
208
  odxlinks.update(additional_audience._build_odxlinks())
209
+ for library in self.libraries:
210
+ odxlinks.update(library._build_odxlinks())
203
211
  for sdg in self.sdgs:
204
212
  odxlinks.update(sdg._build_odxlinks())
205
213
 
@@ -252,6 +260,8 @@ class DiagLayerRaw(IdentifiableElement):
252
260
  state_chart._resolve_odxlinks(odxlinks)
253
261
  for additional_audience in self.additional_audiences:
254
262
  additional_audience._resolve_odxlinks(odxlinks)
263
+ for library in self.libraries:
264
+ library._resolve_odxlinks(odxlinks)
255
265
  for sdg in self.sdgs:
256
266
  sdg._resolve_odxlinks(odxlinks)
257
267
 
@@ -282,5 +292,7 @@ class DiagLayerRaw(IdentifiableElement):
282
292
  state_chart._resolve_snrefs(context)
283
293
  for additional_audience in self.additional_audiences:
284
294
  additional_audience._resolve_snrefs(context)
295
+ for library in self.libraries:
296
+ library._resolve_snrefs(context)
285
297
  for sdg in self.sdgs:
286
298
  sdg._resolve_snrefs(context)
odxtools/diagservice.py CHANGED
@@ -42,7 +42,9 @@ class DiagService(DiagComm):
42
42
  pos_response_refs: List[OdxLinkRef]
43
43
  neg_response_refs: List[OdxLinkRef]
44
44
 
45
- # TODO: pos_response_suppressable: Optional[PosResponseSuppressable] # (sic!)
45
+ # note that the spec has a typo here: it calls the corresponding
46
+ # XML tag POS-RESPONSE-SUPPRESSABLE...
47
+ # TODO: pos_response_suppressible: Optional[PosResponseSuppressible]
46
48
 
47
49
  is_cyclic_raw: Optional[bool]
48
50
  is_multiple_raw: Optional[bool]
odxtools/library.py ADDED
@@ -0,0 +1,66 @@
1
+ # SPDX-License-Identifier: MIT
2
+ from dataclasses import dataclass
3
+ from typing import Any, Dict, List, Optional, cast
4
+ from xml.etree import ElementTree
5
+
6
+ from .element import IdentifiableElement
7
+ from .exceptions import odxraise, odxrequire
8
+ from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
9
+ from .snrefcontext import SnRefContext
10
+ from .utils import dataclass_fields_asdict
11
+
12
+
13
+ @dataclass
14
+ class Library(IdentifiableElement):
15
+ """
16
+ A library defines a shared library used for single ECU jobs etc.
17
+
18
+ It this is basically equivalent to ProgCode.
19
+ """
20
+
21
+ code_file: str
22
+ encryption: Optional[str]
23
+ syntax: str
24
+ revision: str
25
+ entrypoint: Optional[str]
26
+
27
+ @property
28
+ def code(self) -> bytes:
29
+ return self._code
30
+
31
+ @staticmethod
32
+ def from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment]) -> "Library":
33
+
34
+ kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, doc_frags))
35
+
36
+ code_file = odxrequire(et_element.findtext("CODE-FILE"))
37
+ encryption = et_element.findtext("ENCRYPTION")
38
+ syntax = odxrequire(et_element.findtext("SYNTAX"))
39
+ revision = odxrequire(et_element.findtext("REVISION"))
40
+ entrypoint = et_element.findtext("ENTRYPOINT")
41
+
42
+ return Library(
43
+ code_file=code_file,
44
+ encryption=encryption,
45
+ syntax=syntax,
46
+ revision=revision,
47
+ entrypoint=entrypoint,
48
+ **kwargs)
49
+
50
+ def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
51
+ return {self.odx_id: self}
52
+
53
+ def _resolve_odxlinks(self, odxlinks: OdxLinkDatabase) -> None:
54
+ pass
55
+
56
+ def _resolve_snrefs(self, context: SnRefContext) -> None:
57
+ aux_file = odxrequire(context.database).auxiliary_files.get(self.code_file)
58
+
59
+ if aux_file is None:
60
+ odxraise(f"Reference to auxiliary file '{self.code_file}' "
61
+ f"could not be resolved")
62
+ self._code: bytes = cast(bytes, None)
63
+ return
64
+
65
+ self._code = aux_file.read()
66
+ aux_file.seek(0)
@@ -74,7 +74,7 @@ class MinMaxLengthType(DiagCodedType):
74
74
  @override
75
75
  def encode_into_pdu(self, internal_value: AtomicOdxType, encode_state: EncodeState) -> None:
76
76
 
77
- if not isinstance(internal_value, (bytes, str)):
77
+ if not isinstance(internal_value, (bytes, str, bytearray)):
78
78
  odxraise("MinMaxLengthType is currently only implemented for strings and byte arrays",
79
79
  EncodeError)
80
80
 
odxtools/progcode.py CHANGED
@@ -4,6 +4,8 @@ from typing import Any, Dict, List, Optional, cast
4
4
  from xml.etree import ElementTree
5
5
 
6
6
  from .exceptions import odxraise, odxrequire
7
+ from .library import Library
8
+ from .nameditemlist import NamedItemList
7
9
  from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
8
10
  from .snrefcontext import SnRefContext
9
11
 
@@ -12,9 +14,9 @@ from .snrefcontext import SnRefContext
12
14
  class ProgCode:
13
15
  """A reference to code that is executed by a single ECU job"""
14
16
  code_file: str
17
+ encryption: Optional[str]
15
18
  syntax: str
16
19
  revision: str
17
- encryption: Optional[str]
18
20
  entrypoint: Optional[str]
19
21
  library_refs: List[OdxLinkRef]
20
22
 
@@ -22,6 +24,10 @@ class ProgCode:
22
24
  def code(self) -> bytes:
23
25
  return self._code
24
26
 
27
+ @property
28
+ def libraries(self) -> NamedItemList[Library]:
29
+ return self._libraries
30
+
25
31
  @staticmethod
26
32
  def from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment]) -> "ProgCode":
27
33
  code_file = odxrequire(et_element.findtext("CODE-FILE"))
@@ -49,9 +55,7 @@ class ProgCode:
49
55
  return {}
50
56
 
51
57
  def _resolve_odxlinks(self, odxlinks: OdxLinkDatabase) -> None:
52
- # TODO: Libraries are currently not internalized.
53
- # Once they are internalized, resolve the `library_refs` references here.
54
- pass
58
+ self._libraries = NamedItemList([odxlinks.resolve(x, Library) for x in self.library_refs])
55
59
 
56
60
  def _resolve_snrefs(self, context: SnRefContext) -> None:
57
61
  aux_file = odxrequire(context.database).auxiliary_files.get(self.code_file)
@@ -92,12 +92,13 @@
92
92
  {%- macro printProgCode(pc) -%}
93
93
  <PROG-CODE>
94
94
  <CODE-FILE>{{pc.code_file}}</CODE-FILE>
95
- <SYNTAX>{{pc.syntax}}</SYNTAX>
96
95
  {%- if pc.encryption is not none %}
97
96
  <ENCRYPTION>{{pc.encryption}}</ENCRYPTION>
98
97
  {%- endif %}
98
+ <SYNTAX>{{pc.syntax}}</SYNTAX>
99
+ <REVISION>{{pc.revision}}</REVISION>
99
100
  {%- if pc.entry_point is not none %}
100
- <ENTRY-POINT>{{pc.entry_point}}</ENTRY-POINT>
101
+ <ENTRYPOINT>{{pc.entrypoint}}</ENTRYPOINT>
101
102
  {%- endif %}
102
103
  {%- if pc.library_refs %}
103
104
  <LIBRARY-REFS>
@@ -22,6 +22,7 @@
22
22
  {%- import('macros/printResponse.xml.jinja2') as presp %}
23
23
  {%- import('macros/printStateChart.xml.jinja2') as psc %}
24
24
  {%- import('macros/printAudience.xml.jinja2') as paud %}
25
+ {%- import('macros/printLibrary.xml.jinja2') as plib %}
25
26
  {%- import('macros/printSpecialData.xml.jinja2') as psd %}
26
27
  {%- import('macros/printEcuVariantPattern.xml.jinja2') as pvpat %}
27
28
  {%- import('macros/printAdminData.xml.jinja2') as pad %}
@@ -202,5 +203,12 @@
202
203
  {%- endfor %}
203
204
  </ADDITIONAL-AUDIENCES>
204
205
  {%- endif %}
206
+ {%- if dlr.libraries %}
207
+ <LIBRARYS>
208
+ {%- for lib in dlr.libraries %}
209
+ {{ plib.printLibrary(lib)|indent(2) }}
210
+ {%- endfor %}
211
+ </LIBRARYS>
212
+ {%- endif %}
205
213
  {{- psd.printSpecialDataGroups(dlr.sdgs)|indent(0, first=True) }}
206
214
  {%- endmacro -%}
@@ -0,0 +1,21 @@
1
+ {#- -*- mode: sgml; tab-width: 1; indent-tabs-mode: nil -*-
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+ -#}
5
+
6
+ {%- import('macros/printElementId.xml.jinja2') as peid %}
7
+
8
+ {%- macro printLibrary(library) %}
9
+ <LIBRARY{#- #} {{-peid.printElementIdAttribs(library)}}{# -#}>
10
+ {{ peid.printElementIdSubtags(library)|indent(1) }}
11
+ <CODE-FILE>{{library.code_file}}</CODE-FILE>
12
+ {%- if library.encryption is not none %}
13
+ <ENCRYPTION>{{library.encryption}}</ENCRYPTION>
14
+ {%- endif %}
15
+ <SYNTAX>{{library.syntax}}</SYNTAX>
16
+ <REVISION>{{library.revision}}</REVISION>
17
+ {%- if library.entrypoint is not none %}
18
+ <ENTRYPOINT>{{library.entrypoint}}</ENTRYPOINT>
19
+ {%- endif %}
20
+ </LIBRARY>
21
+ {%- endmacro %}
@@ -5,13 +5,14 @@
5
5
 
6
6
  {%- import('macros/printElementId.xml.jinja2') as peid %}
7
7
  {%- import('macros/printDiagComm.xml.jinja2') as pdc %}
8
+ {%- import('macros/printCompuMethod.xml.jinja2') as pcm %}
8
9
 
9
10
  {%- macro printSingleEcuJob(job) -%}
10
11
  <SINGLE-ECU-JOB {{pdc.printDiagCommAttribs(job)|indent(1) }}>
11
12
  {{pdc.printDiagCommSubtags(job) | indent(2, first=True) }}
12
13
  <PROG-CODES>
13
14
  {%- for prog in job.prog_codes %}
14
- {{ printProgCode(prog)|indent(4) }}
15
+ {{ pcm.printProgCode(prog)|indent(4) }}
15
16
  {%- endfor %}
16
17
  </PROG-CODES>
17
18
  {%- if job.input_params %}
@@ -39,28 +40,6 @@
39
40
  {%- endmacro -%}
40
41
 
41
42
 
42
- {%- macro printProgCode(prog) -%}
43
- <PROG-CODE>
44
- <CODE-FILE>{{prog.code_file}}</CODE-FILE>
45
- {%- if prog.encryption %}
46
- <ENCRYPTION>{{prog.encryption}}</ENCRYPTION>
47
- {%- endif %}
48
- <SYNTAX>{{prog.syntax}}</SYNTAX>
49
- <REVISION>{{prog.revision}}</REVISION>
50
- {%- if prog.entrypoint %}
51
- <ENTRYPOINT>{{prog.entrypoint}}</ENTRYPOINT>
52
- {%- endif %}
53
- {%- if prog.library_refs %}
54
- <LIBRARY-REFS>
55
- {%- for ref in prog.library_refs %}
56
- <LIBRARY-REF ID-REF="{{ref.ref_id}}" />
57
- {%- endfor %}
58
- </LIBRARY-REFS>
59
- {%- endif %}
60
- </PROG-CODE>
61
- {%- endmacro -%}
62
-
63
-
64
43
  {%- macro printInputParam(param) -%}
65
44
  <INPUT-PARAM {{-make_xml_attrib("OID", param.oid)}}
66
45
  {{-make_xml_attrib("SEMANTIC", param.semantic)}}>
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.2.0'
16
- __version_tuple__ = version_tuple = (8, 2, 0)
15
+ __version__ = version = '8.2.1'
16
+ __version_tuple__ = version_tuple = (8, 2, 1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odxtools
3
- Version: 8.2.0
3
+ Version: 8.2.1
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>
@@ -29,7 +29,7 @@ odxtools/diagcomm.py,sha256=j8esUkogoxHBwIEUBkAoXe28jX3vaRnnrgCR_gdP6VY,8110
29
29
  odxtools/diagdatadictionaryspec.py,sha256=2zy5f-xnfGI0bnjPOEwG_IJxfsHhXZoOfdIS_fOr3L0,10552
30
30
  odxtools/diaglayercontainer.py,sha256=0JC6ioUGe5c8FzXRotyGEGMMDz8fzKCsK204tGN3cAo,6524
31
31
  odxtools/diagnostictroublecode.py,sha256=jKtO8JqU0HRpeSyrcHn4s21N4Jj-p19WVP-qw2H98gY,2459
32
- odxtools/diagservice.py,sha256=ZNj7XbBPcNkrG0MLd8WoFcCneBmz9uU2Lpi8gtUF0mQ,10188
32
+ odxtools/diagservice.py,sha256=y1_qKI7kJXDWpjpw91loIdf-K7Ozo45BsYiOhVYGuXg,10291
33
33
  odxtools/diagvariable.py,sha256=KUyRCV-H5xKITWYk9wxDnaS_N2nwDFGQzHaQRfNndKA,3829
34
34
  odxtools/docrevision.py,sha256=m57a4lCWeR6QvNNxtwUNpLXAMgSq29ks1HorxoipFVk,2698
35
35
  odxtools/dopbase.py,sha256=JMqlMNKyZJlXwcBFROetCIy1RsK-V_mSCR0MDuA-G5Y,2493
@@ -53,10 +53,11 @@ odxtools/inputparam.py,sha256=lyffK4UBG2d_0JzIaf1QZCsPXFti6gejiIWRSdr-CYA,1841
53
53
  odxtools/internalconstr.py,sha256=QKEkaOcrFoL9xID-oHWWkeg-vtcPV6RFOW1fX2K3pwg,1363
54
54
  odxtools/isotp_state_machine.py,sha256=O6v29IK7p_4gFqrr-fahnbp9Qmo78EEQfEwRsA_Vfjw,13339
55
55
  odxtools/leadinglengthinfotype.py,sha256=mtq38k74hEh_CUY7NbVwdCc_aqKr7v5ABoS_SlKVXyI,4185
56
+ odxtools/library.py,sha256=E_A6K6jcEoUdXh4h4sQILj7_JM-6X5OUUWSM47G69CU,2067
56
57
  odxtools/loadfile.py,sha256=hi8jVE7B1G9gklsb7MrGrp4aOAI65j0kNwvDeEEEN2k,1744
57
58
  odxtools/matchingparameter.py,sha256=2cqaxFCZ28GvvUKCIM-jas3ae4eYGbULbkBlb3aH5RY,2232
58
59
  odxtools/message.py,sha256=07GekN1MbYXm7HaUITDKTj2lBmGK-LB9W8gtBmfAOew,1057
59
- odxtools/minmaxlengthtype.py,sha256=eF78Zb77f6Q6-JXdP3AjqmqNWo4KhGWb-_PVHT7Exmg,8906
60
+ odxtools/minmaxlengthtype.py,sha256=FxcfbuPEmXgYava3h0EPF43I5yTZW_lUcgTqOF5mnes,8917
60
61
  odxtools/modification.py,sha256=oyyFsYHixy6XHOdqqTCx3IIkTAKlSN9wxBpNpvhUaJA,838
61
62
  odxtools/multiplexer.py,sha256=flHlorv9grEMj8pNAWQJNrxhptnDxSsFERO7gpKYRME,10235
62
63
  odxtools/multiplexercase.py,sha256=qfxWJzfJLYAsnhFGheUWDsUaIte2dSRJ0nadiN9SXDw,3176
@@ -73,7 +74,7 @@ odxtools/paramlengthinfotype.py,sha256=vhgvCPIRnyCF9t8yhkYf5MsHXQhWWeEgz_kS8AbiO
73
74
  odxtools/parentref.py,sha256=kcY3VMyVaIUWD0iVNX8sD9qeI4peU8gijboquu0zD7E,3751
74
75
  odxtools/physicaldimension.py,sha256=CEH7Ura4gqsqlBUxBW08ea9Pxh_Od8JruYQ8o9qOGME,3269
75
76
  odxtools/physicaltype.py,sha256=oYjOhdrTVCJcLLBYgy6pxKsZHpuwm1vZ8svwSjsUB6E,2699
76
- odxtools/progcode.py,sha256=ZoGf6X7qH3TT8zSr3bQAYwPb0Il4V6vSLWgdTnlj88Y,2169
77
+ odxtools/progcode.py,sha256=Cx8ziCmQm2OfhinAuRrFrMuoThU7hgA6zNQKAT-AT0A,2276
77
78
  odxtools/protstack.py,sha256=nb2RR4OEaGX6lJ6drHejJU-tkB1p0Ok0KLZhNMTdsEc,2012
78
79
  odxtools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
80
  odxtools/relateddoc.py,sha256=zb5Ea9vkd31kxTP4s5_PLF3LuCoUcG8rgLckStHVRDc,1301
@@ -102,7 +103,7 @@ odxtools/unitgroup.py,sha256=_WNpnYFmkiHQnOY8XhIviiQLXziY3kplH--7ufAWXyI,2067
102
103
  odxtools/unitspec.py,sha256=RMdEQoLrPhGt9vo32fkwbTqymicHFkFQnydFoi3uBog,2924
103
104
  odxtools/utils.py,sha256=PJFXkG74BzoheurrDYOwHZ6EuIcr1sdxf1tQGk6zSgs,1122
104
105
  odxtools/variablegroup.py,sha256=--5sMDOMUg4I3hFyoVOFcGCTOrctrrMADdmH3Mn4wHk,848
105
- odxtools/version.py,sha256=U2ZY-8DRa3-0sBp4eiNaB9C5lBxec9hW73W6_0hd4_Q,411
106
+ odxtools/version.py,sha256=ry4mLPoauQf45skJo220Mc_ipdigukiUFwiTCQkO_wU,411
106
107
  odxtools/writepdxfile.py,sha256=ZEoNkSxheqnXm836-HOpd04O6ipMXYKFzXZy6PM0YLc,7813
107
108
  odxtools/xdoc.py,sha256=gDq-8l8x-Tj1ZJOttPxZchcO5_jEPwcXxMgT29VgTS0,1433
108
109
  odxtools/cli/__init__.py,sha256=T7ano_FIyzBASxYpmcA5VJXU5bQLIy_Qk0HE_SDKelY,106
@@ -138,8 +139,8 @@ odxtools/compumethods/tabintpcompumethod.py,sha256=Gyf2qV5y53SHIcum5d5HQVGszoZCd
138
139
  odxtools/compumethods/texttablecompumethod.py,sha256=vDYafbM0YaipjfN0NSlCFMiIPvp8waMNj3thNcwuYgk,5929
139
140
  odxtools/diaglayers/basevariant.py,sha256=mXS-SF-tcwtdV-rxZZCH6_yqdA-yhtMX1SGo1MS8w7k,4452
140
141
  odxtools/diaglayers/basevariantraw.py,sha256=A9h6p2Ri0sPPTW217rtEdNpAt5g6t0MwP9sgXqZ8pFo,4673
141
- odxtools/diaglayers/diaglayer.py,sha256=QGRS2jeqAsR8GbNRzX5u-rzQy-pNG9l5HRMyArX3-I0,15930
142
- odxtools/diaglayers/diaglayerraw.py,sha256=dC8PvvdRCvvp-J_74sFecqBoTYaMj1E5A8b6grtlvvs,11936
142
+ odxtools/diaglayers/diaglayer.py,sha256=kiziALQ4wUAz8aLSHSQzMAJ65c39rkww2zf3eAI6h4Q,16062
143
+ odxtools/diaglayers/diaglayerraw.py,sha256=kE5hoz6Yv5zGRoAD4Z2dD44Mrvn6EUitBm3K8aChV5o,12403
143
144
  odxtools/diaglayers/diaglayertype.py,sha256=FXL-EVBdrAURuHSHo9OthFuEYEybQO66aMB1o2GxVdI,1340
144
145
  odxtools/diaglayers/ecushareddata.py,sha256=QoV50wQIrJ2-faLtU1P7RrjdacbhPY2BfUtVtIyWqCM,3347
145
146
  odxtools/diaglayers/ecushareddataraw.py,sha256=cvkBhqTLOAey7Pt1bjQ3Jkkenp-D3Zh5djpB4ZWWUvw,3375
@@ -177,11 +178,11 @@ odxtools/templates/macros/printBasicStructure.xml.jinja2,sha256=V5oWGZesU_U5pvPO
177
178
  odxtools/templates/macros/printCompanyData.xml.jinja2,sha256=jcNmQBOGDw7wcKdam72NIJSOTxthfkPJvrmw24MBiYQ,2981
178
179
  odxtools/templates/macros/printComparam.xml.jinja2,sha256=e3hPCswAymJteQIUNoc7FOwsK_FrbJOvJooWdEx_vuQ,2408
179
180
  odxtools/templates/macros/printComparamRef.xml.jinja2,sha256=rBhrdUnp605fsUN9SaljpyaAojzaLBvTbkOuduKod18,1274
180
- odxtools/templates/macros/printCompuMethod.xml.jinja2,sha256=6eW1IgjPDwtW9qvA24Tx1wFtGFfJ0k10Gne5HoQpy4U,4394
181
+ odxtools/templates/macros/printCompuMethod.xml.jinja2,sha256=9DilxMWnqOsXu7bNNlDqls-lEqcr_GPzhZum8rzDJP0,4430
181
182
  odxtools/templates/macros/printDOP.xml.jinja2,sha256=t-6U0gZLdV2n6-YW5pkVFnHNVTAOnfqMch-mk_fGyjo,5146
182
183
  odxtools/templates/macros/printDescription.xml.jinja2,sha256=7jcYEIXr7hbbKqSvIUIgXaQSXV4dKAR9UhY352BZct8,452
183
184
  odxtools/templates/macros/printDiagComm.xml.jinja2,sha256=_SByYBYzPG9t7VNnAohFAXsgng9VrQcSacXH923wRzY,2239
184
- odxtools/templates/macros/printDiagLayer.xml.jinja2,sha256=NKrQ9JTxxhdHTHYFo_ZzyoClJJkZC3ISObhWCJOXUq4,6449
185
+ odxtools/templates/macros/printDiagLayer.xml.jinja2,sha256=psPPZK6yj8e4QURnA1leySY9YDOV8Wj_UiMj2-f2Vw4,6656
185
186
  odxtools/templates/macros/printDiagVariable.xml.jinja2,sha256=sQEU42Onf0WkRJZJyNUgeeGICc3MZaQJPQ0YKY6lRrU,2656
186
187
  odxtools/templates/macros/printDynDefinedSpec.xml.jinja2,sha256=uX3C40VmlbH7sndlJNyTvq8upzaoq8vCk6S93gtpFIY,1742
187
188
  odxtools/templates/macros/printDynamicEndmarkerField.xml.jinja2,sha256=6BmxPKesQvfy46iTiPSFu_iJffC6umZ_YRsTEd-0y5Q,587
@@ -196,6 +197,7 @@ odxtools/templates/macros/printEnvDataDesc.xml.jinja2,sha256=rBpPf51LFx5oNx_XjeT
196
197
  odxtools/templates/macros/printFunctionalClass.xml.jinja2,sha256=TpOQTj-hlNLtIfcSTVzU-gRrfaWrgsTrIFMqm_1M6Qs,329
197
198
  odxtools/templates/macros/printFunctionalGroup.xml.jinja2,sha256=zIeZbhf8haXhgJJUPiOnMe3lvqvfye4-zmwWDQJxFtQ,1159
198
199
  odxtools/templates/macros/printHierarchyElement.xml.jinja2,sha256=GD6iNIE0Wu0QsJ8uLtwEV8N9t6mIhI00_KpCVzOVQBM,651
200
+ odxtools/templates/macros/printLibrary.xml.jinja2,sha256=wp8vZzHPLZayWZh6BOQ56kGyHSeyrlNacdlxBw9d0N0,683
199
201
  odxtools/templates/macros/printMux.xml.jinja2,sha256=68IiPY_mIJQqQiqce3jUphqp3-xLfmEBL7CSb3Cz7eI,1869
200
202
  odxtools/templates/macros/printParam.xml.jinja2,sha256=bdp-r1arWod-vV9ODUZn_QThtAAqkm31SqdJeGItJ1M,3183
201
203
  odxtools/templates/macros/printParentRef.xml.jinja2,sha256=RllVKt2RgrMnWfsujGnBUiABwV2y4_ZfINYy7LXenPM,896
@@ -204,7 +206,7 @@ odxtools/templates/macros/printProtocol.xml.jinja2,sha256=1DXoRSq6z4dhpZnXWH3x9J
204
206
  odxtools/templates/macros/printRequest.xml.jinja2,sha256=yq4xGSlQCioT7FRivyx40Cjs2CYr9EK6NLZf0W4wGW0,717
205
207
  odxtools/templates/macros/printResponse.xml.jinja2,sha256=GsOYmnoh4ewhWg3FUdcovHuJxvuIjsSrXNtbcnnAQcM,683
206
208
  odxtools/templates/macros/printService.xml.jinja2,sha256=zvjOCELEx4yim2FtdNKiExTsDPkAfQAP4Gf_QsondfQ,1546
207
- odxtools/templates/macros/printSingleEcuJob.xml.jinja2,sha256=SXUgO57KQFahI3fv9tRWlEyWeSr0sYXwQ8vq8lqo0eI,2645
209
+ odxtools/templates/macros/printSingleEcuJob.xml.jinja2,sha256=6phi3VxGllusm6KGgrjWiOj7g80ojHyxvesqmHvuNhs,2174
208
210
  odxtools/templates/macros/printSpecialData.xml.jinja2,sha256=0eIFh9cWXfFrQN_f8G_lz3fUqmtysxY6tSN4DbuFY40,1386
209
211
  odxtools/templates/macros/printState.xml.jinja2,sha256=BNnTEyczp43iP9Bn_plMLRsJsasra4sRyvmgODuZQYg,315
210
212
  odxtools/templates/macros/printStateChart.xml.jinja2,sha256=XW1EhF1k8ogbEDt-QMjSOojKl4vjxXkq6BwJWR9GJsI,951
@@ -213,9 +215,9 @@ odxtools/templates/macros/printStaticField.xml.jinja2,sha256=fkV07zrL2pTo6b5ZPD1
213
215
  odxtools/templates/macros/printStructure.xml.jinja2,sha256=CJUPZv_9lko63C5fNpOn5LlQqLCuS--qyhtx4NyD5Rk,567
214
216
  odxtools/templates/macros/printTable.xml.jinja2,sha256=5DQjjJ-UxQ75ntov0S0LGnm_V7YWtKadBpNbmV1aBb8,1501
215
217
  odxtools/templates/macros/printUnitSpec.xml.jinja2,sha256=opS6_Gr94WlAtREEyX4sLo-D-17Gni9Wvr3y1nfVgSA,2715
216
- odxtools-8.2.0.dist-info/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
217
- odxtools-8.2.0.dist-info/METADATA,sha256=jp34I9k6-icmiR1fzWzxwyMO6Biyd7CA1BnvWLUelxU,44084
218
- odxtools-8.2.0.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
219
- odxtools-8.2.0.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
220
- odxtools-8.2.0.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
221
- odxtools-8.2.0.dist-info/RECORD,,
218
+ odxtools-8.2.1.dist-info/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
219
+ odxtools-8.2.1.dist-info/METADATA,sha256=XJFo9HuR5ut_oT-x6eOcoV_R2a5PQr9umexDRlXQPZg,44084
220
+ odxtools-8.2.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
221
+ odxtools-8.2.1.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
222
+ odxtools-8.2.1.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
223
+ odxtools-8.2.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5