Skip to content

Commit 80c566b

Browse files
committed
Implement port prototype elements
1 parent 9a15a05 commit 80c566b

File tree

6 files changed

+696
-90
lines changed

6 files changed

+696
-90
lines changed

CHANGELOG.md

+23-20
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,32 @@ Non-collectable elements are various sub-elements to collectable elements.
2020

2121
#### XML - Software component elements
2222

23-
* ClientComSpec
24-
* ModeSwitchedAckRequest
25-
* ModeSwitchReceiverComSpec
26-
* ModeSwitchSenderComSpec
27-
* NonqueuedReceiverComSpec
28-
* NonqueuedSenderComSpec
29-
* NvProvideComSpec
30-
* NvRequireComSpec
31-
* ParameterProvideComSpec
32-
* ParameterRequireComSpec
33-
* QueuedReceiverComSpec
34-
* QueuedSenderComSpec
35-
* ReceptionComSpecProps
36-
* ServerComSpec
37-
* TransmissionAcknowledgementRequest
38-
* TransmissionComSpecProps
23+
* ClientComSpec | CLIENT-COM-SPEC
24+
* ModeSwitchedAckRequest | MODE-SWITCHED-ACK-REQUEST
25+
* ModeSwitchReceiverComSpec | MODE-SWITCH-RECEIVER-COM-SPEC
26+
* ModeSwitchSenderComSpec | MODE-SWITCH-SENDER-COM-SPEC
27+
* NonqueuedReceiverComSpec | NONQUEUED-RECEIVER-COM-SPEC
28+
* NonqueuedSenderComSpec | NONQUEUED-SENDER-COM-SPEC
29+
* NvProvideComSpec | NV-PROVIDE-COM-SPEC
30+
* NvRequireComSpec | NV-REQUIRE-COM-SPEC
31+
* ParameterProvideComSpec | PARAMETER-PROVIDE-COM-SPEC
32+
* ParameterRequireComSpec | PARAMETER-REQUIRE-COM-SPEC
33+
* QueuedReceiverComSpec | QUEUED-RECEIVER-COM-SPEC
34+
* QueuedSenderComSpec | QUEUED-SENDER-COM-SPEC
35+
* ReceptionComSpecProps | RECEPTION-COM-SPEC-PROPS
36+
* ServerComSpec | SERVER-COM-SPEC
37+
* TransmissionAcknowledgementRequest | TRANSMISSION-ACKNOWLEDGEMENT-REQUEST
38+
* TransmissionComSpecProps | TRANSMISSION-COM-SPEC-PROPS
39+
* ProvidePortPrototype | P-PORT-PROTOTYPE
40+
* RequirePortPrototype | R-PORT-PROTOTYPE
41+
* PRPortPrototype | PR-PORT-PROTOTYPE
3942

4043
#### XML - SWC internal behavior elements
4144

42-
* ArVariableInImplementationDataInstanceRef
43-
* AutosarVariableRef
44-
* VariableAccess
45-
* VariableInAtomicSWCTypeInstanceRef
45+
* ArVariableInImplementationDataInstanceRef | AR-VARIABLE-IN-IMPLEMENTATION-DATA-INSTANCE-REF
46+
* AutosarVariableRef | AUTOSAR-VARIABLE-REF
47+
* VariableAccess | VARIABLE-ACCESS
48+
* VariableInAtomicSWCTypeInstanceRef | VARIABLE-IN-ATOMIC-SWC-TYPE-INSTANCE-REF
4649

4750
#### XML - Reference elements
4851

src/autosar/xml/element.py

+133-4
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,24 @@ def _accepted_subtypes(self) -> set[ar_enum.IdentifiableSubTypes]:
782782
ar_enum.IdentifiableSubTypes.VARIABLE_DATA_PROTOTYPE,
783783
}
784784

785+
786+
class PortInterfaceRef(BaseRef):
787+
"""
788+
References to PORT-INTERFACE--SUBTYPES-ENUM
789+
790+
Only a fraction of elements seen in the XML Schema are
791+
actually supported.
792+
"""
793+
794+
def _accepted_subtypes(self) -> set[ar_enum.IdentifiableSubTypes]:
795+
"""Acceptable values for dest"""
796+
return {ar_enum.IdentifiableSubTypes.CLIENT_SERVER_INTERFACE,
797+
ar_enum.IdentifiableSubTypes.MODE_SWITCH_INTERFACE,
798+
ar_enum.IdentifiableSubTypes.NV_DATA_INTERFACE,
799+
ar_enum.IdentifiableSubTypes.PARAMETER_INTERFACE,
800+
ar_enum.IdentifiableSubTypes.SENDER_RECEIVER_INTERFACE,
801+
}
802+
785803
# --- Documentation Elements
786804

787805

@@ -4429,16 +4447,127 @@ class PortPrototype(Identifiable):
44294447
# .VARIATION-POINT not supported
44304448

44314449

4432-
class AbstractProvidedPortPrototype(PortPrototype):
4450+
class ProvidePortPrototype(PortPrototype):
44334451
"""
4434-
Group AR:ABSTRACT-PROVIDED-PORT-PROTOTYPE
4452+
Complex type AR:P-PORT-PROTOTYPE
4453+
Tag variants: 'P-PORT-PROTOTYPE'
4454+
4455+
Includes AR:ABSTRACT-PROVIDED-PORT-PROTOTYPE
44354456
"""
44364457

4437-
def __init__(self, name: str,
4458+
def __init__(self,
4459+
name: str,
4460+
port_interface_ref: PortInterfaceRef | None = None,
44384461
com_spec: ProvidePortComSpec | list[ProvidePortComSpec] | None = None,
44394462
**kwargs) -> None:
44404463
super().__init__(name, **kwargs)
4441-
# .FIELD-SENDER-COM-SPEC not supported
4464+
self.com_spec: list[ProvidePortComSpec] = [] # .PROVIDED-COM-SPECS
4465+
self.port_interface_ref: PortInterfaceRef | None = None # .PROVIDED-INTERFACE-TREF
4466+
self._assign_optional_strict("port_interface_ref", port_interface_ref, PortInterfaceRef)
4467+
if com_spec is not None:
4468+
if isinstance(com_spec, ProvidePortComSpec):
4469+
self.append_com_spec(com_spec)
4470+
elif isinstance(com_spec, (list, tuple)):
4471+
for com_spec_elem in com_spec:
4472+
self.append_com_spec(com_spec_elem)
4473+
else:
4474+
raise TypeError("com_spec must be of a type derived from ProvidePortComSpec")
4475+
4476+
def append_com_spec(self, com_spec: ProvidePortComSpec) -> None:
4477+
"""
4478+
Adds comspec to internal list of com-specs
4479+
"""
4480+
if isinstance(com_spec, ProvidePortComSpec):
4481+
self.com_spec.append(com_spec)
4482+
else:
4483+
raise TypeError("com_spec must be of a type derived from ProvidePortComSpec")
4484+
4485+
4486+
class RequirePortPrototype(PortPrototype):
4487+
"""
4488+
Complex type AR:R-PORT-PROTOTYPE
4489+
Tag variants: 'R-PORT-PROTOTYPE'
4490+
4491+
Includes AR:ABSTRACT-REQUIRED-PORT-PROTOTYPE
4492+
"""
4493+
4494+
def __init__(self,
4495+
name: str,
4496+
port_interface_ref: PortInterfaceRef | None = None,
4497+
com_spec: RequirePortComSpec | list[RequirePortComSpec] | None = None,
4498+
allow_unconnected: bool | None = None,
4499+
**kwargs) -> None:
4500+
super().__init__(name, **kwargs)
4501+
self.com_spec: list[RequirePortComSpec] = [] # .REQUIRED-COM-SPECS
4502+
self.allow_unconnected: bool | None = None # .MAY-BE-UNCONNECTED
4503+
self.port_interface_ref: PortInterfaceRef | None = None # .REQUIRED-INTERFACE-TREF
4504+
self._assign_optional_strict("port_interface_ref", port_interface_ref, PortInterfaceRef)
4505+
self._assign_optional("allow_unconnected", allow_unconnected, bool)
4506+
if com_spec is not None:
4507+
if isinstance(com_spec, RequirePortComSpec):
4508+
self.append_com_spec(com_spec)
4509+
elif isinstance(com_spec, (list, tuple)):
4510+
for com_spec_elem in com_spec:
4511+
self.append_com_spec(com_spec_elem)
4512+
else:
4513+
raise TypeError("com_spec must be of a type derived from RequirePortComSpec")
4514+
4515+
def append_com_spec(self, com_spec: RequirePortComSpec) -> None:
4516+
"""
4517+
Adds comspec to internal list of com-specs
4518+
"""
4519+
if isinstance(com_spec, RequirePortComSpec):
4520+
self.com_spec.append(com_spec)
4521+
else:
4522+
raise TypeError("com_spec must be of type RequirePortComSpec")
4523+
4524+
4525+
class PRPortPrototype(PortPrototype):
4526+
"""
4527+
Complex type AR:PR-PORT-PROTOTYPE
4528+
Tag variants: 'PR-PORT-PROTOTYPE'
4529+
4530+
Includes AR:ABSTRACT-PROVIDED-PORT-PROTOTYPE and AR:ABSTRACT-REQUIRED-PORT-PROTOTYPE
4531+
"""
4532+
4533+
def __init__(self,
4534+
name: str,
4535+
port_interface_ref: PortInterfaceRef | None = None,
4536+
provided_com_spec: ProvidePortComSpec | list[ProvidePortComSpec] | None = None,
4537+
required_com_spec: RequirePortComSpec | list[RequirePortComSpec] | None = None,
4538+
**kwargs) -> None:
4539+
super().__init__(name, **kwargs)
4540+
self.port_interface_ref: PortInterfaceRef | None = None
4541+
self.provided_com_spec: list[ProvidePortComSpec] = []
4542+
self.required_com_spec: list[RequirePortComSpec] = []
4543+
self._assign_optional_strict("port_interface_ref", port_interface_ref, PortInterfaceRef)
4544+
if provided_com_spec is not None:
4545+
if isinstance(provided_com_spec, ProvidePortComSpec):
4546+
self.append_com_spec(provided_com_spec)
4547+
elif isinstance(required_com_spec, (list, tuple)):
4548+
for com_spec_elem in provided_com_spec:
4549+
self.append_com_spec(com_spec_elem)
4550+
else:
4551+
raise TypeError("provided_com_spec must be of a type derived from ProvidePortComSpec")
4552+
if required_com_spec is not None:
4553+
if isinstance(required_com_spec, RequirePortComSpec):
4554+
self.append_com_spec(required_com_spec)
4555+
elif isinstance(required_com_spec, (list, tuple)):
4556+
for com_spec_elem in required_com_spec:
4557+
self.append_com_spec(com_spec_elem)
4558+
else:
4559+
raise TypeError("required_com_spec must be of a type derived from RequirePortComSpec")
4560+
4561+
def append_com_spec(self, com_spec: ProvidePortComSpec | RequirePortComSpec) -> None:
4562+
"""
4563+
Append com-spec to internal list(s) of com-specs
4564+
"""
4565+
if isinstance(com_spec, ProvidePortComSpec):
4566+
self.provided_com_spec.append(com_spec)
4567+
elif isinstance(com_spec, RequirePortComSpec):
4568+
self.required_com_spec.append(com_spec)
4569+
else:
4570+
raise TypeError("com_spec must be of either type ProvidePortComSpec, RequirePortComSpec")
44424571

44434572

44444573
class SoftwareComponentType(ARElement):

src/autosar/xml/enumeration.py

+57-42
Original file line numberDiff line numberDiff line change
@@ -209,27 +209,32 @@ class IdentifiableSubTypes(Enum):
209209
AUTOSAR_DATA_PROTOTYPE = 15
210210
AUTOSAR_DATA_TYPE = 16
211211
BSW_MODULE_ENTRY = 17
212-
CLIENT_SERVER_OPERATION = 18
213-
COMPU_METHOD = 19
214-
CONSTANT_SPECIFICATION = 20
215-
DATA_CONSTR = 21
216-
DATA_PROTOTYPE = 22
217-
E2E_PROFILE_COMPATIBILITY_PROPS = 23
218-
IMPLEMENTATION_DATA_TYPE = 24
219-
IMPLEMENTATION_DATA_TYPE_ELEMENT = 25
220-
MODE_DECLARATION = 26
221-
MODE_DECLARATION_GROUP = 27
222-
MODE_DECLARATION_GROUP_PROTOTYPE = 28
223-
P_PORT_PROTOTYPE = 29
224-
PARAMETER_DATA_PROTOTYPE = 30
225-
PHYSICAL_DIMENSION = 31
226-
PORT_PROTOTYPE = 32
227-
PR_PORT_PROTOTYPE = 33
228-
R_PORT_PROTOTYPE = 34
229-
SW_ADDR_METHOD = 35
230-
SW_BASE_TYPE = 36
231-
UNIT = 37
232-
VARIABLE_DATA_PROTOTYPE = 38
212+
CLIENT_SERVER_INTERFACE = 18
213+
CLIENT_SERVER_OPERATION = 19
214+
COMPU_METHOD = 20
215+
CONSTANT_SPECIFICATION = 21
216+
DATA_CONSTR = 22
217+
DATA_PROTOTYPE = 23
218+
E2E_PROFILE_COMPATIBILITY_PROPS = 24
219+
IMPLEMENTATION_DATA_TYPE = 25
220+
IMPLEMENTATION_DATA_TYPE_ELEMENT = 26
221+
MODE_DECLARATION = 27
222+
MODE_DECLARATION_GROUP = 28
223+
MODE_DECLARATION_GROUP_PROTOTYPE = 29
224+
MODE_SWITCH_INTERFACE = 30
225+
NV_DATA_INTERFACE = 31
226+
P_PORT_PROTOTYPE = 32
227+
PARAMETER_INTERFACE = 33
228+
PARAMETER_DATA_PROTOTYPE = 34
229+
PHYSICAL_DIMENSION = 35
230+
PORT_PROTOTYPE = 36
231+
PR_PORT_PROTOTYPE = 37
232+
R_PORT_PROTOTYPE = 38
233+
SENDER_RECEIVER_INTERFACE = 39
234+
SW_ADDR_METHOD = 40
235+
SW_BASE_TYPE = 41
236+
UNIT = 42
237+
VARIABLE_DATA_PROTOTYPE = 43
233238

234239

235240
class IntervalType(Enum):
@@ -700,6 +705,7 @@ class VersionedTextValue:
700705
"AUTOSAR-DATA-PROTOTYPE": IdentifiableSubTypes.AUTOSAR_DATA_PROTOTYPE,
701706
"AUTOSAR-DATA-TYPE": IdentifiableSubTypes.AUTOSAR_DATA_TYPE,
702707
"BSW-MODULE-ENTRY": IdentifiableSubTypes.BSW_MODULE_ENTRY,
708+
"CLIENT-SERVER-INTERFACE": IdentifiableSubTypes.CLIENT_SERVER_INTERFACE,
703709
"CLIENT-SERVER-OPERATION": IdentifiableSubTypes.CLIENT_SERVER_OPERATION,
704710
"COMPU-METHOD": IdentifiableSubTypes.COMPU_METHOD,
705711
"CONSTANT-SPECIFICATION": IdentifiableSubTypes.CONSTANT_SPECIFICATION,
@@ -710,12 +716,16 @@ class VersionedTextValue:
710716
"MODE-DECLARATION": IdentifiableSubTypes.MODE_DECLARATION,
711717
"MODE-DECLARATION-GROUP": IdentifiableSubTypes.MODE_DECLARATION_GROUP,
712718
"MODE-DECLARATION-GROUP-PROTOTYPE": IdentifiableSubTypes.MODE_DECLARATION_GROUP_PROTOTYPE,
719+
"MODE-SWITCH-INTERFACE": IdentifiableSubTypes.MODE_SWITCH_INTERFACE,
720+
"NV-DATA-INTERFACE": IdentifiableSubTypes.NV_DATA_INTERFACE,
713721
"P-PORT-PROTOTYPE": IdentifiableSubTypes.P_PORT_PROTOTYPE,
714722
"PARAMETER-DATA-PROTOTYPE": IdentifiableSubTypes.PARAMETER_DATA_PROTOTYPE,
723+
"PARAMETER-INTERFACE": IdentifiableSubTypes.PARAMETER_INTERFACE,
715724
"PHYSICAL-DIMENSION": IdentifiableSubTypes.PHYSICAL_DIMENSION,
716725
"PORT-PROTOTYPE": IdentifiableSubTypes.PORT_PROTOTYPE,
717726
"PR-PORT-PROTOTYPE": IdentifiableSubTypes.PR_PORT_PROTOTYPE,
718727
"R-PORT-PROTOTYPE": IdentifiableSubTypes.R_PORT_PROTOTYPE,
728+
"SENDER-RECEIVER-INTERFACE": IdentifiableSubTypes.SENDER_RECEIVER_INTERFACE,
719729
"SW-ADDR-METHOD": IdentifiableSubTypes.SW_ADDR_METHOD,
720730
"SW-BASE-TYPE": IdentifiableSubTypes.SW_BASE_TYPE,
721731
"UNIT": IdentifiableSubTypes.UNIT,
@@ -1045,27 +1055,32 @@ def xml_to_enum(enum_type_name: str, xml_text: str, schema_version: int = ar_bas
10451055
"AUTOSAR-DATA-PROTOTYPE", # 15
10461056
"AUTOSAR-DATA-TYPE", # 16
10471057
"BSW-MODULE-ENTRY", # 17
1048-
"CLIENT-SERVER-OPERATION", # 18
1049-
"COMPU-METHOD", # 19
1050-
"CONSTANT-SPECIFICATION", # 20
1051-
"DATA-CONSTR", # 21
1052-
"DATA-PROTOTYPE", # 22
1053-
"E-2-E-PROFILE-COMPATIBILITY-PROPS", # 23
1054-
"IMPLEMENTATION-DATA-TYPE", # 24
1055-
"IMPLEMENTATION-DATA-TYPE-ELEMENT", # 25
1056-
"MODE-DECLARATION", # 26
1057-
"MODE-DECLARATION-GROUP", # 27
1058-
"MODE-DECLARATION-GROUP-PROTOTYPE", # 28
1059-
"P-PORT-PROTOTYPE", # 29
1060-
"PARAMETER-DATA-PROTOTYPE", # 30
1061-
"PHYSICAL-DIMENSION", # 31
1062-
"PORT-PROTOTYPE", # 32
1063-
"PR-PORT-PROTOTYPE", # 33
1064-
"R-PORT-PROTOTYPE", # 34
1065-
"SW-ADDR-METHOD", # 35
1066-
"SW-BASE-TYPE", # 36
1067-
"UNIT", # 37
1068-
"VARIABLE-DATA-PROTOTYPE", # 38
1058+
"CLIENT-SERVER-INTERFACE", # 18
1059+
"CLIENT-SERVER-OPERATION", # 19
1060+
"COMPU-METHOD", # 20
1061+
"CONSTANT-SPECIFICATION", # 21
1062+
"DATA-CONSTR", # 22
1063+
"DATA-PROTOTYPE", # 23
1064+
"E-2-E-PROFILE-COMPATIBILITY-PROPS", # 24
1065+
"IMPLEMENTATION-DATA-TYPE", # 25
1066+
"IMPLEMENTATION-DATA-TYPE-ELEMENT", # 26
1067+
"MODE-DECLARATION", # 27
1068+
"MODE-DECLARATION-GROUP", # 28
1069+
"MODE-DECLARATION-GROUP-PROTOTYPE", # 29
1070+
"MODE-SWITCH-INTERFACE", # 30
1071+
"NV-DATA-INTERFACE", # 31
1072+
"P-PORT-PROTOTYPE", # 32
1073+
"PARAMETER-INTERFACE", # 33
1074+
"PARAMETER-DATA-PROTOTYPE", # 34
1075+
"PHYSICAL-DIMENSION", # 35
1076+
"PORT-PROTOTYPE", # 36
1077+
"PR-PORT-PROTOTYPE", # 37
1078+
"R-PORT-PROTOTYPE", # 38
1079+
"SENDER-RECEIVER-INTERFACE", # 39
1080+
"SW-ADDR-METHOD", # 40
1081+
"SW-BASE-TYPE", # 41
1082+
"UNIT", # 42
1083+
"VARIABLE-DATA-PROTOTYPE", # 43
10691084
],
10701085
"IntervalType": [
10711086
"CLOSED", # 0

0 commit comments

Comments
 (0)