Path:
strictdoc/core/query_engine/query_reader.py
Lines:
108
Non-empty lines:
92
Non-empty lines covered with requirements:
92 / 92 (100.0%)
Functions:
8
Functions covered by requirements:
8 / 8 (100.0%)
1
"""2
@relation(SDOC-SRS-155, scope=file)3
"""4
5
from typing import Callable, Dict, Optional, Tuple
6
7
from textx import metamodel_from_str
8
9
from strictdoc.core.query_engine.grammar import QUERY_GRAMMAR
10
from strictdoc.core.query_engine.query_object import (
11
AllInExpression,
12
AndExpression,
13
AnyInExpression,
14
EqualExpression,
15
InExpression,
16
NodeContainsAnyFreeTextExpression,
17
NodeContainsExpression,
18
NodeFieldExpression,
19
NodeHasChildRequirementsExpression,
20
NodeHasParentRequirementsExpression,
21
NodeIsRequirementExpression,
22
NodeIsRootExpression,
23
NodeIsSectionExpression,
24
NodeIsSourceFileExpression,
25
NodeIsSourceFileWithCompleteCoverageExpression,
26
NodeIsSourceFileWithNoCoverageExpression,
27
NodeIsSourceFileWithPartialCoverageExpression,
28
NoneExpression,
29
NoneInExpression,
30
NotEqualExpression,
31
NotExpression,
32
NotInExpression,
33
OrExpression,
34
Query,
35
StringExpression,
36
StringListExpression,
37
)38
39
QUERY_MODELS = [
40
AllInExpression,
41
AndExpression,
42
AnyInExpression,
43
EqualExpression,
44
InExpression,
45
NodeContainsExpression,
46
NodeContainsAnyFreeTextExpression,
47
NodeFieldExpression,
48
NodeHasChildRequirementsExpression,
49
NodeHasParentRequirementsExpression,
50
NodeIsRequirementExpression,
51
NodeIsRootExpression,
52
NodeIsSectionExpression,
53
NodeIsSourceFileExpression,
54
NodeIsSourceFileWithCompleteCoverageExpression,
55
NodeIsSourceFileWithPartialCoverageExpression,
56
NodeIsSourceFileWithNoCoverageExpression,
57
NoneExpression,
58
NoneInExpression,
59
NotEqualExpression,
60
NotExpression,
61
NotInExpression,
62
OrExpression,
63
Query,
64
StringExpression,
65
StringListExpression,
66
]67
68
69
class QueryParseContext:
70
pass71
72
73
class QueryParsingProcessor:
74
def __init__(self, parse_context: QueryParseContext) -> None:
75
self.parse_context: QueryParseContext = parse_context
76
77
def get_default_processors(self) -> Dict[str, Callable[..., None]]:
78
return {}
79
80
81
class QueryReader:
82
def __init__(self, path_to_output_root: str = "NOT_RELEVANT") -> None:
83
self.path_to_output_root = path_to_output_root
84
85
@staticmethod86
def _read(
87
input_string: str, file_path: Optional[str] = None
88
) -> Tuple[Query, QueryParseContext]:
89
meta_model = metamodel_from_str(
90
QUERY_GRAMMAR,
91
classes=QUERY_MODELS,
92
use_regexp_group=True,
93
)94
95
parse_context = QueryParseContext()
96
processor = QueryParsingProcessor(parse_context=parse_context)
97
meta_model.register_obj_processors(processor.get_default_processors())
98
99
query: Query = meta_model.model_from_str(
100
input_string, file_name=file_path
101
)102
103
return query, parse_context
104
105
@staticmethod106
def read(input_string: str, file_path: Optional[str] = None) -> Query:
107
document, _ = QueryReader._read(input_string, file_path)
108
return document