odxtools 10.0.0__py3-none-any.whl → 10.1.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.
- odxtools/additionalaudience.py +5 -5
- odxtools/admindata.py +10 -9
- odxtools/audience.py +15 -15
- odxtools/basecomparam.py +7 -6
- odxtools/basevariantpattern.py +7 -7
- odxtools/basicstructure.py +9 -9
- odxtools/cli/_print_utils.py +1 -1
- odxtools/cli/browse.py +1 -1
- odxtools/cli/compare.py +143 -170
- odxtools/cli/list.py +1 -1
- odxtools/commrelation.py +14 -13
- odxtools/companydata.py +11 -11
- odxtools/companydocinfo.py +11 -13
- odxtools/companyrevisioninfo.py +7 -7
- odxtools/companyspecificinfo.py +9 -11
- odxtools/comparam.py +6 -5
- odxtools/comparaminstance.py +10 -10
- odxtools/comparamspec.py +8 -9
- odxtools/comparamsubset.py +14 -22
- odxtools/complexcomparam.py +10 -10
- odxtools/complexdop.py +1 -1
- odxtools/compositecodec.py +3 -3
- odxtools/compumethods/compucodecompumethod.py +4 -4
- odxtools/compumethods/compuconst.py +3 -3
- odxtools/compumethods/compudefaultvalue.py +2 -2
- odxtools/compumethods/compuinternaltophys.py +11 -10
- odxtools/compumethods/compumethod.py +8 -7
- odxtools/compumethods/compuphystointernal.py +11 -10
- odxtools/compumethods/compurationalcoeffs.py +6 -6
- odxtools/compumethods/compuscale.py +14 -14
- odxtools/compumethods/createanycompumethod.py +12 -12
- odxtools/compumethods/identicalcompumethod.py +4 -4
- odxtools/compumethods/limit.py +8 -8
- odxtools/compumethods/linearcompumethod.py +4 -4
- odxtools/compumethods/linearsegment.py +8 -8
- odxtools/compumethods/ratfunccompumethod.py +4 -4
- odxtools/compumethods/ratfuncsegment.py +8 -8
- odxtools/compumethods/scalelinearcompumethod.py +5 -5
- odxtools/compumethods/scaleratfunccompumethod.py +4 -4
- odxtools/compumethods/tabintpcompumethod.py +12 -12
- odxtools/compumethods/texttablecompumethod.py +4 -4
- odxtools/createanycomparam.py +4 -4
- odxtools/createanydiagcodedtype.py +7 -7
- odxtools/database.py +28 -26
- odxtools/dataobjectproperty.py +15 -16
- odxtools/description.py +7 -7
- odxtools/determinenumberofitems.py +6 -5
- odxtools/diagcodedtype.py +6 -6
- odxtools/diagcomm.py +26 -27
- odxtools/diagdatadictionaryspec.py +34 -34
- odxtools/diaglayercontainer.py +32 -31
- odxtools/diaglayers/basevariant.py +5 -4
- odxtools/diaglayers/basevariantraw.py +18 -19
- odxtools/diaglayers/diaglayer.py +5 -4
- odxtools/diaglayers/diaglayerraw.py +39 -48
- odxtools/diaglayers/ecushareddata.py +6 -6
- odxtools/diaglayers/ecushareddataraw.py +11 -12
- odxtools/diaglayers/ecuvariant.py +5 -4
- odxtools/diaglayers/ecuvariantraw.py +17 -18
- odxtools/diaglayers/functionalgroup.py +5 -5
- odxtools/diaglayers/functionalgroupraw.py +13 -14
- odxtools/diaglayers/hierarchyelement.py +9 -9
- odxtools/diaglayers/hierarchyelementraw.py +8 -9
- odxtools/diaglayers/protocol.py +4 -4
- odxtools/diaglayers/protocolraw.py +10 -11
- odxtools/diagnostictroublecode.py +12 -14
- odxtools/diagservice.py +19 -18
- odxtools/diagvariable.py +19 -20
- odxtools/docrevision.py +14 -13
- odxtools/dopbase.py +10 -11
- odxtools/dtcconnector.py +6 -5
- odxtools/dtcdop.py +15 -15
- odxtools/dynamicendmarkerfield.py +6 -6
- odxtools/dynamiclengthfield.py +6 -6
- odxtools/dyndefinedspec.py +7 -7
- odxtools/dynenddopref.py +7 -7
- odxtools/dyniddefmodeinfo.py +17 -17
- odxtools/ecuvariantpattern.py +6 -7
- odxtools/element.py +12 -12
- odxtools/endofpdufield.py +6 -7
- odxtools/envdataconnector.py +6 -6
- odxtools/environmentdata.py +7 -8
- odxtools/environmentdatadescription.py +13 -12
- odxtools/externalaccessmethod.py +4 -5
- odxtools/externaldoc.py +4 -4
- odxtools/field.py +12 -11
- odxtools/functionalclass.py +7 -7
- odxtools/inputparam.py +9 -8
- odxtools/internalconstr.py +10 -10
- odxtools/leadinglengthinfotype.py +5 -6
- odxtools/library.py +7 -6
- odxtools/linkeddtcdop.py +7 -6
- odxtools/matchingbasevariantparameter.py +5 -5
- odxtools/matchingparameter.py +6 -6
- odxtools/message.py +1 -1
- odxtools/minmaxlengthtype.py +6 -7
- odxtools/modification.py +5 -4
- odxtools/multiplexer.py +48 -12
- odxtools/multiplexercase.py +10 -10
- odxtools/multiplexerdefaultcase.py +8 -7
- odxtools/multiplexerswitchkey.py +6 -6
- odxtools/nameditemlist.py +1 -1
- odxtools/negoutputparam.py +6 -6
- odxtools/odxcategory.py +12 -24
- odxtools/odxdoccontext.py +16 -0
- odxtools/odxlink.py +11 -12
- odxtools/odxtypes.py +3 -3
- odxtools/outputparam.py +7 -6
- odxtools/parameters/codedconstparameter.py +6 -6
- odxtools/parameters/createanyparameter.py +15 -15
- odxtools/parameters/dynamicparameter.py +4 -5
- odxtools/parameters/lengthkeyparameter.py +6 -6
- odxtools/parameters/matchingrequestparameter.py +4 -4
- odxtools/parameters/nrcconstparameter.py +8 -8
- odxtools/parameters/parameter.py +12 -13
- odxtools/parameters/parameterwithdop.py +9 -9
- odxtools/parameters/physicalconstantparameter.py +5 -4
- odxtools/parameters/reservedparameter.py +4 -5
- odxtools/parameters/systemparameter.py +4 -5
- odxtools/parameters/tableentryparameter.py +6 -6
- odxtools/parameters/tablekeyparameter.py +12 -12
- odxtools/parameters/tablestructparameter.py +9 -9
- odxtools/parameters/valueparameter.py +6 -6
- odxtools/paramlengthinfotype.py +6 -7
- odxtools/parentref.py +12 -10
- odxtools/physicaldimension.py +12 -12
- odxtools/physicaltype.py +5 -5
- odxtools/posresponsesuppressible.py +11 -11
- odxtools/preconditionstateref.py +8 -8
- odxtools/progcode.py +9 -8
- odxtools/protstack.py +8 -7
- odxtools/relateddiagcommref.py +5 -5
- odxtools/relateddoc.py +8 -7
- odxtools/request.py +12 -13
- odxtools/response.py +12 -13
- odxtools/scaleconstr.py +8 -8
- odxtools/singleecujob.py +14 -13
- odxtools/snrefcontext.py +1 -1
- odxtools/specialdata.py +6 -5
- odxtools/specialdatagroup.py +13 -13
- odxtools/specialdatagroupcaption.py +5 -4
- odxtools/standardlengthtype.py +5 -13
- odxtools/state.py +5 -4
- odxtools/statechart.py +10 -9
- odxtools/statemachine.py +2 -2
- odxtools/statetransition.py +7 -7
- odxtools/statetransitionref.py +11 -11
- odxtools/staticfield.py +5 -4
- odxtools/structure.py +5 -5
- odxtools/subcomponent.py +18 -16
- odxtools/subcomponentparamconnector.py +8 -7
- odxtools/subcomponentpattern.py +7 -7
- odxtools/swvariable.py +6 -6
- odxtools/table.py +20 -21
- odxtools/tablediagcommconnector.py +7 -6
- odxtools/tablerow.py +57 -36
- odxtools/tablerowconnector.py +6 -6
- odxtools/teammember.py +14 -13
- odxtools/templates/macros/printParentRef.xml.jinja2 +3 -1
- odxtools/text.py +4 -4
- odxtools/unit.py +9 -8
- odxtools/unitgroup.py +9 -8
- odxtools/unitspec.py +15 -16
- odxtools/variablegroup.py +4 -5
- odxtools/variantpattern.py +3 -4
- odxtools/version.py +2 -2
- odxtools/writepdxfile.py +0 -19
- odxtools/xdoc.py +11 -10
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/METADATA +1 -1
- odxtools-10.1.1.dist-info/RECORD +265 -0
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/WHEEL +1 -1
- odxtools-10.0.0.dist-info/RECORD +0 -264
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/entry_points.txt +0 -0
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/licenses/LICENSE +0 -0
- {odxtools-10.0.0.dist-info → odxtools-10.1.1.dist-info}/top_level.txt +0 -0
odxtools/additionalaudience.py
CHANGED
@@ -4,21 +4,21 @@ from typing import Any
|
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .element import IdentifiableElement
|
7
|
-
from .
|
7
|
+
from .odxdoccontext import OdxDocContext
|
8
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId
|
8
9
|
from .snrefcontext import SnRefContext
|
9
10
|
from .utils import dataclass_fields_asdict
|
10
11
|
|
11
12
|
|
12
|
-
@dataclass
|
13
|
+
@dataclass(kw_only=True)
|
13
14
|
class AdditionalAudience(IdentifiableElement):
|
14
15
|
"""
|
15
16
|
Corresponds to ADDITIONAL-AUDIENCE.
|
16
17
|
"""
|
17
18
|
|
18
19
|
@staticmethod
|
19
|
-
def from_et(et_element: ElementTree.Element,
|
20
|
-
|
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))
|
22
22
|
|
23
23
|
return AdditionalAudience(**kwargs)
|
24
24
|
|
odxtools/admindata.py
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
|
-
from dataclasses import dataclass
|
2
|
+
from dataclasses import dataclass, field
|
3
3
|
from typing import Any, Optional
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .companydocinfo import CompanyDocInfo
|
7
7
|
from .docrevision import DocRevision
|
8
|
-
from .
|
8
|
+
from .odxdoccontext import OdxDocContext
|
9
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId
|
9
10
|
from .snrefcontext import SnRefContext
|
10
11
|
|
11
12
|
|
12
|
-
@dataclass
|
13
|
+
@dataclass(kw_only=True)
|
13
14
|
class AdminData:
|
14
|
-
language: str | None
|
15
|
-
company_doc_infos: list[CompanyDocInfo]
|
16
|
-
doc_revisions: list[DocRevision]
|
15
|
+
language: str | None = None
|
16
|
+
company_doc_infos: list[CompanyDocInfo] = field(default_factory=list)
|
17
|
+
doc_revisions: list[DocRevision] = field(default_factory=list)
|
17
18
|
|
18
19
|
@staticmethod
|
19
20
|
def from_et(et_element: ElementTree.Element | None,
|
20
|
-
|
21
|
+
context: OdxDocContext) -> Optional["AdminData"]:
|
21
22
|
|
22
23
|
if et_element is None:
|
23
24
|
return None
|
@@ -25,12 +26,12 @@ class AdminData:
|
|
25
26
|
language = et_element.findtext("LANGUAGE")
|
26
27
|
|
27
28
|
company_doc_infos = [
|
28
|
-
CompanyDocInfo.from_et(cdi_elem,
|
29
|
+
CompanyDocInfo.from_et(cdi_elem, context)
|
29
30
|
for cdi_elem in et_element.iterfind("COMPANY-DOC-INFOS/COMPANY-DOC-INFO")
|
30
31
|
]
|
31
32
|
|
32
33
|
doc_revisions = [
|
33
|
-
DocRevision.from_et(dr_elem,
|
34
|
+
DocRevision.from_et(dr_elem, context)
|
34
35
|
for dr_elem in et_element.iterfind("DOC-REVISIONS/DOC-REVISION")
|
35
36
|
]
|
36
37
|
|
odxtools/audience.py
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
|
-
from dataclasses import dataclass
|
2
|
+
from dataclasses import dataclass, field
|
3
3
|
from typing import Any
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
6
6
|
from .additionalaudience import AdditionalAudience
|
7
7
|
from .nameditemlist import NamedItemList
|
8
|
-
from .
|
8
|
+
from .odxdoccontext import OdxDocContext
|
9
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId, OdxLinkRef
|
9
10
|
from .odxtypes import odxstr_to_bool
|
10
11
|
from .snrefcontext import SnRefContext
|
11
12
|
|
12
13
|
|
13
|
-
@dataclass
|
14
|
+
@dataclass(kw_only=True)
|
14
15
|
class Audience:
|
15
|
-
enabled_audience_refs: list[OdxLinkRef]
|
16
|
-
disabled_audience_refs: list[OdxLinkRef]
|
16
|
+
enabled_audience_refs: list[OdxLinkRef] = field(default_factory=list)
|
17
|
+
disabled_audience_refs: list[OdxLinkRef] = field(default_factory=list)
|
17
18
|
|
18
|
-
is_supplier_raw: bool | None
|
19
|
-
is_development_raw: bool | None
|
20
|
-
is_manufacturing_raw: bool | None
|
21
|
-
is_aftersales_raw: bool | None
|
22
|
-
is_aftermarket_raw: bool | None
|
19
|
+
is_supplier_raw: bool | None = None
|
20
|
+
is_development_raw: bool | None = None
|
21
|
+
is_manufacturing_raw: bool | None = None
|
22
|
+
is_aftersales_raw: bool | None = None
|
23
|
+
is_aftermarket_raw: bool | None = None
|
23
24
|
|
24
25
|
@property
|
25
26
|
def is_supplier(self) -> bool:
|
@@ -50,15 +51,14 @@ class Audience:
|
|
50
51
|
return self._disabled_audiences
|
51
52
|
|
52
53
|
@staticmethod
|
53
|
-
def from_et(et_element: ElementTree.Element,
|
54
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "Audience":
|
54
55
|
|
55
56
|
enabled_audience_refs = [
|
56
|
-
OdxLinkRef.from_et(ref,
|
57
|
-
|
58
|
-
"ENABLED-AUDIENCE-REF")
|
57
|
+
OdxLinkRef.from_et(ref, context) for ref in et_element.iterfind("ENABLED-AUDIENCE-REFS/"
|
58
|
+
"ENABLED-AUDIENCE-REF")
|
59
59
|
]
|
60
60
|
disabled_audience_refs = [
|
61
|
-
OdxLinkRef.from_et(ref,
|
61
|
+
OdxLinkRef.from_et(ref, context)
|
62
62
|
for ref in et_element.iterfind("DISABLED-AUDIENCE-REFS/"
|
63
63
|
"DISABLED-AUDIENCE-REF")
|
64
64
|
]
|
odxtools/basecomparam.py
CHANGED
@@ -5,23 +5,24 @@ from xml.etree import ElementTree
|
|
5
5
|
|
6
6
|
from .element import IdentifiableElement
|
7
7
|
from .exceptions import odxraise, odxrequire
|
8
|
-
from .
|
8
|
+
from .odxdoccontext import OdxDocContext
|
9
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId
|
9
10
|
from .snrefcontext import SnRefContext
|
10
11
|
from .standardizationlevel import StandardizationLevel
|
11
12
|
from .usage import Usage
|
12
13
|
from .utils import dataclass_fields_asdict
|
13
14
|
|
14
15
|
|
15
|
-
@dataclass
|
16
|
+
@dataclass(kw_only=True)
|
16
17
|
class BaseComparam(IdentifiableElement):
|
17
18
|
param_class: str
|
18
19
|
cptype: StandardizationLevel
|
19
|
-
display_level: int | None
|
20
|
-
cpusage: Usage | None # Required in ODX 2.2, missing in ODX 2.0
|
20
|
+
display_level: int | None = None
|
21
|
+
cpusage: Usage | None = None # Required in ODX 2.2, missing in ODX 2.0
|
21
22
|
|
22
23
|
@staticmethod
|
23
|
-
def from_et(et_element: ElementTree.Element,
|
24
|
-
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element,
|
24
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "BaseComparam":
|
25
|
+
kwargs = dataclass_fields_asdict(IdentifiableElement.from_et(et_element, context))
|
25
26
|
|
26
27
|
param_class = odxrequire(et_element.attrib.get("PARAM-CLASS"))
|
27
28
|
|
odxtools/basevariantpattern.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
|
-
from dataclasses import dataclass
|
2
|
+
from dataclasses import dataclass, field
|
3
3
|
from xml.etree import ElementTree
|
4
4
|
|
5
5
|
from typing_extensions import override
|
@@ -7,23 +7,23 @@ from typing_extensions import override
|
|
7
7
|
from .exceptions import odxassert
|
8
8
|
from .matchingbasevariantparameter import MatchingBaseVariantParameter
|
9
9
|
from .matchingparameter import MatchingParameter
|
10
|
-
from .
|
10
|
+
from .odxdoccontext import OdxDocContext
|
11
11
|
from .variantpattern import VariantPattern
|
12
12
|
|
13
13
|
|
14
|
-
@dataclass
|
14
|
+
@dataclass(kw_only=True)
|
15
15
|
class BaseVariantPattern(VariantPattern):
|
16
16
|
"""Base variant patterns are variant patterns used to identify the
|
17
17
|
base variant of an ECU.
|
18
18
|
"""
|
19
|
-
matching_base_variant_parameters: list[MatchingBaseVariantParameter]
|
19
|
+
matching_base_variant_parameters: list[MatchingBaseVariantParameter] = field(
|
20
|
+
default_factory=list)
|
20
21
|
|
21
22
|
@staticmethod
|
22
|
-
def from_et(et_element: ElementTree.Element,
|
23
|
-
doc_frags: list[OdxDocFragment]) -> "BaseVariantPattern":
|
23
|
+
def from_et(et_element: ElementTree.Element, context: OdxDocContext) -> "BaseVariantPattern":
|
24
24
|
|
25
25
|
matching_base_variant_parameters = [
|
26
|
-
MatchingBaseVariantParameter.from_et(mbvp_el,
|
26
|
+
MatchingBaseVariantParameter.from_et(mbvp_el, context)
|
27
27
|
for mbvp_el in et_element.iterfind("MATCHING-BASE-VARIANT-PARAMETERS/"
|
28
28
|
"MATCHING-BASE-VARIANT-PARAMETER")
|
29
29
|
]
|
odxtools/basicstructure.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
2
|
-
from dataclasses import dataclass
|
2
|
+
from dataclasses import dataclass, field
|
3
3
|
from typing import Any
|
4
4
|
from xml.etree import ElementTree
|
5
5
|
|
@@ -14,7 +14,8 @@ from .decodestate import DecodeState
|
|
14
14
|
from .encodestate import EncodeState
|
15
15
|
from .exceptions import DecodeError, odxraise
|
16
16
|
from .nameditemlist import NamedItemList
|
17
|
-
from .
|
17
|
+
from .odxdoccontext import OdxDocContext
|
18
|
+
from .odxlink import OdxLinkDatabase, OdxLinkId
|
18
19
|
from .odxtypes import ParameterValue
|
19
20
|
from .parameters.createanyparameter import create_any_parameter_from_et
|
20
21
|
from .parameters.parameter import Parameter
|
@@ -22,7 +23,7 @@ from .snrefcontext import SnRefContext
|
|
22
23
|
from .utils import dataclass_fields_asdict
|
23
24
|
|
24
25
|
|
25
|
-
@dataclass
|
26
|
+
@dataclass(kw_only=True)
|
26
27
|
class BasicStructure(ComplexDop):
|
27
28
|
"""Base class for structure-like objects
|
28
29
|
|
@@ -30,8 +31,8 @@ class BasicStructure(ComplexDop):
|
|
30
31
|
data objects. All structure-like objects adhere to the
|
31
32
|
`CompositeCodec` type protocol.
|
32
33
|
"""
|
33
|
-
byte_size: int | None
|
34
|
-
parameters: NamedItemList[Parameter]
|
34
|
+
byte_size: int | None = None
|
35
|
+
parameters: NamedItemList[Parameter] = field(default_factory=NamedItemList)
|
35
36
|
|
36
37
|
@property
|
37
38
|
def required_parameters(self) -> list[Parameter]:
|
@@ -42,15 +43,14 @@ class BasicStructure(ComplexDop):
|
|
42
43
|
return composite_codec_get_free_parameters(self)
|
43
44
|
|
44
45
|
@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":
|
47
47
|
"""Read a BASIC-STRUCTURE."""
|
48
|
-
kwargs = dataclass_fields_asdict(ComplexDop.from_et(et_element,
|
48
|
+
kwargs = dataclass_fields_asdict(ComplexDop.from_et(et_element, context))
|
49
49
|
|
50
50
|
byte_size_str = et_element.findtext("BYTE-SIZE")
|
51
51
|
byte_size = int(byte_size_str) if byte_size_str is not None else None
|
52
52
|
parameters = NamedItemList([
|
53
|
-
create_any_parameter_from_et(et_parameter,
|
53
|
+
create_any_parameter_from_et(et_parameter, context)
|
54
54
|
for et_parameter in et_element.iterfind("PARAMS/PARAM")
|
55
55
|
])
|
56
56
|
|
odxtools/cli/_print_utils.py
CHANGED
@@ -214,7 +214,7 @@ def extract_parameter_tabulation_data(parameters: list[Parameter]) -> RichTable:
|
|
214
214
|
value_column.append(str(param.coded_values))
|
215
215
|
value_type_column.append('coded values')
|
216
216
|
dop_column.append("")
|
217
|
-
elif isinstance(param, PhysicalConstantParameter
|
217
|
+
elif isinstance(param, (PhysicalConstantParameter, SystemParameter, ValueParameter)):
|
218
218
|
# this is a hack to make this routine work for parameters
|
219
219
|
# which reference DOPs of a type that a is not yet
|
220
220
|
# internalized. (all parameter objects of the tested types
|
odxtools/cli/browse.py
CHANGED
@@ -370,7 +370,7 @@ def browse(odxdb: Database) -> None:
|
|
370
370
|
|
371
371
|
codec = answer.get("message_type")
|
372
372
|
if codec is not None:
|
373
|
-
assert isinstance(codec, Request
|
373
|
+
assert isinstance(codec, (Request, Response))
|
374
374
|
table = extract_parameter_tabulation_data(codec.parameters)
|
375
375
|
print(table)
|
376
376
|
|