odxtools 10.2.0__py3-none-any.whl → 10.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.
@@ -7,6 +7,7 @@ from itertools import chain
7
7
  from typing import Any, Union, cast
8
8
  from xml.etree import ElementTree
9
9
 
10
+ from ..additionalaudience import AdditionalAudience
10
11
  from ..admindata import AdminData
11
12
  from ..companydata import CompanyData
12
13
  from ..description import Description
@@ -14,6 +15,7 @@ from ..diagcomm import DiagComm
14
15
  from ..diagdatadictionaryspec import DiagDataDictionarySpec
15
16
  from ..diagservice import DiagService
16
17
  from ..exceptions import DecodeError, odxassert, odxraise
18
+ from ..functionalclass import FunctionalClass
17
19
  from ..library import Library
18
20
  from ..message import Message
19
21
  from ..nameditemlist import NamedItemList, TNamed
@@ -26,6 +28,7 @@ from ..servicebinner import ServiceBinner
26
28
  from ..singleecujob import SingleEcuJob
27
29
  from ..snrefcontext import SnRefContext
28
30
  from ..specialdatagroup import SpecialDataGroup
31
+ from ..statechart import StateChart
29
32
  from ..subcomponent import SubComponent
30
33
  from ..unitgroup import UnitGroup
31
34
  from .diaglayerraw import DiagLayerRaw
@@ -223,12 +226,30 @@ class DiagLayer:
223
226
  def admin_data(self) -> AdminData | None:
224
227
  return self.diag_layer_raw.admin_data
225
228
 
229
+ @property
230
+ def company_datas(self) -> NamedItemList[CompanyData]:
231
+ return self.diag_layer_raw.company_datas
232
+
233
+ @property
234
+ def functional_classes(self) -> NamedItemList[FunctionalClass]:
235
+ return self.diag_layer_raw.functional_classes
236
+
237
+ @property
238
+ def diag_data_dictionary_spec(self) -> DiagDataDictionarySpec:
239
+ """The DiagDataDictionarySpec applicable to this DiagLayer"""
240
+ return self._diag_data_dictionary_spec
241
+
242
+ @property
243
+ def diag_comms_raw(self) -> list[OdxLinkRef | DiagComm]:
244
+ return self.diag_layer_raw.diag_comms_raw
245
+
226
246
  @property
227
247
  def diag_comms(self) -> NamedItemList[DiagComm]:
228
248
  return self.diag_layer_raw.diag_comms
229
249
 
230
250
  @property
231
251
  def services(self) -> NamedItemList[DiagService]:
252
+ """This is an alias for `.diag_services`"""
232
253
  return self.diag_layer_raw.services
233
254
 
234
255
  @property
@@ -239,10 +260,6 @@ class DiagLayer:
239
260
  def single_ecu_jobs(self) -> NamedItemList[SingleEcuJob]:
240
261
  return self.diag_layer_raw.single_ecu_jobs
241
262
 
242
- @property
243
- def company_datas(self) -> NamedItemList[CompanyData]:
244
- return self.diag_layer_raw.company_datas
245
-
246
263
  @property
247
264
  def requests(self) -> NamedItemList[Request]:
248
265
  return self.diag_layer_raw.requests
@@ -264,21 +281,24 @@ class DiagLayer:
264
281
  return self.diag_layer_raw.import_refs
265
282
 
266
283
  @property
267
- def libraries(self) -> NamedItemList[Library]:
268
- return self.diag_layer_raw.libraries
284
+ def state_charts(self) -> NamedItemList[StateChart]:
285
+ return self.diag_layer_raw.state_charts
286
+
287
+ @property
288
+ def additional_audiences(self) -> NamedItemList[AdditionalAudience]:
289
+ return self.diag_layer_raw.additional_audiences
269
290
 
270
291
  @property
271
292
  def sub_components(self) -> NamedItemList[SubComponent]:
272
293
  return self.diag_layer_raw.sub_components
273
294
 
274
295
  @property
275
- def sdgs(self) -> list[SpecialDataGroup]:
276
- return self.diag_layer_raw.sdgs
296
+ def libraries(self) -> NamedItemList[Library]:
297
+ return self.diag_layer_raw.libraries
277
298
 
278
299
  @property
279
- def diag_data_dictionary_spec(self) -> DiagDataDictionarySpec:
280
- """The DiagDataDictionarySpec applicable to this DiagLayer"""
281
- return self._diag_data_dictionary_spec
300
+ def sdgs(self) -> list[SpecialDataGroup]:
301
+ return self.diag_layer_raw.sdgs
282
302
 
283
303
  #####
284
304
  # </properties forwarded to the "raw" diag layer>
@@ -33,6 +33,18 @@ class EcuVariant(HierarchyElement):
33
33
  def diag_variables_raw(self) -> list[DiagVariable | OdxLinkRef]:
34
34
  return self.ecu_variant_raw.diag_variables_raw
35
35
 
36
+ @property
37
+ def diag_variables(self) -> NamedItemList[DiagVariable]:
38
+ return self._diag_variables
39
+
40
+ @property
41
+ def variable_groups(self) -> NamedItemList[VariableGroup]:
42
+ return self._variable_groups
43
+
44
+ @property
45
+ def ecu_variant_patterns(self) -> list[EcuVariantPattern]:
46
+ return self.ecu_variant_raw.ecu_variant_patterns
47
+
36
48
  @property
37
49
  def dyn_defined_spec(self) -> DynDefinedSpec | None:
38
50
  return self.ecu_variant_raw.dyn_defined_spec
@@ -56,25 +68,6 @@ class EcuVariant(HierarchyElement):
56
68
 
57
69
  return None
58
70
 
59
- @property
60
- def ecu_variant_patterns(self) -> list[EcuVariantPattern]:
61
- return self.ecu_variant_raw.ecu_variant_patterns
62
-
63
- #######
64
- # <properties subject to value inheritance>
65
- #######
66
- @property
67
- def diag_variables(self) -> NamedItemList[DiagVariable]:
68
- return self._diag_variables
69
-
70
- @property
71
- def variable_groups(self) -> NamedItemList[VariableGroup]:
72
- return self._variable_groups
73
-
74
- #######
75
- # </properties subject to value inheritance>
76
- #######
77
-
78
71
  @staticmethod
79
72
  def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "EcuVariant":
80
73
  ecu_variant_raw = EcuVariantRaw.from_et(et_element, context)
@@ -438,6 +438,11 @@ class HierarchyElement(DiagLayer):
438
438
  #######
439
439
  # <properties subject to value inheritance>
440
440
  #######
441
+ @property
442
+ def functional_classes(self) -> NamedItemList[FunctionalClass]:
443
+ """All functional classes applicable to this DiagLayer"""
444
+ return self._functional_classes
445
+
441
446
  @property
442
447
  def diag_data_dictionary_spec(self) -> DiagDataDictionarySpec:
443
448
  return self._diag_data_dictionary_spec
@@ -480,11 +485,6 @@ class HierarchyElement(DiagLayer):
480
485
  """All global negative responses applicable to this DiagLayer"""
481
486
  return self._global_negative_responses
482
487
 
483
- @property
484
- def functional_classes(self) -> NamedItemList[FunctionalClass]:
485
- """All functional classes applicable to this DiagLayer"""
486
- return self._functional_classes
487
-
488
488
  @property
489
489
  def state_charts(self) -> NamedItemList[StateChart]:
490
490
  """All state charts applicable to this DiagLayer"""
@@ -7,6 +7,8 @@ from xml.etree import ElementTree
7
7
  from ..comparamspec import ComparamSpec
8
8
  from ..exceptions import odxassert
9
9
  from ..odxdoccontext import OdxDocContext
10
+ from ..odxlink import OdxLinkRef
11
+ from ..parentref import ParentRef
10
12
  from ..protstack import ProtStack
11
13
  from .hierarchyelement import HierarchyElement
12
14
  from .protocolraw import ProtocolRaw
@@ -24,14 +26,26 @@ class Protocol(HierarchyElement):
24
26
  def protocol_raw(self) -> ProtocolRaw:
25
27
  return cast(ProtocolRaw, self.diag_layer_raw)
26
28
 
29
+ @property
30
+ def comparam_spec_ref(self) -> OdxLinkRef:
31
+ return self.protocol_raw.comparam_spec_ref
32
+
27
33
  @property
28
34
  def comparam_spec(self) -> ComparamSpec:
29
35
  return self.protocol_raw.comparam_spec
30
36
 
37
+ @property
38
+ def prot_stack_snref(self) -> str | None:
39
+ return self.protocol_raw.prot_stack_snref
40
+
31
41
  @property
32
42
  def prot_stack(self) -> ProtStack | None:
33
43
  return self.protocol_raw.prot_stack
34
44
 
45
+ @property
46
+ def parent_refs(self) -> list[ParentRef]:
47
+ return self.protocol_raw.parent_refs
48
+
35
49
  @staticmethod
36
50
  def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "Protocol":
37
51
  protocol_raw = ProtocolRaw.from_et(et_element, context)
odxtools/odxlink.py CHANGED
@@ -204,8 +204,10 @@ class OdxLinkDatabase:
204
204
  # locate an object exhibiting with the referenced local ID
205
205
  # in the ID database for the document fragment
206
206
  if (obj := doc_frag_db.get(ref.ref_id)) is not None:
207
- if expected_type is not None:
208
- odxassert(isinstance(obj, expected_type))
207
+ if expected_type is not None and not isinstance(obj, expected_type):
208
+ odxraise(f"Referenced object for link {ref.ref_id} is of type "
209
+ f"{type(obj).__name__} which is not a subclass of expected "
210
+ f"type {expected_type.__name__}")
209
211
 
210
212
  return obj
211
213
 
@@ -77,7 +77,7 @@ class SubComponentParamConnector(IdentifiableElement):
77
77
  odxrequire(context.diag_layer).diag_comms, DiagService)
78
78
  self._service = service
79
79
 
80
- if self._service.request is not None:
80
+ if self._service.request is None:
81
81
  odxraise()
82
82
  return
83
83
  if not self._service.positive_responses:
odxtools/version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '10.2.0'
21
- __version_tuple__ = version_tuple = (10, 2, 0)
20
+ __version__ = version = '10.2.1'
21
+ __version_tuple__ = version_tuple = (10, 2, 1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: odxtools
3
- Version: 10.2.0
3
+ Version: 10.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>
@@ -107,7 +107,7 @@ odxtools/negoutputparam.py,sha256=-uP34wmnBYz_wwxJDRWYsqMIVqRdrBpjhw15Ctyvs0E,12
107
107
  odxtools/obd.py,sha256=hjTvs7DD6_JngNOH_b362L7X6zcpNsmoY6d8DDxQoZI,1829
108
108
  odxtools/odxcategory.py,sha256=hZ3_BBJFA5cNVZ8Rd2vlsbEV_qU6zECXtUJ8H-mg6Fk,2664
109
109
  odxtools/odxdoccontext.py,sha256=QjdOp7jwtJVgyGwzPBH_a35xqdS24WJmlF6uNqLrp9U,460
110
- odxtools/odxlink.py,sha256=dg72A5i104f79dbStJb19zfQUMNODkQsC-JNMn7v7zM,10593
110
+ odxtools/odxlink.py,sha256=me0Y5yoXv6HsFGPQjo99hSt1GxpzllJlwIy0nhgpcdQ,10807
111
111
  odxtools/odxtypes.py,sha256=uhlKergX9Mutax_gf-bsyf_LJwF-t18HoYt2OXcimf0,8208
112
112
  odxtools/outputparam.py,sha256=oijoIXChUY7Jwds4x7OeIiyp5VTEivi61Sj5oVPjQMY,1477
113
113
  odxtools/ownident.py,sha256=beX1glfBfG-s9hMD6qT_cGMZLln7LYt2X8uY4R_-_Zo,1146
@@ -154,7 +154,7 @@ odxtools/statetransitionref.py,sha256=j5vmWpTF4RsgS75GTLkAIgGcbkG3wtgPvIthIQOBjM
154
154
  odxtools/staticfield.py,sha256=pVJNbdtO9-Vnf4atzpmLWzcHAII6sXnQmwBsVZ36Y3E,4477
155
155
  odxtools/structure.py,sha256=LsGejNUEyXOe1tI69lAPzxpLnX_GKDd4pwGcLvV40Yw,844
156
156
  odxtools/subcomponent.py,sha256=PO-Fi2qUS3IX7nPJyCciCiPUo-Vk4g3eznETTb_FrkE,4752
157
- odxtools/subcomponentparamconnector.py,sha256=TY8bfwlwYDi2mD2qqgNMN6PXShUZPzO-ep0gxgnLesQ,3964
157
+ odxtools/subcomponentparamconnector.py,sha256=Oqt5jFXbjOtAfZFcYskiARyxW6-mLk58PAOb0WvOzsE,3960
158
158
  odxtools/subcomponentpattern.py,sha256=G7dAAJD_cN1QrKRgl6UTIj_o9trbkounJ-IHZGtau2k,1404
159
159
  odxtools/swvariable.py,sha256=3OsXxWhKFomNPd6ASvgMr67CB7G0Sm3tBQg1fMTc7C4,679
160
160
  odxtools/table.py,sha256=7JCxtclipAbbwvsJ9Gy1jYMU9OdYoAYkvjm2VpqeVWk,4978
@@ -178,7 +178,7 @@ odxtools/validtype.py,sha256=exe5OIqoIWgsgEm1t54pyk-U2m61DgBWI0Gew8rNYFc,194
178
178
  odxtools/variablegroup.py,sha256=o2hHupTvYSAJgOK8YOG9-VjXZpOMQ9vp9Sssu6RvN6E,834
179
179
  odxtools/variantmatcher.py,sha256=5Dad4WHHkQT6US8tnFoXxqO4wo2yGhCez_EpmnljfX4,8289
180
180
  odxtools/variantpattern.py,sha256=Mt2iXrlHvdo2EZtWq_tTqOqD-MxsaMUumQLcOpTkFR8,1406
181
- odxtools/version.py,sha256=SZPRsJtjzCo-uujoU7-r_xkH3WFdZZh3Z80jCyCOJVg,513
181
+ odxtools/version.py,sha256=n-m0uzfNiaOnNZiQObPm6Fv9pffKHdK3pGoS5Y0ivH8,513
182
182
  odxtools/writepdxfile.py,sha256=I1FHKYUrUSir8XQB6Q-a0pA3Xfzem7GkM9pPnwUi7ME,9141
183
183
  odxtools/xdoc.py,sha256=Ymir_UH5dz8h-T4_kVCm2M_zyip7lDSnQ_wJvu-BCAA,1463
184
184
  odxtools/cli/__init__.py,sha256=T7ano_FIyzBASxYpmcA5VJXU5bQLIy_Qk0HE_SDKelY,106
@@ -216,18 +216,18 @@ odxtools/compumethods/tabintpcompumethod.py,sha256=Jb57a3xKtFreZmwDdvKbmPQ4Dg0fR
216
216
  odxtools/compumethods/texttablecompumethod.py,sha256=0aLSPsOsb3XgP1aj13CkpDfSi4PIZID6ErnAXiQgtZo,5957
217
217
  odxtools/diaglayers/basevariant.py,sha256=urQiHezdLQ2TM6X8LfPTQHIMELxAP_CKFiHxZI3JKzQ,4660
218
218
  odxtools/diaglayers/basevariantraw.py,sha256=y7yujzGooVuPuX0bAtCNcvSCSrKQObgmyNABI5Pypyc,4994
219
- odxtools/diaglayers/diaglayer.py,sha256=iGeEm59oHMe5FTxo1yhakKLILe9HmfRNMAwDv4UBV9c,16279
219
+ odxtools/diaglayers/diaglayer.py,sha256=KXF9R6ZmtYOn52VEHt-Yvl72D8eODqV0LVl49TsQKyw,16992
220
220
  odxtools/diaglayers/diaglayerraw.py,sha256=cS3w4FcjuTPZ06wyfXPRrI99X_zsx9vjbaDwFCyGzn4,13059
221
221
  odxtools/diaglayers/diaglayertype.py,sha256=o1Vz6ycSqkDGNxNErcqpXUs0SAk9c4NSmxPDGWlufOE,1316
222
222
  odxtools/diaglayers/ecushareddata.py,sha256=2mg6bS50oSJlpqYDgRfXqPbkZHSvY4fFF3b_VwBhPwE,3336
223
223
  odxtools/diaglayers/ecushareddataraw.py,sha256=APSi5JRkzA7kcpz5ihKva4Gskh0NNxwnS3RK4G3H6I0,3376
224
- odxtools/diaglayers/ecuvariant.py,sha256=4OMGAN3u9QEcfnpluKPMJLImOnY_QWzq685CrTCVDgw,4878
224
+ odxtools/diaglayers/ecuvariant.py,sha256=bZsG2QEwwZsThb2jylYE52zS6PEep2SQwP6xx-V_N_g,4732
225
225
  odxtools/diaglayers/ecuvariantraw.py,sha256=wlyLX50zYx3Ai7AADU6G4MCnH0kIkj9CzPTagT7TSUA,4993
226
226
  odxtools/diaglayers/functionalgroup.py,sha256=unQkoHGdRHCQi-ENJYxCbhGtuWLWD0UpDHAe1hNLKQA,4108
227
227
  odxtools/diaglayers/functionalgroupraw.py,sha256=QNtJfMXWwHXxNRCnszbAjN8Y615Vw4neRA1RrfIzv3M,3992
228
- odxtools/diaglayers/hierarchyelement.py,sha256=m-m7IT6rovNDjm3K-SqKiFK1q1680KUs6rQsvOYf17s,36420
228
+ odxtools/diaglayers/hierarchyelement.py,sha256=mfjfj0X3mnDCx550YkJu8OEtq4FcP1HbpRDEbxnpktY,36420
229
229
  odxtools/diaglayers/hierarchyelementraw.py,sha256=WKA6YlH11Wrc1KUQXrJYBeDIe-DrKvEFWyjEtkjaj_c,2049
230
- odxtools/diaglayers/protocol.py,sha256=Cfu3LNy259R-IP9n_hFVOX6lWbX3B_-UkAg7RYjKcjs,2066
230
+ odxtools/diaglayers/protocol.py,sha256=1Bc5ICvihzjjitwZ3x2N9-4-N_gyuvJwQTiWUm6O7V0,2463
231
231
  odxtools/diaglayers/protocolraw.py,sha256=qWlpec5NfjFuBOb-5phStJXelRbwl8yFGpnI1L68moI,3199
232
232
  odxtools/parameters/codedconstparameter.py,sha256=v7f_4FNx8eRWeOD8Y4Hx3LBhNCP_4e5AqOfoy3hyB7o,3907
233
233
  odxtools/parameters/createanyparameter.py,sha256=fMkf0HJ6RHzOvu6Ib6vQIMBkdCblKtZ4K-PG0lthwWU,2512
@@ -314,9 +314,9 @@ odxtools/templates/macros/printStructure.xml.jinja2,sha256=M8p82SlgKaDk6nJA-0wr6
314
314
  odxtools/templates/macros/printSubComponent.xml.jinja2,sha256=R3DxnK6NysUQL84uf2kGYMoF_VVym2l7H-J0JZ1uLKc,3416
315
315
  odxtools/templates/macros/printTable.xml.jinja2,sha256=iMmq4tSFl_nc44HNdFqzk4XLYjrbQ73cKm7kMVdRLmc,3336
316
316
  odxtools/templates/macros/printUnitSpec.xml.jinja2,sha256=pgZdrPdWi3OGtDIFNpEDz_TQs103uuRQoDdmGkNffOM,2878
317
- odxtools-10.2.0.dist-info/licenses/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
318
- odxtools-10.2.0.dist-info/METADATA,sha256=NqMX_3pAHCVaO9ZR66tv5_eABeOKBXaN1lrHfFdFHCY,44025
319
- odxtools-10.2.0.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
320
- odxtools-10.2.0.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
321
- odxtools-10.2.0.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
322
- odxtools-10.2.0.dist-info/RECORD,,
317
+ odxtools-10.2.1.dist-info/licenses/LICENSE,sha256=NeGPFQdTa6EKeON3aShVlPAIquJnbbiOfj0suz6rzyQ,1074
318
+ odxtools-10.2.1.dist-info/METADATA,sha256=NMsvH9So436uodI5M5POSIQNee3Y1Y9pxw0WUbVuvoA,44025
319
+ odxtools-10.2.1.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
320
+ odxtools-10.2.1.dist-info/entry_points.txt,sha256=_sBDzuNoT8LbbCjfc-OJiUt5WPrtOq_x-rr9txhrPjY,53
321
+ odxtools-10.2.1.dist-info/top_level.txt,sha256=pdS02kE5ZdgsaBRZDpX3NBFlaSx3zotsqX4E4V6tXEI,9
322
+ odxtools-10.2.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5