StrictDoc Documentation
strictdoc/backend/reqif/sdoc_reqif_fields.py
Source file coverage
Path:
strictdoc/backend/reqif/sdoc_reqif_fields.py
Lines:
93
Non-empty lines:
70
Non-empty lines covered with requirements:
70 / 70 (100.0%)
Functions:
5
Functions covered by requirements:
5 / 5 (100.0%)
1
"""
2
@relation(SDOC-SRS-72, scope=file)
3
"""
4
 
5
 
6
class ReqIFProfile:
7
    P01_SDOC = "p01_sdoc"
8
 
9
    ALL = [P01_SDOC]
10
 
11
 
12
SDOC_SPEC_OBJECT_TYPE_SINGLETON = "REQUIREMENT_OR_SECTION"
13
 
14
 
15
class SDocRequirementReservedField:
16
    UID = "UID"
17
    TITLE = "TITLE"
18
    STATEMENT = "STATEMENT"
19
    COMMENT = "COMMENT"
20
    CREATED_BY = "CREATED_BY"
21
 
22
 
23
class ReqIFReservedField:
24
    """
25
    Captures some of the most important field naming conventions by ReqIF.
26
    """
27
 
28
    UID = "ReqIF.ForeignID"
29
 
30
    # The chapter name appears with elements that represent chapters/sections.
31
    # The name usually appears with non-section elements.
32
    CHAPTER_NAME = "ReqIF.ChapterName"
33
    NAME = "ReqIF.Name"
34
 
35
    TEXT = "ReqIF.Text"
36
 
37
    CREATED_BY = "ReqIF.ForeignCreatedBy"
38
    COMMENT_NOTES = "NOTES"
39
 
40
 
41
SDOC_TO_REQIF_FIELD_MAP = {
42
    SDocRequirementReservedField.UID: ReqIFReservedField.UID,
43
    SDocRequirementReservedField.STATEMENT: ReqIFReservedField.TEXT,
44
    SDocRequirementReservedField.COMMENT: ReqIFReservedField.COMMENT_NOTES,
45
    SDocRequirementReservedField.CREATED_BY: ReqIFReservedField.CREATED_BY,
46
}
47
 
48
REQIF_MAP_TO_SDOC_FIELD_MAP = {
49
    ReqIFReservedField.UID: SDocRequirementReservedField.UID,
50
    ReqIFReservedField.NAME: SDocRequirementReservedField.TITLE,
51
    ReqIFReservedField.CHAPTER_NAME: SDocRequirementReservedField.TITLE,
52
    ReqIFReservedField.TEXT: SDocRequirementReservedField.STATEMENT,
53
    ReqIFReservedField.COMMENT_NOTES: SDocRequirementReservedField.COMMENT,
54
    ReqIFReservedField.CREATED_BY: SDocRequirementReservedField.CREATED_BY,
55
}
56
 
57
DEFAULT_SDOC_GRAMMAR_FIELDS = [
58
    "ReqIF.ForeignID",
59
    "LEVEL",
60
    "STATUS",
61
    "TAGS",
62
    "ReqIF.Name",
63
    "ReqIF.Text",
64
    "RATIONALE",
65
    "NOTES",
66
    "ReqIF.ChapterName",
67
]
68
 
69
SDOC_SPECIFICATION_TYPE_SINGLETON = "SDOC_SPECIFICATION_TYPE_SINGLETON"
70
 
71
 
72
def map_sdoc_field_title_to_reqif_field_title(
73
    sdoc_field_title: str, is_composite: bool
74
) -> str:
75
    """
76
    Map how SDoc field titles are converted to ReqIF field titles.
77
    """
78
 
79
    # Assumption: The composite types will most of the type be chapters/sections,
80
    # so mapping them to ReqIF Chapter Name.
81
    # If a user requires a more distinct mapping, we would need to introduce
82
    # a configuration parameter with an explicit map.
83
    if sdoc_field_title == "TITLE":
84
        if is_composite:
85
            return ReqIFReservedField.CHAPTER_NAME
86
        return ReqIFReservedField.NAME
87
    return SDOC_TO_REQIF_FIELD_MAP.get(sdoc_field_title) or sdoc_field_title
88
 
89
 
90
def map_reqif_field_title_to_sdoc_field_title(reqif_field_title: str) -> str:
91
    return (
92
        REQIF_MAP_TO_SDOC_FIELD_MAP.get(reqif_field_title) or reqif_field_title
93
    )