Path:
strictdoc/features/project_index/view_object.py
Lines:
102
Non-empty lines:
84
Non-empty lines covered with requirements:
84 / 84 (100.0%)
Functions:
13
Functions covered by requirements:
13 / 13 (100.0%)
1
"""2
@relation(SDOC-SRS-53, scope=file)3
"""4
5
from dataclasses import dataclass
6
from typing import Union
7
8
from markupsafe import Markup
9
10
from strictdoc import __version__
11
from strictdoc.backend.sdoc.models.anchor import Anchor
12
from strictdoc.backend.sdoc.models.document import SDocDocument
13
from strictdoc.backend.sdoc.models.node import SDocNode
14
from strictdoc.core.document_tree import DocumentTree
15
from strictdoc.core.document_tree_iterator import DocumentTreeIterator
16
from strictdoc.core.file_system.file_tree import File, Folder
17
from strictdoc.core.project_config import ProjectConfig
18
from strictdoc.core.traceability_index import TraceabilityIndex
19
from strictdoc.export.html.generators.view_objects.helpers import (
20
screen_should_display_file,
21
screen_should_display_folder,
22
)23
from strictdoc.export.html.html_templates import JinjaEnvironment
24
from strictdoc.export.html.renderers.link_renderer import LinkRenderer
25
from strictdoc.helpers.cast import assert_cast
26
27
28
@dataclass29
class ProjectTreeViewObject:
30
def __init__(
31
self,
32
*,
33
traceability_index: TraceabilityIndex,
34
project_config: ProjectConfig,
35
):36
self.traceability_index: TraceabilityIndex = traceability_index
37
self.project_config: ProjectConfig = project_config
38
39
link_renderer = LinkRenderer(
40
root_path="", static_path=project_config.dir_for_sdoc_assets
41
)42
self.link_renderer: LinkRenderer = link_renderer
43
44
self.document_tree_iterator: DocumentTreeIterator = (
45
DocumentTreeIterator(
46
assert_cast(traceability_index.document_tree, DocumentTree)
47
)48
)49
self.is_running_on_server: bool = project_config.is_running_on_server
50
self.strictdoc_version = __version__
51
self.contains_included_documents = (
52
traceability_index.contains_included_documents
53
)54
55
def render_local_anchor(
56
self, node: Union[Anchor, SDocNode, SDocDocument]
57
) -> str:
58
return self.link_renderer.render_local_anchor(node)
59
60
def render_screen(self, jinja_environment: JinjaEnvironment) -> Markup:
61
return jinja_environment.render_template_as_markup(
62
"features/project_index/index.jinja", view_object=self
63
)64
65
def render_map(self, jinja_environment: JinjaEnvironment) -> Markup:
66
return jinja_environment.render_template_as_markup(
67
"features/project_index/project_map.jinja.js", view_object=self
68
)69
70
def render_static_url(self, url: str) -> str:
71
return self.link_renderer.render_static_url(url)
72
73
def render_url(self, url: str) -> str:
74
return self.link_renderer.render_url(url)
75
76
def render_static_url_with_prefix(self, url: str) -> str:
77
return self.link_renderer.render_static_url_with_prefix(url)
78
79
def is_empty_tree(self) -> bool:
80
return self.document_tree_iterator.is_empty_tree()
81
82
def get_document_level(self) -> int:
83
return 0
84
85
def should_display_fragments_toggle(self) -> bool:
86
return self.project_config.export_included_documents
87
88
def should_display_folder(self, folder: Folder) -> bool:
89
return screen_should_display_folder(
90
folder,
91
self.traceability_index,
92
self.project_config,
93
must_only_include_non_included_sdoc=False,
94
)95
96
def should_display_file(self, file: File) -> bool:
97
return screen_should_display_file(
98
file,
99
self.traceability_index,
100
self.project_config,
101
must_only_include_non_included_sdoc=False,
102
)