Skip to content

Commit d801ce9

Browse files
committed
Code climate: document_grammar: fix no-untyped-def
1 parent 1589382 commit d801ce9

File tree

6 files changed

+65
-54
lines changed

6 files changed

+65
-54
lines changed

strictdoc/backend/reqif/p01_sdoc/reqif_to_sdoc_converter.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
from strictdoc.backend.sdoc.models.document_grammar import (
2222
DocumentGrammar,
2323
GrammarElement,
24-
create_default_relations,
2524
)
2625
from strictdoc.backend.sdoc.models.node import SDocNode, SDocNodeField
2726
from strictdoc.backend.sdoc.models.reference import (
@@ -215,8 +214,8 @@ def node_converter_lambda(
215214
]
216215
)
217216
if len(grammar_element.relations) == 0:
218-
grammar_element.relations = create_default_relations(
219-
grammar_element
217+
grammar_element.relations = (
218+
GrammarElement.create_default_relations(grammar_element)
220219
)
221220

222221
elements.append(grammar_element)

strictdoc/backend/reqif/p01_sdoc/sdoc_to_reqif_converter.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,10 @@ def _convert_document_grammar_to_spec_types(
604604
):
605605
spec_object_types: List = []
606606

607+
grammar_document: SDocDocument = assert_cast(
608+
grammar.parent, SDocDocument
609+
)
610+
607611
for element in grammar.elements:
608612
fields_names = element.get_field_titles()
609613
statement_field_idx = fields_names.index("STATEMENT")
@@ -681,15 +685,15 @@ def _convert_document_grammar_to_spec_types(
681685
attribute_definitions=attribute_definitions,
682686
)
683687
spec_object_types.append(spec_object_type)
684-
context.map_grammar_node_tags_to_spec_object_type[grammar.parent][
688+
context.map_grammar_node_tags_to_spec_object_type[grammar_document][
685689
element.tag
686690
] = spec_object_type
687691

688692
assert grammar.parent is not None
689693
section_spec_type = (
690694
P01_SDocToReqIFObjectConverter._create_section_spec_object_type()
691695
)
692-
context.map_grammar_node_tags_to_spec_object_type[grammar.parent][
696+
context.map_grammar_node_tags_to_spec_object_type[grammar_document][
693697
"SECTION"
694698
] = section_spec_type
695699
spec_object_types.append(section_spec_type)

strictdoc/backend/sdoc/models/document_grammar.py

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
# mypy: disable-error-code="no-untyped-call,no-untyped-def,union-attr,type-arg"
1+
# mypy: disable-error-code="no-untyped-call,union-attr,type-arg"
22
from collections import OrderedDict
33
from typing import Dict, Generator, List, Optional, Set, Tuple, Union
44

5+
from strictdoc.backend.sdoc.models.model import SDocDocumentIF, SDocGrammarIF
56
from strictdoc.backend.sdoc.models.type_system import (
67
RESERVED_NON_META_FIELDS,
78
GrammarElementField,
@@ -17,34 +18,11 @@
1718
from strictdoc.helpers.mid import MID
1819

1920

20-
def create_default_relations(
21-
parent,
22-
) -> List[
23-
Union[
24-
GrammarElementRelationParent,
25-
GrammarElementRelationChild,
26-
GrammarElementRelationFile,
27-
]
28-
]:
29-
return [
30-
GrammarElementRelationParent(
31-
parent=parent,
32-
relation_type="Parent",
33-
relation_role=None,
34-
),
35-
GrammarElementRelationFile(
36-
parent=parent,
37-
relation_type="File",
38-
relation_role=None,
39-
),
40-
]
41-
42-
4321
@auto_described()
4422
class GrammarElement:
4523
def __init__(
4624
self,
47-
parent,
25+
parent: Optional["DocumentGrammar"],
4826
tag: str,
4927
property_is_composite: str,
5028
fields: List[
@@ -55,8 +33,8 @@ def __init__(
5533
]
5634
],
5735
relations: List,
58-
):
59-
self.parent = parent
36+
) -> None:
37+
self.parent: Optional[DocumentGrammar] = parent
6038
self.tag: str = tag
6139

6240
assert property_is_composite in ("", "True", "False")
@@ -106,7 +84,7 @@ def __init__(
10684
self.ng_col_start: Optional[int] = None
10785

10886
@staticmethod
109-
def create_default(tag: str):
87+
def create_default(tag: str) -> "GrammarElement":
11088
return GrammarElement(
11189
parent=None,
11290
tag=tag,
@@ -134,6 +112,29 @@ def create_default(tag: str):
134112
relations=[],
135113
)
136114

115+
@staticmethod
116+
def create_default_relations(
117+
parent: "GrammarElement",
118+
) -> List[
119+
Union[
120+
GrammarElementRelationParent,
121+
GrammarElementRelationChild,
122+
GrammarElementRelationFile,
123+
]
124+
]:
125+
return [
126+
GrammarElementRelationParent(
127+
parent=parent,
128+
relation_type="Parent",
129+
relation_role=None,
130+
),
131+
GrammarElementRelationFile(
132+
parent=parent,
133+
relation_type="File",
134+
relation_role=None,
135+
),
136+
]
137+
137138
def get_multiline_field_index(self) -> int:
138139
multiline_field_index = self.content_field[1]
139140
assert multiline_field_index != -1
@@ -152,7 +153,7 @@ def get_tag_lower(self) -> str:
152153

153154
def has_relation_type_role(
154155
self, relation_type: str, relation_role: Optional[str]
155-
):
156+
) -> bool:
156157
assert relation_role is None or len(relation_role) > 0
157158
for relation_ in self.relations:
158159
if (
@@ -190,14 +191,14 @@ def enumerate_custom_content_field_titles(
190191
yield field.title
191192

192193

193-
class DocumentGrammar:
194+
class DocumentGrammar(SDocGrammarIF):
194195
def __init__(
195196
self,
196-
parent,
197+
parent: Optional[SDocDocumentIF],
197198
elements: List[GrammarElement],
198199
import_from_file: Optional[str] = None,
199200
) -> None:
200-
self.parent = parent
201+
self.parent: Optional[SDocDocumentIF] = parent
201202
self.elements: List[GrammarElement] = elements
202203

203204
self.registered_elements: Set[str] = set()
@@ -217,7 +218,7 @@ def __init__(
217218
self.ng_col_start: Optional[int] = None
218219

219220
@staticmethod
220-
def create_default(parent) -> "DocumentGrammar":
221+
def create_default(parent: Optional[SDocDocumentIF]) -> "DocumentGrammar":
221222
text_element: GrammarElement = (
222223
DocumentGrammar.create_default_text_element()
223224
)
@@ -288,7 +289,7 @@ def create_default(parent) -> "DocumentGrammar":
288289
)
289290
# @relation(SDOC-SRS-132, scope=range_end)
290291

291-
requirement_element.relations = create_default_relations(
292+
requirement_element.relations = GrammarElement.create_default_relations(
292293
requirement_element
293294
)
294295

@@ -303,7 +304,7 @@ def create_default(parent) -> "DocumentGrammar":
303304
return grammar
304305

305306
@staticmethod
306-
def create_for_test_report(parent) -> "DocumentGrammar":
307+
def create_for_test_report(parent: SDocDocumentIF) -> "DocumentGrammar":
307308
text_element: GrammarElement = (
308309
DocumentGrammar.create_default_text_element()
309310
)
@@ -366,7 +367,7 @@ def create_for_test_report(parent) -> "DocumentGrammar":
366367
relations=[],
367368
)
368369

369-
requirement_element.relations = create_default_relations(
370+
requirement_element.relations = GrammarElement.create_default_relations(
370371
requirement_element
371372
)
372373

@@ -380,15 +381,15 @@ def create_for_test_report(parent) -> "DocumentGrammar":
380381

381382
return grammar
382383

383-
def get_element_by_mid(self, element_mid: str):
384+
def get_element_by_mid(self, element_mid: str) -> GrammarElement:
384385
for element_ in self.elements:
385386
if element_.mid == element_mid:
386387
return element_
387388
raise AssertionError(
388389
f"Could not find a grammar element with MID: {element_mid}"
389390
)
390391

391-
def dump_fields(self, node_type) -> str:
392+
def dump_fields(self, node_type: str) -> str:
392393
return ", ".join(
393394
list(
394395
map(
@@ -404,21 +405,21 @@ def has_text_element(self) -> bool:
404405
return True
405406
return False
406407

407-
def add_element_first(self, element: GrammarElement):
408+
def add_element_first(self, element: GrammarElement) -> None:
408409
self.elements.insert(0, element)
409410
self.elements_by_type[element.tag] = element
410411
self.registered_elements.add(element.tag)
411412
self.is_default = False
412413

413414
def update_element(
414415
self, existing_element: GrammarElement, updated_element: GrammarElement
415-
):
416+
) -> None:
416417
element_index = self.elements.index(existing_element)
417418
self.elements[element_index] = updated_element
418419
self.elements_by_type[updated_element.tag] = updated_element
419420
self.is_default = False
420421

421-
def update_with_elements(self, elements: List[GrammarElement]):
422+
def update_with_elements(self, elements: List[GrammarElement]) -> None:
422423
# When elements are created by code, not by textX, it is convenient
423424
# if their .parent is set here automatically.
424425
for element_ in elements:
@@ -435,7 +436,9 @@ def update_with_elements(self, elements: List[GrammarElement]):
435436
self.elements_by_type = elements_by_type
436437

437438
@staticmethod
438-
def create_default_text_element(parent=None) -> GrammarElement:
439+
def create_default_text_element(
440+
parent: Optional["DocumentGrammar"] = None,
441+
) -> GrammarElement:
439442
fields: List[
440443
Union[
441444
GrammarElementFieldString,

strictdoc/backend/sdoc/models/model.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from typing import Generator, List, Optional, Union
33

44
from strictdoc.backend.sdoc.models.document_config import DocumentConfig
5-
from strictdoc.backend.sdoc.models.document_grammar import DocumentGrammar
65
from strictdoc.core.document_meta import DocumentMeta
76

87

@@ -70,9 +69,13 @@ def get_display_title(self, include_toc_number: bool = True) -> str:
7069
raise NotImplementedError # pragma: no cover
7170

7271

72+
class SDocGrammarIF:
73+
pass
74+
75+
7376
class SDocDocumentIF(ABC):
7477
config: DocumentConfig
75-
grammar: Optional[DocumentGrammar]
78+
grammar: Optional[SDocGrammarIF]
7679
meta: Optional[DocumentMeta]
7780
section_contents: List["SDocSectionContentIF"]
7881
included_documents: List["SDocDocumentIF"]

strictdoc/backend/sdoc/models/node.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -590,10 +590,9 @@ def set_field_value(
590590
document: SDocDocumentIF = assert_cast(
591591
self.get_document(), SDocDocumentIF
592592
)
593-
grammar_or_none: Optional[DocumentGrammar] = document.grammar
594-
assert grammar_or_none is not None
595-
grammar: DocumentGrammar = grammar_or_none
596-
593+
grammar: DocumentGrammar = assert_cast(
594+
document.grammar, DocumentGrammar
595+
)
597596
element: GrammarElement = grammar.elements_by_type[self.node_type]
598597
grammar_field_titles = list(map(lambda f: f.title, element.fields))
599598
field_index = grammar_field_titles.index(field_name)

strictdoc/backend/sdoc/validations/sdoc_validator.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
GrammarElementFieldTag,
1919
RequirementFieldName,
2020
)
21+
from strictdoc.helpers.cast import assert_optional_cast
2122

2223
MULTIPLE_CHOICE_FIELD_KW = r"[a-zA-Z0-9\/\-_ ]+"
2324
MULTIPLE_CHOICE_FIELD_REGEX = re.compile(
@@ -83,7 +84,9 @@ def validate_grammar_element(
8384
)
8485

8586
# GrammarFromFile doesn't have a parent document.
86-
document: Optional[SDocDocument] = grammar_element.parent.parent
87+
document: Optional[SDocDocument] = assert_optional_cast(
88+
grammar_element.parent.parent, SDocDocument
89+
)
8790
if document is not None and document.config.enable_mid:
8891
if (
8992
grammar_element.tag != "TEXT"

0 commit comments

Comments
 (0)