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