odxtools 8.0.4__py3-none-any.whl → 8.0.6__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.
@@ -22,7 +22,7 @@ class CompuInternalToPhys:
22
22
  physical_type: DataType) -> "CompuInternalToPhys":
23
23
  compu_scales = [
24
24
  CompuScale.compuscale_from_et(
25
- cse, doc_frags, internal_type=internal_type, physical_type=physical_type)
25
+ cse, doc_frags, domain_type=internal_type, range_type=physical_type)
26
26
  for cse in et_element.iterfind("COMPU-SCALES/COMPU-SCALE")
27
27
  ]
28
28
 
@@ -22,7 +22,7 @@ class CompuPhysToInternal:
22
22
  physical_type: DataType) -> "CompuPhysToInternal":
23
23
  compu_scales = [
24
24
  CompuScale.compuscale_from_et(
25
- cse, doc_frags, internal_type=internal_type, physical_type=physical_type)
25
+ cse, doc_frags, domain_type=physical_type, range_type=internal_type)
26
26
  for cse in et_element.iterfind("COMPU-SCALES/COMPU-SCALE")
27
27
  ]
28
28
 
@@ -1,25 +1,36 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from dataclasses import dataclass
3
- from typing import List
3
+ from typing import List, Union, cast
4
4
  from xml.etree import ElementTree
5
5
 
6
- from ..exceptions import odxrequire
6
+ from ..exceptions import odxassert, odxrequire
7
7
  from ..odxlink import OdxDocFragment
8
+ from ..odxtypes import DataType
8
9
 
9
10
 
10
11
  @dataclass
11
12
  class CompuRationalCoeffs:
12
- numerators: List[float]
13
- denominators: List[float]
13
+ value_type: DataType
14
+
15
+ numerators: List[Union[int, float]]
16
+ denominators: List[Union[int, float]]
14
17
 
15
18
  @staticmethod
16
- def from_et(et_element: ElementTree.Element,
17
- doc_frags: List[OdxDocFragment]) -> "CompuRationalCoeffs":
19
+ def coeffs_from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment], *,
20
+ value_type: DataType) -> "CompuRationalCoeffs":
21
+ odxassert(
22
+ value_type
23
+ in (DataType.A_UINT32, DataType.A_INT32, DataType.A_FLOAT32, DataType.A_FLOAT64),
24
+ "Rational coefficients must be of numeric type.")
25
+
18
26
  numerators = [
19
- float(odxrequire(elem.text)) for elem in et_element.iterfind("COMPU-NUMERATOR/V")
27
+ cast(float, value_type.from_string(odxrequire(elem.text)))
28
+ for elem in et_element.iterfind("COMPU-NUMERATOR/V")
20
29
  ]
21
30
  denominators = [
22
- float(odxrequire(elem.text)) for elem in et_element.iterfind("COMPU-DENOMINATOR/V")
31
+ cast(float, value_type.from_string(odxrequire(elem.text)))
32
+ for elem in et_element.iterfind("COMPU-DENOMINATOR/V")
23
33
  ]
24
34
 
25
- return CompuRationalCoeffs(numerators=numerators, denominators=denominators)
35
+ return CompuRationalCoeffs(
36
+ value_type=value_type, numerators=numerators, denominators=denominators)
@@ -27,33 +27,39 @@ class CompuScale:
27
27
 
28
28
  # the following two attributes are not specified for COMPU-SCALE
29
29
  # tags in the XML, but they are required to do anything useful
30
- # with it.
31
- internal_type: DataType
32
- physical_type: DataType
30
+ # with compu scales: The domain type is the input set of the
31
+ # function associated with the compu scale object, whilst the
32
+ # range type represents the output set. IOW, for scales contained
33
+ # by the internal-to-physical mapping function, the domain type is
34
+ # the internal and the range type is the physical type of the
35
+ # compu method. (Vice versa for scales specified by the
36
+ # physical-to-internal mapping function.)
37
+ domain_type: DataType
38
+ range_type: DataType
33
39
 
34
40
  @staticmethod
35
41
  def compuscale_from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment], *,
36
- internal_type: DataType, physical_type: DataType) -> "CompuScale":
42
+ domain_type: DataType, range_type: DataType) -> "CompuScale":
37
43
  short_label = et_element.findtext("SHORT-LABEL")
38
44
  description = Description.from_et(et_element.find("DESC"), doc_frags)
39
45
 
40
46
  lower_limit = Limit.limit_from_et(
41
- et_element.find("LOWER-LIMIT"), doc_frags, value_type=internal_type)
47
+ et_element.find("LOWER-LIMIT"), doc_frags, value_type=domain_type)
42
48
  upper_limit = Limit.limit_from_et(
43
- et_element.find("UPPER-LIMIT"), doc_frags, value_type=internal_type)
49
+ et_element.find("UPPER-LIMIT"), doc_frags, value_type=domain_type)
44
50
 
45
51
  compu_inverse_value = None
46
52
  if (cive := et_element.find("COMPU-INVERSE-VALUE")) is not None:
47
- compu_inverse_value = CompuInverseValue.compuvalue_from_et(
48
- cive, data_type=internal_type)
53
+ compu_inverse_value = CompuInverseValue.compuvalue_from_et(cive, data_type=domain_type)
49
54
 
50
55
  compu_const = None
51
56
  if (cce := et_element.find("COMPU-CONST")) is not None:
52
- compu_const = CompuConst.compuvalue_from_et(cce, data_type=physical_type)
57
+ compu_const = CompuConst.compuvalue_from_et(cce, data_type=range_type)
53
58
 
54
59
  compu_rational_coeffs: Optional[CompuRationalCoeffs] = None
55
60
  if (crc_elem := et_element.find("COMPU-RATIONAL-COEFFS")) is not None:
56
- compu_rational_coeffs = CompuRationalCoeffs.from_et(crc_elem, doc_frags)
61
+ compu_rational_coeffs = CompuRationalCoeffs.coeffs_from_et(
62
+ crc_elem, doc_frags, value_type=range_type)
57
63
 
58
64
  return CompuScale(
59
65
  short_label=short_label,
@@ -63,8 +69,8 @@ class CompuScale:
63
69
  compu_inverse_value=compu_inverse_value,
64
70
  compu_const=compu_const,
65
71
  compu_rational_coeffs=compu_rational_coeffs,
66
- internal_type=internal_type,
67
- physical_type=physical_type)
72
+ domain_type=domain_type,
73
+ range_type=range_type)
68
74
 
69
75
  def applies(self, internal_value: AtomicOdxType) -> bool:
70
76
 
@@ -115,8 +115,7 @@ class LinearSegment:
115
115
  This method is called by `__post_init__()`.
116
116
  """
117
117
 
118
- def convert_internal_to_physical_limit(internal_limit: Optional[Limit],
119
- is_upper_limit: bool) -> Optional[Limit]:
118
+ def convert_internal_to_physical_limit(internal_limit: Optional[Limit]) -> Optional[Limit]:
120
119
  """Helper method to convert a single internal limit
121
120
  """
122
121
  if internal_limit is None or internal_limit.value_raw is None:
@@ -137,16 +136,16 @@ class LinearSegment:
137
136
 
138
137
  if self.factor >= 0:
139
138
  self._physical_lower_limit = convert_internal_to_physical_limit(
140
- self.internal_lower_limit, False)
139
+ self.internal_lower_limit)
141
140
  self._physical_upper_limit = convert_internal_to_physical_limit(
142
- self.internal_upper_limit, True)
141
+ self.internal_upper_limit)
143
142
  else:
144
143
  # If the scaling factor is negative, the lower and upper
145
144
  # limit are swapped
146
145
  self._physical_lower_limit = convert_internal_to_physical_limit(
147
- self.internal_upper_limit, True)
146
+ self.internal_upper_limit)
148
147
  self._physical_upper_limit = convert_internal_to_physical_limit(
149
- self.internal_lower_limit, False)
148
+ self.internal_lower_limit)
150
149
 
151
150
  def physical_applies(self, physical_value: AtomicOdxType) -> bool:
152
151
  """Returns True iff the segment is applicable to a given physical value"""
odxtools/database.py CHANGED
@@ -1,7 +1,8 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from itertools import chain
3
+ from os import PathLike
3
4
  from pathlib import Path
4
- from typing import IO, Any, Dict, List, Optional, OrderedDict
5
+ from typing import IO, Any, Dict, List, Optional, OrderedDict, Union
5
6
  from xml.etree import ElementTree
6
7
  from zipfile import ZipFile
7
8
 
@@ -16,7 +17,7 @@ from .diaglayers.ecushareddata import EcuSharedData
16
17
  from .diaglayers.ecuvariant import EcuVariant
17
18
  from .diaglayers.functionalgroup import FunctionalGroup
18
19
  from .diaglayers.protocol import Protocol
19
- from .exceptions import odxraise
20
+ from .exceptions import odxraise, odxrequire
20
21
  from .nameditemlist import NamedItemList
21
22
  from .odxlink import OdxLinkDatabase, OdxLinkId
22
23
 
@@ -27,10 +28,7 @@ class Database:
27
28
  into a single PDX file.
28
29
  """
29
30
 
30
- def __init__(self,
31
- *,
32
- pdx_zip: Optional[ZipFile] = None,
33
- odx_d_file_name: Optional[str] = None) -> None:
31
+ def __init__(self) -> None:
34
32
  self.model_version: Optional[Version] = None
35
33
  self.auxiliary_files: OrderedDict[str, IO[bytes]] = OrderedDict()
36
34
 
@@ -38,10 +36,16 @@ class Database:
38
36
  self._diag_layer_containers = NamedItemList[DiagLayerContainer]()
39
37
  self._comparam_subsets = NamedItemList[ComparamSubset]()
40
38
  self._comparam_specs = NamedItemList[ComparamSpec]()
39
+ self._short_name = "odx_database"
41
40
 
42
- def add_pdx_file(self, pdx_file_name: str) -> None:
43
- pdx_zip = ZipFile(pdx_file_name)
44
-
41
+ def add_pdx_file(self, pdx_file: Union[str, "PathLike[Any]", IO[bytes], ZipFile]) -> None:
42
+ """Add PDX file to database.
43
+ Either pass the path to the file, an IO with the file content or a ZipFile object.
44
+ """
45
+ if isinstance(pdx_file, ZipFile):
46
+ pdx_zip = pdx_file
47
+ else:
48
+ pdx_zip = ZipFile(pdx_file)
45
49
  for zip_member in pdx_zip.namelist():
46
50
  # The name of ODX files can end with .odx, .odx-d,
47
51
  # .odx-c, .odx-cs, .odx-e, .odx-f, .odx-fd, .odx-m,
@@ -51,19 +55,23 @@ class Database:
51
55
  if p.suffix.lower().startswith(".odx"):
52
56
  root = ElementTree.parse(pdx_zip.open(zip_member)).getroot()
53
57
  self._process_xml_tree(root)
54
- elif p.name.lower() != "index.xml":
58
+ elif p.name.lower() == "index.xml":
59
+ root = ElementTree.parse(pdx_zip.open(zip_member)).getroot()
60
+ db_short_name = odxrequire(root.findtext("SHORT-NAME"))
61
+ self.short_name = db_short_name
62
+ else:
55
63
  self.add_auxiliary_file(zip_member, pdx_zip.open(zip_member))
56
64
 
57
- def add_odx_file(self, odx_file_name: str) -> None:
65
+ def add_odx_file(self, odx_file_name: Union[str, "PathLike[Any]"]) -> None:
58
66
  self._process_xml_tree(ElementTree.parse(odx_file_name).getroot())
59
67
 
60
68
  def add_auxiliary_file(self,
61
- aux_file_name: str,
69
+ aux_file_name: Union[str, "PathLike[Any]"],
62
70
  aux_file_obj: Optional[IO[bytes]] = None) -> None:
63
71
  if aux_file_obj is None:
64
72
  aux_file_obj = open(aux_file_name, "rb")
65
73
 
66
- self.auxiliary_files[aux_file_name] = aux_file_obj
74
+ self.auxiliary_files[str(aux_file_name)] = aux_file_obj
67
75
 
68
76
  def _process_xml_tree(self, root: ElementTree.Element) -> None:
69
77
  dlcs: List[DiagLayerContainer] = []
@@ -155,6 +163,14 @@ class Database:
155
163
  """A map from odx_id to object"""
156
164
  return self._odxlinks
157
165
 
166
+ @property
167
+ def short_name(self) -> str:
168
+ return self._short_name
169
+
170
+ @short_name.setter
171
+ def short_name(self, value: str) -> None:
172
+ self._short_name = value
173
+
158
174
  @property
159
175
  def ecu_shared_datas(self) -> NamedItemList[EcuSharedData]:
160
176
  """All ECU shared data layers defined by this database
odxtools/nameditemlist.py CHANGED
@@ -141,8 +141,7 @@ class ItemAttributeList(List[T]):
141
141
  def __getitem__(self, key: slice) -> List[T]:
142
142
  ...
143
143
 
144
- def __getitem__( # type: ignore
145
- self, key: Union[SupportsIndex, str, slice]) -> Union[T, List[T]]:
144
+ def __getitem__(self, key: Union[SupportsIndex, str, slice]) -> Union[T, List[T]]:
146
145
  if isinstance(key, (SupportsIndex, slice)):
147
146
  return super().__getitem__(key)
148
147
  else:
@@ -4,7 +4,7 @@
4
4
  -#}
5
5
  <?xml version="1.0" encoding="UTF-8"?>
6
6
  <CATALOG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" F-DTD-VERSION="ODX-2.2.0" xsi:noNamespaceSchemaLocation="odx-cc.xsd">
7
- <SHORT-NAME>{{ecu_name}}</SHORT-NAME>
7
+ <SHORT-NAME>{{database.short_name}}</SHORT-NAME>
8
8
  <ABLOCKS>
9
9
  {%- for file_name, creation_date, mime_type in file_index %}
10
10
  <ABLOCK UPD="UNCHANGED">
@@ -5,7 +5,7 @@
5
5
 
6
6
  {%- macro printDescription(desc) %}
7
7
  {%- if desc is not none %}
8
- <DESC {{make_xml_attrib("TI", desc.text_identifier)}}>{{desc.text}}
8
+ <DESC {{- make_xml_attrib("TI", desc.text_identifier)}}>{{desc.text}}
9
9
  {%- if desc.external_docs %}
10
10
  <EXTERNAL-DOCS>
11
11
  {%- for ed in desc.external_docs %}
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.0.4'
16
- __version_tuple__ = version_tuple = (8, 0, 4)
15
+ __version__ = version = '8.0.6'
16
+ __version_tuple__ = version_tuple = (8, 0, 6)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odxtools
3
- Version: 8.0.4
3
+ Version: 8.0.6
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>
@@ -19,7 +19,7 @@ odxtools/complexdop.py,sha256=AHkHMf_IEWfy-_zSiCuZXmdTNCXiCOpg5GRZ5uMVV5A,280
19
19
  odxtools/createanycomparam.py,sha256=RP0XA2Ut4GL2NWy05RvKBrTnpbvvCG2XuNL8OO-9rbI,617
20
20
  odxtools/createanydiagcodedtype.py,sha256=0DVmMj4UCDYIg0zu9pgTplyhHmRedz1KJcchq1uKMjg,1216
21
21
  odxtools/createecuvariantpatterns.py,sha256=FXHLGR4M791MRkpU2_keck88hoMYkuyPiCUxuGbUasQ,559
22
- odxtools/database.py,sha256=SKLWsUtNR5Ai81uYxBVOgz7Na91m6rKzC7WBHL15u40,8612
22
+ odxtools/database.py,sha256=ktsm_tJOXXWKlD-EW_Flp_fSXJvQYzZKIzwLAZEoLTE,9284
23
23
  odxtools/dataobjectproperty.py,sha256=R5sOMIejzcTB-CXTRrL2dWnFwR08eInF531s3l9BQcI,5888
24
24
  odxtools/decodestate.py,sha256=jJxLUzUYZ0C4t18FhJzo2iRTP8DF7BzrWLtRTTlLsJI,4885
25
25
  odxtools/description.py,sha256=UoACftC_n7fQ1n9WDwCzizStMH0HCO2Qv0YLRaSjEgs,1484
@@ -62,7 +62,7 @@ odxtools/multiplexer.py,sha256=0xUdNSPSJuOzwnh6vyZyp8ycYKfg570R9kpHHoACrEE,10239
62
62
  odxtools/multiplexercase.py,sha256=ObUQIf41UM3tQuECwPLks2Iff_FbN7A-W4Vh6zxSKNs,3177
63
63
  odxtools/multiplexerdefaultcase.py,sha256=u3YxZZawhXTOdrC5ltt1YNNaDMGrbL9qsz6PTKrPdSM,2104
64
64
  odxtools/multiplexerswitchkey.py,sha256=fnCpPcg47JQZQsrqS2RAa_O-JrfUb0pvhKv8hhs1RXQ,1551
65
- odxtools/nameditemlist.py,sha256=kPNab44E3cSHXjih7MDgjLBARb98PGB2qcPnM_445O4,6550
65
+ odxtools/nameditemlist.py,sha256=IYN_OBVf_iIU6a5CQ-gCttiUMeJEe04uk9z6Ro6IGK8,6521
66
66
  odxtools/negoutputparam.py,sha256=u2IhJvy6n19t3nyADGG0H0XTm7JNdQ0-95FawGAdtiE,1373
67
67
  odxtools/obd.py,sha256=WsUbhdonqQJtxf972CUdYL78AMMTVjMQhoCJbaZhRIo,1860
68
68
  odxtools/odxlink.py,sha256=YoEovTx5T8c5YFJPa2CSxk_gwRfP8miGCwicHbpqQNg,9259
@@ -102,7 +102,7 @@ odxtools/unitgroup.py,sha256=_WNpnYFmkiHQnOY8XhIviiQLXziY3kplH--7ufAWXyI,2067
102
102
  odxtools/unitspec.py,sha256=bc3B6ysTXSxpNWyQ6cQVJgIGyxmeqRTeshc3bdym1iA,2948
103
103
  odxtools/utils.py,sha256=PJFXkG74BzoheurrDYOwHZ6EuIcr1sdxf1tQGk6zSgs,1122
104
104
  odxtools/variablegroup.py,sha256=--5sMDOMUg4I3hFyoVOFcGCTOrctrrMADdmH3Mn4wHk,848
105
- odxtools/version.py,sha256=rKRFWPCzOWco8E_y7IYGymVQklA8jyRKIs4hQcCz_vI,411
105
+ odxtools/version.py,sha256=ezZqCbstAPwDi9fM4OrkFMyujfwJlfH0tBmH0LsrRww,411
106
106
  odxtools/writepdxfile.py,sha256=x3W2xiPVjzNZjfpJssY6ngkx74sZtb95OFmBHql1VY4,7766
107
107
  odxtools/xdoc.py,sha256=gDq-8l8x-Tj1ZJOttPxZchcO5_jEPwcXxMgT29VgTS0,1433
108
108
  odxtools/cli/__init__.py,sha256=T7ano_FIyzBASxYpmcA5VJXU5bQLIy_Qk0HE_SDKelY,106
@@ -118,17 +118,17 @@ odxtools/cli/main.py,sha256=_zPCU6N2ofpj_jQuQ_BU5EafBpMW0srhahZI8BgAM-0,2335
118
118
  odxtools/cli/snoop.py,sha256=z8USSpmz18VAvkGpzepeaOlVJhi-8aeW10XRylsvZLU,10610
119
119
  odxtools/compumethods/compuconst.py,sha256=14JIJXVKSe4bPWb5JyKXB6tAASMcWznExE1w6z1SMoc,806
120
120
  odxtools/compumethods/compudefaultvalue.py,sha256=Lw8Fnm854dpNCvO8waKWg_hSRyW-NwvoQFFjyW3RHwY,980
121
- odxtools/compumethods/compuinternaltophys.py,sha256=7SCW_lpnBq-hlKBjkuc_wII3idxgHrsuB9K2vOJfTiI,1512
121
+ odxtools/compumethods/compuinternaltophys.py,sha256=x2dEeedf8DSJXM62JKQomGVMNTrsK5hFNnkt8gGyn1Q,1507
122
122
  odxtools/compumethods/compuinversevalue.py,sha256=oG5tWSJkvoDmJPmb9EAGGutslbTrwZok5nfG20iZ8vk,220
123
123
  odxtools/compumethods/compumethod.py,sha256=fKWFzoJXb1klB4W7FpKTw6gbhACb1v97tjAyGgCU3DY,3534
124
- odxtools/compumethods/compuphystointernal.py,sha256=D0_rT7KozvwqWkDJiabXBU636N_d-Md4Bybb9Zy8psk,1512
125
- odxtools/compumethods/compurationalcoeffs.py,sha256=gRD0B2Ut03Rg4ixVPh2Mh6PY20RXzozGMxoP75vMr0U,782
126
- odxtools/compumethods/compuscale.py,sha256=bEEsV0Vg_tGokgdivkFHqtRhczk1etS_44ryMyBrU0k,4057
124
+ odxtools/compumethods/compuphystointernal.py,sha256=scFQZCHk8B6t3OUrSYxG1Bf1Df-WB1Y2CezhQ0RzmpI,1507
125
+ odxtools/compumethods/compurationalcoeffs.py,sha256=N95JWi06Wkgk3zAK57ONy7mQ9prpLxecsbVD0gyGloE,1246
126
+ odxtools/compumethods/compuscale.py,sha256=xkwIfkoRF4faICy2jlfB6rx4xYRQb0jL5fq6NMNPX8k,4487
127
127
  odxtools/compumethods/createanycompumethod.py,sha256=_y5OwNXZiKeFUcueFCn_jgrQxML_rmOymA_CygWId_k,2085
128
128
  odxtools/compumethods/identicalcompumethod.py,sha256=VVQ0tAkmowXZMBFQd9-n0VnsodDFRHXWdWgpNxdHAkQ,2077
129
129
  odxtools/compumethods/limit.py,sha256=QjrY6dd0Kc7n4CcweMBrkwlX4hsmx0bkQEaQKmTxQ18,4164
130
130
  odxtools/compumethods/linearcompumethod.py,sha256=mKCHUOWgJgooegGrVIkK9J9xX0n01x-CYO2UyUaRvtM,3667
131
- odxtools/compumethods/linearsegment.py,sha256=Xc842uBq-fRopAymTbc3kKKb_wnvwsGj9Zi3fRTkkW8,7226
131
+ odxtools/compumethods/linearsegment.py,sha256=_P96JyY5hatNlFvj-yXbWVBrx3rIj83_nu8SPpLezGk,7131
132
132
  odxtools/compumethods/scalelinearcompumethod.py,sha256=o_Re17G4XlCn-XbStnvlTs9XVN4h71mkkYyIOii-7w4,5895
133
133
  odxtools/compumethods/tabintpcompumethod.py,sha256=Gyf2qV5y53SHIcum5d5HQVGszoZCdu47jxMCQ6yKdQk,8065
134
134
  odxtools/compumethods/texttablecompumethod.py,sha256=vDYafbM0YaipjfN0NSlCFMiIPvp8waMNj3thNcwuYgk,5929
@@ -165,7 +165,7 @@ odxtools/parameters/valueparameter.py,sha256=khsmiaLhpW2PjUKQaAkntwurxsml3TUzNwa
165
165
  odxtools/templates/comparam-spec.odx-c.xml.jinja2,sha256=esdk5C0rjG6azzA1uZYiC-9Hzhqtn_d654AFq8VRa6g,1525
166
166
  odxtools/templates/comparam-subset.odx-cs.xml.jinja2,sha256=9desdk8puFzysHAeLSoZOBxM1d3EzjbnlqlhVsU-Kmc,2481
167
167
  odxtools/templates/diag_layer_container.odx-d.xml.jinja2,sha256=YC4-jWVRoFqD_zd2Sd5FKnAlYsGYGVm9n2uXQ6kXqW8,2388
168
- odxtools/templates/index.xml.jinja2,sha256=dX7QZA3G5Au2BMbXWMMyF2K1aR6i3go-0E5dY3Z9hWE,636
168
+ odxtools/templates/index.xml.jinja2,sha256=Z1bcntvvky7NoH0Q0CRJgUORwf3g96PFPGeOpi7VATw,647
169
169
  odxtools/templates/macros/printAdminData.xml.jinja2,sha256=YTB_CbhnALF6RIbE0XKQHRbC6c0PSZ_DxdrRHgqMD_s,2590
170
170
  odxtools/templates/macros/printAudience.xml.jinja2,sha256=IiAogxtEIo6qg7iZm1plQtrM4nkl6jj9GhIv5QI5ETM,1278
171
171
  odxtools/templates/macros/printBaseVariant.xml.jinja2,sha256=l4Jp8v9ZfPXvIisqVLgTpzc5UdYGeIocY4vAcgCiiaE,1480
@@ -175,7 +175,7 @@ odxtools/templates/macros/printComparam.xml.jinja2,sha256=rhoJO78urhjO07kuX0p_PR
175
175
  odxtools/templates/macros/printComparamRef.xml.jinja2,sha256=rBhrdUnp605fsUN9SaljpyaAojzaLBvTbkOuduKod18,1274
176
176
  odxtools/templates/macros/printCompuMethod.xml.jinja2,sha256=6eW1IgjPDwtW9qvA24Tx1wFtGFfJ0k10Gne5HoQpy4U,4394
177
177
  odxtools/templates/macros/printDOP.xml.jinja2,sha256=1i8s6Z9zR6C5WRngxXPMGaHhoaZsJSEfWsggjfxnRqY,5138
178
- odxtools/templates/macros/printDescription.xml.jinja2,sha256=zsPzVuM4cZJr0RlUYKQ-tGVDNVRO0yAs_pYetFHme3s,450
178
+ odxtools/templates/macros/printDescription.xml.jinja2,sha256=7jcYEIXr7hbbKqSvIUIgXaQSXV4dKAR9UhY352BZct8,452
179
179
  odxtools/templates/macros/printDiagComm.xml.jinja2,sha256=eIKtu3xEmoQllyNYOWQx5Iv2oljKSg3lR6V4As-SFE0,2231
180
180
  odxtools/templates/macros/printDiagLayer.xml.jinja2,sha256=V4CYnhnRLUPBhjE-l4kWpG3Hzym-9ddO0q9Kp2ypflU,6456
181
181
  odxtools/templates/macros/printDiagVariable.xml.jinja2,sha256=7Fa0DFyeEUDUxgM0IUsj_BXC2-csLSv1xjiUT1yauis,2531
@@ -209,9 +209,9 @@ odxtools/templates/macros/printStaticField.xml.jinja2,sha256=JIXFhyNrnQ-2_vWy6Rx
209
209
  odxtools/templates/macros/printStructure.xml.jinja2,sha256=uswYs2xse0B9hZut_FN1GvvR0xsZa_3pZRnlF0ElEEc,559
210
210
  odxtools/templates/macros/printTable.xml.jinja2,sha256=VsP01jqyQllLP-brQ6J1E8ubVntiToEb8Uk7HQEYqtY,1485
211
211
  odxtools/templates/macros/printUnitSpec.xml.jinja2,sha256=AJ5jWYKRmoIZkrd25R1KmjjgU6pfOqRiOQHtUAuS6GI,2813
212
- odxtools-8.0.4.dist-info/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
213
- odxtools-8.0.4.dist-info/METADATA,sha256=FmuQOkIhcsg1YsqcvMpBa-ciZwNtoZ7lZJbl0DUf3zU,44084
214
- odxtools-8.0.4.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
215
- odxtools-8.0.4.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
216
- odxtools-8.0.4.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
217
- odxtools-8.0.4.dist-info/RECORD,,
212
+ odxtools-8.0.6.dist-info/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
213
+ odxtools-8.0.6.dist-info/METADATA,sha256=I6_6YdNbHTRJXLyvjh-KMskjqe5-CvSc0tQCRYU0qXI,44084
214
+ odxtools-8.0.6.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
215
+ odxtools-8.0.6.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
216
+ odxtools-8.0.6.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
217
+ odxtools-8.0.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (74.1.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5