StrictDoc Documentation
strictdoc/features/diff_and_changelog/diff_screen_view_object.py
Source file coverage
Path:
strictdoc/features/diff_and_changelog/diff_screen_view_object.py
Lines:
78
Non-empty lines:
65
Non-empty lines covered with requirements:
65 / 65 (100.0%)
Functions:
9
Functions covered by requirements:
9 / 9 (100.0%)
1
"""
2
@relation(SDOC-SRS-111, scope=file)
3
"""
4
 
5
import urllib
6
from dataclasses import dataclass
7
from typing import List, Optional
8
 
9
from markupsafe import Markup
10
 
11
from strictdoc import __version__
12
from strictdoc.core.project_config import ProjectConfig
13
from strictdoc.export.html.html_templates import JinjaEnvironment
14
from strictdoc.export.html.renderers.link_renderer import LinkRenderer
15
 
16
 
17
@dataclass
18
class DiffScreenViewObject:
19
    def __init__(
20
        self,
21
        *,
22
        project_config: ProjectConfig,
23
        results: bool,
24
        left_revision: Optional[str],
25
        right_revision: Optional[str],
26
        error_message: Optional[str],
27
        tab: str,
28
    ):
29
        self.project_config: ProjectConfig = project_config
30
        self.results: bool = results
31
        self.left_revision: Optional[str] = left_revision
32
        self.right_revision: Optional[str] = right_revision
33
        # This screen (no results yet) never resolves tags, but form.jinja is
34
        # shared with DiffScreenResultsViewObject, so these must exist too.
35
        self.left_revision_tags: List[str] = []
36
        self.right_revision_tags: List[str] = []
37
        self.error_message: Optional[str] = error_message
38
        self.tab: str = tab
39
 
40
        link_renderer = LinkRenderer(
41
            root_path="", static_path=project_config.dir_for_sdoc_assets
42
        )
43
        self.link_renderer: LinkRenderer = link_renderer
44
        self.is_running_on_server: bool = project_config.is_running_on_server
45
        self.strictdoc_version = __version__
46
 
47
    def get_document_level(self) -> int:
48
        return 0
49
 
50
    @property
51
    def left_revision_urlencoded(self) -> str:
52
        return (
53
            urllib.parse.quote(self.left_revision)
54
            if self.left_revision is not None
55
            else ""
56
        )
57
 
58
    @property
59
    def right_revision_urlencoded(self) -> str:
60
        return (
61
            urllib.parse.quote(self.right_revision)
62
            if self.right_revision is not None
63
            else ""
64
        )
65
 
66
    def render_screen(self, jinja_environment: JinjaEnvironment) -> Markup:
67
        return jinja_environment.render_template_as_markup(
68
            "features/diff_and_changelog/index.jinja", view_object=self
69
        )
70
 
71
    def render_url(self, url: str) -> Markup:
72
        return Markup(self.link_renderer.render_url(url))
73
 
74
    def render_static_url(self, url: str) -> Markup:
75
        return Markup(self.link_renderer.render_static_url(url))
76
 
77
    def render_static_url_with_prefix(self, url: str) -> str:
78
        return self.link_renderer.render_static_url_with_prefix(url)