Skip to content

Commit ea29e46

Browse files
committed
pass context to from_et()
1 parent 3ecba9c commit ea29e46

File tree

157 files changed

+836
-805
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+836
-805
lines changed

examples/somersaultecu.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from typing import Any
99
from xml.etree import ElementTree
1010

11+
from packaging.version import Version
12+
1113
import odxtools.uds as uds
1214
from odxtools.additionalaudience import AdditionalAudience
1315
from odxtools.admindata import AdminData
@@ -44,6 +46,7 @@
4446
from odxtools.functionalclass import FunctionalClass
4547
from odxtools.modification import Modification
4648
from odxtools.nameditemlist import NamedItemList
49+
from odxtools.odxdoccontext import OdxDocContext
4750
from odxtools.odxlink import DocType, OdxDocFragment, OdxLinkId, OdxLinkRef
4851
from odxtools.odxtypes import DataType
4952
from odxtools.parameters.codedconstparameter import CodedConstParameter
@@ -76,6 +79,8 @@
7679
from odxtools.unitspec import UnitSpec
7780
from odxtools.xdoc import XDoc
7881

82+
ODX_VERSION = Version("2.2.0")
83+
7984

8085
class SomersaultSID(IntEnum):
8186
"""The Somersault-ECU specific service IDs.
@@ -3020,14 +3025,14 @@ class SomersaultSID(IntEnum):
30203025
odx_cs_root = ElementTree.parse(odx_cs_dir / odx_cs_filename).getroot()
30213026
subset = odx_cs_root.find("COMPARAM-SUBSET")
30223027
if subset is not None:
3023-
comparam_subsets.append(ComparamSubset.from_et(subset, []))
3028+
comparam_subsets.append(ComparamSubset.from_et(subset, OdxDocContext(ODX_VERSION, [])))
30243029

30253030
comparam_specs = []
30263031
for odx_c_filename in ("UDSOnCAN_CPS.odx-c",):
30273032
odx_c_root = ElementTree.parse(odx_cs_dir / odx_c_filename).getroot()
30283033
subset = odx_c_root.find("COMPARAM-SPEC")
30293034
if subset is not None:
3030-
comparam_specs.append(ComparamSpec.from_et(subset, []))
3035+
comparam_specs.append(ComparamSpec.from_et(subset, OdxDocContext(ODX_VERSION, [])))
30313036

30323037
# create a database object
30333038
database = Database()

odxtools/additionalaudience.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
from xml.etree import ElementTree
55

66
from .element import IdentifiableElement
7-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
7+
from .odxdoccontext import OdxDocContext
8+
from .odxlink import OdxLinkDatabase, OdxLinkId
89
from .snrefcontext import SnRefContext
910
from .utils import dataclass_fields_asdict
1011

@@ -16,9 +17,8 @@ class AdditionalAudience(IdentifiableElement):
1617
"""
1718

1819
@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))
2222

2323
return AdditionalAudience(**kwargs)
2424

odxtools/admindata.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from .companydocinfo import CompanyDocInfo
77
from .docrevision import DocRevision
8-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
8+
from .odxdoccontext import OdxDocContext
9+
from .odxlink import OdxLinkDatabase, OdxLinkId
910
from .snrefcontext import SnRefContext
1011

1112

@@ -17,20 +18,20 @@ class AdminData:
1718

1819
@staticmethod
1920
def from_et(et_element: ElementTree.Element | None,
20-
doc_frags: list[OdxDocFragment]) -> Optional["AdminData"]:
21+
context: OdxDocContext) -> Optional["AdminData"]:
2122

2223
if et_element is None:
2324
return None
2425

2526
language = et_element.findtext("LANGUAGE")
2627

2728
company_doc_infos = [
28-
CompanyDocInfo.from_et(cdi_elem, doc_frags)
29+
CompanyDocInfo.from_et(cdi_elem, context)
2930
for cdi_elem in et_element.iterfind("COMPANY-DOC-INFOS/COMPANY-DOC-INFO")
3031
]
3132

3233
doc_revisions = [
33-
DocRevision.from_et(dr_elem, doc_frags)
34+
DocRevision.from_et(dr_elem, context)
3435
for dr_elem in et_element.iterfind("DOC-REVISIONS/DOC-REVISION")
3536
]
3637

odxtools/audience.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from .additionalaudience import AdditionalAudience
77
from .nameditemlist import NamedItemList
8-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
8+
from .odxdoccontext import OdxDocContext
9+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
910
from .odxtypes import odxstr_to_bool
1011
from .snrefcontext import SnRefContext
1112

@@ -50,15 +51,14 @@ def disabled_audiences(self) -> NamedItemList[AdditionalAudience]:
5051
return self._disabled_audiences
5152

5253
@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":
5455

5556
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")
5959
]
6060
disabled_audience_refs = [
61-
OdxLinkRef.from_et(ref, doc_frags)
61+
OdxLinkRef.from_et(ref, context)
6262
for ref in et_element.iterfind("DISABLED-AUDIENCE-REFS/"
6363
"DISABLED-AUDIENCE-REF")
6464
]

odxtools/basecomparam.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from .element import IdentifiableElement
77
from .exceptions import odxraise, odxrequire
8-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
8+
from .odxdoccontext import OdxDocContext
9+
from .odxlink import OdxLinkDatabase, OdxLinkId
910
from .snrefcontext import SnRefContext
1011
from .standardizationlevel import StandardizationLevel
1112
from .usage import Usage
@@ -20,8 +21,8 @@ class BaseComparam(IdentifiableElement):
2021
cpusage: Usage | None # Required in ODX 2.2, missing in ODX 2.0
2122

2223
@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))
2526

2627
param_class = odxrequire(et_element.attrib.get("PARAM-CLASS"))
2728

odxtools/basevariantpattern.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from .exceptions import odxassert
88
from .matchingbasevariantparameter import MatchingBaseVariantParameter
99
from .matchingparameter import MatchingParameter
10-
from .odxlink import OdxDocFragment
10+
from .odxdoccontext import OdxDocContext
1111
from .variantpattern import VariantPattern
1212

1313

@@ -19,11 +19,10 @@ class BaseVariantPattern(VariantPattern):
1919
matching_base_variant_parameters: list[MatchingBaseVariantParameter]
2020

2121
@staticmethod
22-
def from_et(et_element: ElementTree.Element,
23-
doc_frags: list[OdxDocFragment]) -> "BaseVariantPattern":
22+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "BaseVariantPattern":
2423

2524
matching_base_variant_parameters = [
26-
MatchingBaseVariantParameter.from_et(mbvp_el, doc_frags)
25+
MatchingBaseVariantParameter.from_et(mbvp_el, context)
2726
for mbvp_el in et_element.iterfind("MATCHING-BASE-VARIANT-PARAMETERS/"
2827
"MATCHING-BASE-VARIANT-PARAMETER")
2928
]

odxtools/basicstructure.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
from .encodestate import EncodeState
1515
from .exceptions import DecodeError, odxraise
1616
from .nameditemlist import NamedItemList
17-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
17+
from .odxdoccontext import OdxDocContext
18+
from .odxlink import OdxLinkDatabase, OdxLinkId
1819
from .odxtypes import ParameterValue
1920
from .parameters.createanyparameter import create_any_parameter_from_et
2021
from .parameters.parameter import Parameter
@@ -42,15 +43,14 @@ def free_parameters(self) -> list[Parameter]:
4243
return composite_codec_get_free_parameters(self)
4344

4445
@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":
4747
"""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))
4949

5050
byte_size_str = et_element.findtext("BYTE-SIZE")
5151
byte_size = int(byte_size_str) if byte_size_str is not None else None
5252
parameters = NamedItemList([
53-
create_any_parameter_from_et(et_parameter, doc_frags)
53+
create_any_parameter_from_et(et_parameter, context)
5454
for et_parameter in et_element.iterfind("PARAMS/PARAM")
5555
])
5656

odxtools/commrelation.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
from .diagcomm import DiagComm
1010
from .diagservice import DiagService
1111
from .exceptions import OdxWarning, odxraise, odxrequire
12-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef, resolve_snref
12+
from .odxdoccontext import OdxDocContext
13+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef, resolve_snref
1314
from .parameters.parameter import Parameter
1415
from .snrefcontext import SnRefContext
1516

@@ -46,11 +47,11 @@ def value_type(self) -> CommRelationValueType:
4647
return self.value_type_raw
4748

4849
@staticmethod
49-
def from_et(et_element: ElementTree.Element, doc_frags: list[OdxDocFragment]) -> "CommRelation":
50-
description = Description.from_et(et_element.find("DESC"), doc_frags)
50+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "CommRelation":
51+
description = Description.from_et(et_element.find("DESC"), context)
5152
relation_type = odxrequire(et_element.findtext("RELATION-TYPE"))
5253

53-
diag_comm_ref = OdxLinkRef.from_et(et_element.find("DIAG-COMM-REF"), doc_frags)
54+
diag_comm_ref = OdxLinkRef.from_et(et_element.find("DIAG-COMM-REF"), context)
5455
diag_comm_snref = None
5556
if (diag_comm_snref_elem := et_element.find("DIAG-COMM-SNREF")) is not None:
5657
diag_comm_snref = odxrequire(diag_comm_snref_elem.get("SHORT-NAME"))

odxtools/companydata.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from .element import IdentifiableElement
88
from .exceptions import odxrequire
99
from .nameditemlist import NamedItemList
10-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
10+
from .odxdoccontext import OdxDocContext
11+
from .odxlink import OdxLinkDatabase, OdxLinkId
1112
from .snrefcontext import SnRefContext
1213
from .teammember import TeamMember
1314
from .utils import dataclass_fields_asdict
@@ -20,21 +21,20 @@ class CompanyData(IdentifiableElement):
2021
company_specific_info: CompanySpecificInfo | None
2122

2223
@staticmethod
23-
def from_et(et_element: ElementTree.Element, doc_frags: list[OdxDocFragment]) -> "CompanyData":
24+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "CompanyData":
2425

25-
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, doc_frags))
26+
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, context))
2627

2728
roles = []
2829
if (roles_elem := et_element.find("ROLES")) is not None:
2930
roles = [odxrequire(role.text) for role in roles_elem.iterfind("ROLE")]
3031
team_members = [
31-
TeamMember.from_et(tm, doc_frags)
32+
TeamMember.from_et(tm, context)
3233
for tm in et_element.iterfind("TEAM-MEMBERS/TEAM-MEMBER")
3334
]
3435
company_specific_info = None
3536
if (company_specific_info_elem := et_element.find("COMPANY-SPECIFIC-INFO")) is not None:
36-
company_specific_info = CompanySpecificInfo.from_et(company_specific_info_elem,
37-
doc_frags)
37+
company_specific_info = CompanySpecificInfo.from_et(company_specific_info_elem, context)
3838

3939
return CompanyData(
4040
roles=roles,

odxtools/companydocinfo.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from .companydata import CompanyData
77
from .exceptions import odxrequire
8-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
8+
from .odxdoccontext import OdxDocContext
9+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
910
from .snrefcontext import SnRefContext
1011
from .specialdatagroup import SpecialDataGroup
1112
from .teammember import TeamMember
@@ -27,16 +28,13 @@ def team_member(self) -> TeamMember | None:
2728
return self._team_member
2829

2930
@staticmethod
30-
def from_et(et_element: ElementTree.Element,
31-
doc_frags: list[OdxDocFragment]) -> "CompanyDocInfo":
31+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "CompanyDocInfo":
3232
# the company data reference is mandatory
3333
company_data_ref = odxrequire(
34-
OdxLinkRef.from_et(et_element.find("COMPANY-DATA-REF"), doc_frags))
35-
team_member_ref = OdxLinkRef.from_et(et_element.find("TEAM-MEMBER-REF"), doc_frags)
34+
OdxLinkRef.from_et(et_element.find("COMPANY-DATA-REF"), context))
35+
team_member_ref = OdxLinkRef.from_et(et_element.find("TEAM-MEMBER-REF"), context)
3636
doc_label = et_element.findtext("DOC-LABEL")
37-
sdgs = [
38-
SpecialDataGroup.from_et(sdge, doc_frags) for sdge in et_element.iterfind("SDGS/SDG")
39-
]
37+
sdgs = [SpecialDataGroup.from_et(sdge, context) for sdge in et_element.iterfind("SDGS/SDG")]
4038

4139
return CompanyDocInfo(
4240
company_data_ref=company_data_ref,

odxtools/companyrevisioninfo.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from .companydata import CompanyData
77
from .exceptions import odxrequire
8-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
8+
from .odxdoccontext import OdxDocContext
9+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
910
from .snrefcontext import SnRefContext
1011

1112

@@ -20,11 +21,10 @@ def company_data(self) -> CompanyData:
2021
return self._company_data
2122

2223
@staticmethod
23-
def from_et(et_element: ElementTree.Element,
24-
doc_frags: list[OdxDocFragment]) -> "CompanyRevisionInfo":
24+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "CompanyRevisionInfo":
2525

2626
company_data_ref = odxrequire(
27-
OdxLinkRef.from_et(et_element.find("COMPANY-DATA-REF"), doc_frags))
27+
OdxLinkRef.from_et(et_element.find("COMPANY-DATA-REF"), context))
2828
revision_label = et_element.findtext("REVISION-LABEL")
2929
state = et_element.findtext("STATE")
3030

odxtools/companyspecificinfo.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
from typing import Any
44
from xml.etree import ElementTree
55

6-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId
6+
from .odxdoccontext import OdxDocContext
7+
from .odxlink import OdxLinkDatabase, OdxLinkId
78
from .relateddoc import RelatedDoc
89
from .snrefcontext import SnRefContext
910
from .specialdatagroup import SpecialDataGroup
@@ -15,16 +16,13 @@ class CompanySpecificInfo:
1516
sdgs: list[SpecialDataGroup]
1617

1718
@staticmethod
18-
def from_et(et_element: ElementTree.Element,
19-
doc_frags: list[OdxDocFragment]) -> "CompanySpecificInfo":
19+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "CompanySpecificInfo":
2020
related_docs = [
21-
RelatedDoc.from_et(rd, doc_frags)
21+
RelatedDoc.from_et(rd, context)
2222
for rd in et_element.iterfind("RELATED-DOCS/RELATED-DOC")
2323
]
2424

25-
sdgs = [
26-
SpecialDataGroup.from_et(sdge, doc_frags) for sdge in et_element.iterfind("SDGS/SDG")
27-
]
25+
sdgs = [SpecialDataGroup.from_et(sdge, context) for sdge in et_element.iterfind("SDGS/SDG")]
2826

2927
return CompanySpecificInfo(related_docs=related_docs, sdgs=sdgs)
3028

odxtools/comparam.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from .basecomparam import BaseComparam
77
from .dataobjectproperty import DataObjectProperty
88
from .exceptions import odxrequire
9-
from .odxlink import OdxDocFragment, OdxLinkDatabase, OdxLinkId, OdxLinkRef
9+
from .odxdoccontext import OdxDocContext
10+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
1011
from .odxtypes import AtomicOdxType
1112
from .snrefcontext import SnRefContext
1213
from .utils import dataclass_fields_asdict
@@ -27,11 +28,11 @@ def dop(self) -> DataObjectProperty:
2728
return self._dop
2829

2930
@staticmethod
30-
def from_et(et_element: ElementTree.Element, doc_frags: list[OdxDocFragment]) -> "Comparam":
31-
kwargs = dataclass_fields_asdict(BaseComparam.from_et(et_element, doc_frags))
31+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "Comparam":
32+
kwargs = dataclass_fields_asdict(BaseComparam.from_et(et_element, context))
3233

3334
physical_default_value_raw = odxrequire(et_element.findtext("PHYSICAL-DEFAULT-VALUE"))
34-
dop_ref = odxrequire(OdxLinkRef.from_et(et_element.find("DATA-OBJECT-PROP-REF"), doc_frags))
35+
dop_ref = odxrequire(OdxLinkRef.from_et(et_element.find("DATA-OBJECT-PROP-REF"), context))
3536

3637
return Comparam(
3738
dop_ref=dop_ref, physical_default_value_raw=physical_default_value_raw, **kwargs)

0 commit comments

Comments
 (0)