Skip to content

Commit a1e0c4c

Browse files
authored
Merge pull request #125 from strictdoc-project/stanislaw/relation_group
Implement TC1300: RELATION-GROUP-TYPE
2 parents c05e9ed + 66cc212 commit a1e0c4c

18 files changed

Lines changed: 1198 additions & 932 deletions
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from typing import List, Optional
2+
3+
4+
class ReqIFRelationGroup: # pylint: disable=too-many-instance-attributes
5+
def __init__( # pylint: disable=too-many-arguments
6+
self,
7+
identifier: str,
8+
description: Optional[str] = None,
9+
last_change: Optional[str] = None,
10+
long_name: Optional[str] = None,
11+
type_ref: Optional[str] = None,
12+
source_specification_ref: Optional[str] = None,
13+
target_specification_ref: Optional[str] = None,
14+
spec_relations: Optional[List[str]] = None,
15+
is_self_closed: bool = True,
16+
):
17+
self.identifier: str = identifier
18+
self.description: Optional[str] = description
19+
self.last_change: Optional[str] = last_change
20+
self.long_name: Optional[str] = long_name
21+
self.type_ref: Optional[str] = type_ref
22+
self.source_specification_ref: Optional[str] = source_specification_ref
23+
self.target_specification_ref: Optional[str] = target_specification_ref
24+
self.spec_relations: Optional[List[str]] = spec_relations
25+
self.is_self_closed: bool = is_self_closed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from typing import Optional
2+
3+
4+
class ReqIFRelationGroupType:
5+
def __init__( # pylint: disable=too-many-arguments
6+
self,
7+
identifier: str,
8+
description: Optional[str] = None,
9+
last_change: Optional[str] = None,
10+
long_name: Optional[str] = None,
11+
is_self_closed: bool = True,
12+
):
13+
self.identifier: str = identifier
14+
self.description: Optional[str] = description
15+
self.last_change: Optional[str] = last_change
16+
self.long_name: Optional[str] = long_name
17+
self.is_self_closed: bool = is_self_closed

reqif/models/reqif_req_if_content.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from typing import List, Optional, Union
22

33
from reqif.helpers.debug import auto_described
4+
from reqif.models.reqif_relation_group import ReqIFRelationGroup
5+
from reqif.models.reqif_relation_group_type import ReqIFRelationGroupType
46
from reqif.models.reqif_spec_object import ReqIFSpecObject
57
from reqif.models.reqif_spec_object_type import ReqIFSpecObjectType
68
from reqif.models.reqif_spec_relation import ReqIFSpecRelation
@@ -20,13 +22,14 @@ def __init__( # pylint: disable=too-many-arguments
2022
ReqIFSpecObjectType,
2123
ReqIFSpecRelationType,
2224
ReqIFSpecificationType,
25+
ReqIFRelationGroupType,
2326
]
2427
]
2528
] = None,
2629
spec_objects: Optional[List[ReqIFSpecObject]] = None,
2730
spec_relations: Optional[List[ReqIFSpecRelation]] = None,
2831
specifications: Optional[List[ReqIFSpecification]] = None,
29-
spec_relation_groups: Optional[List] = None,
32+
spec_relation_groups: Optional[List[ReqIFRelationGroup]] = None,
3033
):
3134
self.data_types: Optional[List] = data_types
3235
self.spec_types: Optional[
@@ -35,10 +38,13 @@ def __init__( # pylint: disable=too-many-arguments
3538
ReqIFSpecObjectType,
3639
ReqIFSpecRelationType,
3740
ReqIFSpecificationType,
41+
ReqIFRelationGroupType,
3842
]
3943
]
4044
] = spec_types
4145
self.spec_objects: Optional[List[ReqIFSpecObject]] = spec_objects
4246
self.spec_relations: Optional[List[ReqIFSpecRelation]] = spec_relations
4347
self.specifications: Optional[List[ReqIFSpecification]] = specifications
44-
self.spec_relation_groups: Optional[List] = spec_relation_groups
48+
self.spec_relation_groups: Optional[
49+
List[ReqIFRelationGroup]
50+
] = spec_relation_groups

reqif/models/reqif_spec_relation.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def __init__( # pylint: disable=too-many-arguments
1515
xml_node: Optional[Any] = None,
1616
description: Optional[str] = None,
1717
last_change: Optional[str] = None,
18+
long_name: Optional[str] = None,
1819
values_attribute: Optional[SpecObjectAttribute] = None,
1920
):
2021
self.identifier: str = identifier
@@ -25,4 +26,5 @@ def __init__( # pylint: disable=too-many-arguments
2526
self.xml_node: Optional[Any] = xml_node
2627
self.description: Optional[str] = description
2728
self.last_change: Optional[str] = last_change
29+
self.long_name: Optional[str] = long_name
2830
self.values_attribute: Optional[SpecObjectAttribute] = values_attribute

reqif/models/reqif_spec_relation_type.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from typing import Optional
1+
from typing import List, Optional
2+
3+
from reqif.models.reqif_spec_object_type import SpecAttributeDefinition
24

35

46
class ReqIFSpecRelationType:
@@ -9,9 +11,13 @@ def __init__( # pylint: disable=too-many-arguments
911
last_change: Optional[str] = None,
1012
long_name: Optional[str] = None,
1113
is_self_closed: bool = True,
14+
attribute_definitions: Optional[List[SpecAttributeDefinition]] = None,
1215
):
1316
self.identifier: str = identifier
1417
self.description: Optional[str] = description
1518
self.last_change: Optional[str] = last_change
1619
self.long_name: Optional[str] = long_name
1720
self.is_self_closed: bool = is_self_closed
21+
self.attribute_definitions: Optional[
22+
List[SpecAttributeDefinition]
23+
] = attribute_definitions

reqif/parser.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
)
1515
from reqif.models.reqif_core_content import ReqIFCoreContent
1616
from reqif.models.reqif_namespace_info import ReqIFNamespaceInfo
17+
from reqif.models.reqif_relation_group_type import ReqIFRelationGroupType
1718
from reqif.models.reqif_req_if_content import ReqIFReqIFContent
1819
from reqif.models.reqif_reqif_header import ReqIFReqIFHeader
1920
from reqif.models.reqif_spec_object import ReqIFSpecObject
@@ -29,12 +30,16 @@
2930
DataTypeParser,
3031
)
3132
from reqif.parsers.header_parser import ReqIFHeaderParser
33+
from reqif.parsers.relation_group_parser import ReqIFRelationGroupParser
3234
from reqif.parsers.spec_object_parser import (
3335
SpecObjectParser,
3436
)
3537
from reqif.parsers.spec_relation_parser import (
3638
SpecRelationParser,
3739
)
40+
from reqif.parsers.spec_types.relation_group_type_parser import (
41+
RelationGroupTypeParser,
42+
)
3843
from reqif.parsers.spec_types.spec_object_type_parser import (
3944
SpecObjectTypeParser,
4045
)
@@ -224,7 +229,16 @@ def _parse_reqif_content(
224229
data_types.append(data_type)
225230
data_types_lookup[data_type.identifier] = data_type
226231

227-
spec_types = None
232+
spec_types: Optional[
233+
List[
234+
Union[
235+
ReqIFSpecObjectType,
236+
ReqIFSpecRelationType,
237+
ReqIFSpecificationType,
238+
ReqIFRelationGroupType,
239+
]
240+
]
241+
] = None
228242
spec_types_lookup: Dict = {}
229243
xml_spec_types = xml_req_if_content.find("SPEC-TYPES")
230244
if xml_spec_types is not None:
@@ -234,6 +248,7 @@ def _parse_reqif_content(
234248
ReqIFSpecObjectType,
235249
ReqIFSpecRelationType,
236250
ReqIFSpecificationType,
251+
ReqIFRelationGroupType,
237252
]
238253
if xml_spec_object_type_xml.tag == "SPEC-OBJECT-TYPE":
239254
spec_type = SpecObjectTypeParser.parse(
@@ -247,6 +262,10 @@ def _parse_reqif_content(
247262
spec_type = SpecificationTypeParser.parse(
248263
xml_spec_object_type_xml
249264
)
265+
elif xml_spec_object_type_xml.tag == "RELATION-GROUP-TYPE":
266+
spec_type = RelationGroupTypeParser.parse(
267+
xml_spec_object_type_xml
268+
)
250269
else:
251270
raise NotImplementedError(
252271
xml_spec_object_type_xml
@@ -301,7 +320,12 @@ def _parse_reqif_content(
301320
if xml_spec_relation_groups is not None:
302321
spec_relation_groups = []
303322
if len(xml_spec_relation_groups) != 0:
304-
raise NotImplementedError(xml_spec_relation_groups) from None
323+
spec_relation_groups = []
324+
for xml_relation_group in xml_spec_relation_groups:
325+
relation_group = ReqIFRelationGroupParser.parse(
326+
xml_relation_group
327+
)
328+
spec_relation_groups.append(relation_group)
305329

306330
lookup = ReqIFObjectLookup(
307331
data_types_lookup=data_types_lookup,

0 commit comments

Comments
 (0)