Path:
strictdoc/core/transforms/update_grammar.py
Lines:
63
Non-empty lines:
53
Non-empty lines covered with requirements:
53 / 53 (100.0%)
Functions:
3
Functions covered by requirements:
3 / 3 (100.0%)
1
"""2
@relation(SDOC-SRS-56, scope=file)3
"""4
5
from typing import Dict, List
6
7
from strictdoc.backend.sdoc.models.document import SDocDocument
8
from strictdoc.backend.sdoc.models.document_grammar import (
9
DocumentGrammar,
10
)11
from strictdoc.backend.sdoc.models.grammar_element import GrammarElement
12
from strictdoc.core.traceability_index import (
13
TraceabilityIndex,
14
)15
from strictdoc.export.html.form_objects.grammar_form_object import (
16
GrammarFormObject,
17
)18
19
20
class UpdateGrammarCommand:
21
def __init__(
22
self,
23
*,
24
form_object: GrammarFormObject,
25
document: SDocDocument,
26
traceability_index: TraceabilityIndex,
27
):28
self.form_object: GrammarFormObject = form_object
29
self.document: SDocDocument = document
30
self.traceability_index: TraceabilityIndex = traceability_index
31
32
def perform(self) -> bool:
33
form_object: GrammarFormObject = self.form_object
34
document: SDocDocument = self.document
35
36
form_element_names = map(
37
lambda field_: field_.field_name, form_object.fields
38
)39
40
map_existing_elements_by_name: Dict[str, GrammarElement] = {}
41
assert document.grammar is not None
42
for grammar_element_ in document.grammar.elements:
43
map_existing_elements_by_name[grammar_element_.tag] = (
44
grammar_element_45
)46
47
updated_grammar_elements: List[GrammarElement] = []
48
for form_element_name_ in form_element_names:
49
if form_element_name_ in map_existing_elements_by_name:
50
updated_grammar_elements.append(
51
map_existing_elements_by_name[form_element_name_]
52
)53
else:
54
updated_grammar_elements.append(
55
GrammarElement.create_default(form_element_name_)
56
)57
58
new_grammar = DocumentGrammar(
59
parent=document, elements=updated_grammar_elements
60
)61
document.grammar = new_grammar
62
63
return True