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"
2
2
from collections import OrderedDict
3
3
from typing import Dict , Generator , List , Optional , Set , Tuple , Union
4
4
5
+ from strictdoc .backend .sdoc .models .model import SDocDocumentIF , SDocGrammarIF
5
6
from strictdoc .backend .sdoc .models .type_system import (
6
7
RESERVED_NON_META_FIELDS ,
7
8
GrammarElementField ,
17
18
from strictdoc .helpers .mid import MID
18
19
19
20
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
-
43
21
@auto_described ()
44
22
class GrammarElement :
45
23
def __init__ (
46
24
self ,
47
- parent ,
25
+ parent : Optional [ "DocumentGrammar" ] ,
48
26
tag : str ,
49
27
property_is_composite : str ,
50
28
fields : List [
@@ -55,8 +33,8 @@ def __init__(
55
33
]
56
34
],
57
35
relations : List ,
58
- ):
59
- self .parent = parent
36
+ ) -> None :
37
+ self .parent : Optional [ DocumentGrammar ] = parent
60
38
self .tag : str = tag
61
39
62
40
assert property_is_composite in ("" , "True" , "False" )
@@ -106,7 +84,7 @@ def __init__(
106
84
self .ng_col_start : Optional [int ] = None
107
85
108
86
@staticmethod
109
- def create_default (tag : str ):
87
+ def create_default (tag : str ) -> "GrammarElement" :
110
88
return GrammarElement (
111
89
parent = None ,
112
90
tag = tag ,
@@ -134,6 +112,29 @@ def create_default(tag: str):
134
112
relations = [],
135
113
)
136
114
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
+
137
138
def get_multiline_field_index (self ) -> int :
138
139
multiline_field_index = self .content_field [1 ]
139
140
assert multiline_field_index != - 1
@@ -152,7 +153,7 @@ def get_tag_lower(self) -> str:
152
153
153
154
def has_relation_type_role (
154
155
self , relation_type : str , relation_role : Optional [str ]
155
- ):
156
+ ) -> bool :
156
157
assert relation_role is None or len (relation_role ) > 0
157
158
for relation_ in self .relations :
158
159
if (
@@ -190,14 +191,14 @@ def enumerate_custom_content_field_titles(
190
191
yield field .title
191
192
192
193
193
- class DocumentGrammar :
194
+ class DocumentGrammar ( SDocGrammarIF ) :
194
195
def __init__ (
195
196
self ,
196
- parent ,
197
+ parent : Optional [ SDocDocumentIF ] ,
197
198
elements : List [GrammarElement ],
198
199
import_from_file : Optional [str ] = None ,
199
200
) -> None :
200
- self .parent = parent
201
+ self .parent : Optional [ SDocDocumentIF ] = parent
201
202
self .elements : List [GrammarElement ] = elements
202
203
203
204
self .registered_elements : Set [str ] = set ()
@@ -217,7 +218,7 @@ def __init__(
217
218
self .ng_col_start : Optional [int ] = None
218
219
219
220
@staticmethod
220
- def create_default (parent ) -> "DocumentGrammar" :
221
+ def create_default (parent : Optional [ SDocDocumentIF ] ) -> "DocumentGrammar" :
221
222
text_element : GrammarElement = (
222
223
DocumentGrammar .create_default_text_element ()
223
224
)
@@ -288,7 +289,7 @@ def create_default(parent) -> "DocumentGrammar":
288
289
)
289
290
# @relation(SDOC-SRS-132, scope=range_end)
290
291
291
- requirement_element .relations = create_default_relations (
292
+ requirement_element .relations = GrammarElement . create_default_relations (
292
293
requirement_element
293
294
)
294
295
@@ -303,7 +304,7 @@ def create_default(parent) -> "DocumentGrammar":
303
304
return grammar
304
305
305
306
@staticmethod
306
- def create_for_test_report (parent ) -> "DocumentGrammar" :
307
+ def create_for_test_report (parent : SDocDocumentIF ) -> "DocumentGrammar" :
307
308
text_element : GrammarElement = (
308
309
DocumentGrammar .create_default_text_element ()
309
310
)
@@ -366,7 +367,7 @@ def create_for_test_report(parent) -> "DocumentGrammar":
366
367
relations = [],
367
368
)
368
369
369
- requirement_element .relations = create_default_relations (
370
+ requirement_element .relations = GrammarElement . create_default_relations (
370
371
requirement_element
371
372
)
372
373
@@ -380,15 +381,15 @@ def create_for_test_report(parent) -> "DocumentGrammar":
380
381
381
382
return grammar
382
383
383
- def get_element_by_mid (self , element_mid : str ):
384
+ def get_element_by_mid (self , element_mid : str ) -> GrammarElement :
384
385
for element_ in self .elements :
385
386
if element_ .mid == element_mid :
386
387
return element_
387
388
raise AssertionError (
388
389
f"Could not find a grammar element with MID: { element_mid } "
389
390
)
390
391
391
- def dump_fields (self , node_type ) -> str :
392
+ def dump_fields (self , node_type : str ) -> str :
392
393
return ", " .join (
393
394
list (
394
395
map (
@@ -404,21 +405,21 @@ def has_text_element(self) -> bool:
404
405
return True
405
406
return False
406
407
407
- def add_element_first (self , element : GrammarElement ):
408
+ def add_element_first (self , element : GrammarElement ) -> None :
408
409
self .elements .insert (0 , element )
409
410
self .elements_by_type [element .tag ] = element
410
411
self .registered_elements .add (element .tag )
411
412
self .is_default = False
412
413
413
414
def update_element (
414
415
self , existing_element : GrammarElement , updated_element : GrammarElement
415
- ):
416
+ ) -> None :
416
417
element_index = self .elements .index (existing_element )
417
418
self .elements [element_index ] = updated_element
418
419
self .elements_by_type [updated_element .tag ] = updated_element
419
420
self .is_default = False
420
421
421
- def update_with_elements (self , elements : List [GrammarElement ]):
422
+ def update_with_elements (self , elements : List [GrammarElement ]) -> None :
422
423
# When elements are created by code, not by textX, it is convenient
423
424
# if their .parent is set here automatically.
424
425
for element_ in elements :
@@ -435,7 +436,9 @@ def update_with_elements(self, elements: List[GrammarElement]):
435
436
self .elements_by_type = elements_by_type
436
437
437
438
@staticmethod
438
- def create_default_text_element (parent = None ) -> GrammarElement :
439
+ def create_default_text_element (
440
+ parent : Optional ["DocumentGrammar" ] = None ,
441
+ ) -> GrammarElement :
439
442
fields : List [
440
443
Union [
441
444
GrammarElementFieldString ,
0 commit comments