Path:
strictdoc/backend/reqif/reqif_import.py
Lines:
78
Non-empty lines:
68
Non-empty lines covered with requirements:
68 / 68 (100.0%)
Functions:
4
Functions covered by requirements:
4 / 4 (100.0%)
1
"""2
@relation(SDOC-SRS-72, scope=file)3
"""4
5
import os.path
6
from dataclasses import dataclass
7
from typing import List, Optional
8
9
from reqif.parser import ReqIFParser, ReqIFZParser
10
from reqif.reqif_bundle import ReqIFBundle, ReqIFZBundle
11
12
from strictdoc.backend.reqif.p01_sdoc.reqif_to_sdoc_converter import (
13
P01_ReqIFToSDocConverter,
14
)15
from strictdoc.backend.reqif.sdoc_reqif_fields import ReqIFProfile
16
from strictdoc.backend.sdoc.models.document import SDocDocument
17
from strictdoc.core.project_config import ProjectConfig
18
19
20
@dataclass21
class ReqIFImportOptions:
22
input_path: str
23
reqif_profile: str
24
reqif_enable_mid: bool
25
reqif_import_markup: Optional[str]
26
27
28
class ReqIFImport:
29
@staticmethod30
def import_from_file(
31
import_config: ReqIFImportOptions, project_config: ProjectConfig
32
) -> List[SDocDocument]:
33
converter = ReqIFImport.select_reqif_profile(import_config)
34
35
assert os.path.isfile(import_config.input_path), (
36
import_config.input_path
37
)38
39
documents: List[SDocDocument]
40
if import_config.input_path.endswith(".reqifz"):
41
reqifz_bundle: ReqIFZBundle = ReqIFZParser.parse(
42
import_config.input_path
43
)44
assert len(reqifz_bundle.reqif_bundles) > 0
45
documents = converter.convert_reqif_bundle(
46
next(iter(reqifz_bundle.reqif_bundles.values())),
47
enable_mid=import_config.reqif_enable_mid
48
or project_config.reqif_enable_mid,
49
import_markup=import_config.reqif_import_markup
50
if import_config.reqif_import_markup is not None
51
else project_config.reqif_import_markup,
52
)53
else:
54
reqif_bundle: ReqIFBundle = ReqIFParser.parse(
55
import_config.input_path
56
)57
documents = converter.convert_reqif_bundle(
58
reqif_bundle,
59
enable_mid=import_config.reqif_enable_mid
60
or project_config.reqif_enable_mid,
61
import_markup=import_config.reqif_import_markup
62
if import_config.reqif_import_markup is not None
63
else project_config.reqif_import_markup,
64
)65
return documents
66
67
@staticmethod68
def select_reqif_profile(
69
import_config: ReqIFImportOptions,
70
) -> P01_ReqIFToSDocConverter:
71
if (
72
import_config.reqif_profile is None
73
or import_config.reqif_profile == ReqIFProfile.P01_SDOC
74
):75
return P01_ReqIFToSDocConverter()
76
raise NotImplementedError(
77
f"Unsupported profile: {import_config.reqif_profile}"
78
)