mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-04-28 18:02:38 +02:00
move banner() code to cli & version() to util
- display_banner() was only displayed in CLI mode so it makes sense for it to be in the CLI. - get_version(), was mvoed to util since it is a static function that is needed in multiple parts of the application.
This commit is contained in:
parent
ce57fc0449
commit
c0f0e7bf6a
5 changed files with 203 additions and 200 deletions
|
@ -5,11 +5,12 @@ import sys
|
|||
from typing import Optional
|
||||
|
||||
import click
|
||||
from colorama import Fore, Style
|
||||
from colorama import Back, Fore, Style
|
||||
|
||||
from .common import Common
|
||||
from .container import convert
|
||||
from .global_common import GlobalCommon
|
||||
from .util import get_version
|
||||
|
||||
|
||||
def print_header(s: str) -> None:
|
||||
|
@ -28,7 +29,7 @@ def cli_main(
|
|||
global_common = GlobalCommon()
|
||||
common = Common()
|
||||
|
||||
global_common.display_banner()
|
||||
display_banner()
|
||||
|
||||
# Validate filename
|
||||
valid = True
|
||||
|
@ -127,3 +128,179 @@ def setup_logging() -> None:
|
|||
logging.basicConfig(level=logging.DEBUG, format=fmt)
|
||||
else:
|
||||
logging.basicConfig(level=logging.ERROR, format=fmt)
|
||||
|
||||
|
||||
def display_banner() -> None:
|
||||
"""
|
||||
Raw ASCII art example:
|
||||
╭──────────────────────────╮
|
||||
│ ▄██▄ │
|
||||
│ ██████ │
|
||||
│ ███▀▀▀██ │
|
||||
│ ███ ████ │
|
||||
│ ███ ██████ │
|
||||
│ ███ ▀▀▀▀████ │
|
||||
│ ███████ ▄██████ │
|
||||
│ ███████ ▄█████████ │
|
||||
│ ████████████████████ │
|
||||
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
|
||||
│ │
|
||||
│ Dangerzone v0.1.5 │
|
||||
│ https://dangerzone.rocks │
|
||||
╰──────────────────────────╯
|
||||
"""
|
||||
|
||||
print(Back.BLACK + Fore.YELLOW + Style.DIM + "╭──────────────────────────╮")
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ▄██▄ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ██████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███▀▀▀██ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███ ████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███ ██████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███ ▀▀▀▀████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███████ ▄██████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███████ ▄█████████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ████████████████████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(Back.BLACK + Fore.YELLOW + Style.DIM + "│ │")
|
||||
left_spaces = (15 - len(get_version()) - 1) // 2
|
||||
right_spaces = left_spaces
|
||||
if left_spaces + len(get_version()) + 1 + right_spaces < 15:
|
||||
right_spaces += 1
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Style.RESET_ALL
|
||||
+ Back.BLACK
|
||||
+ Fore.LIGHTWHITE_EX
|
||||
+ Style.BRIGHT
|
||||
+ f"{' '*left_spaces}Dangerzone v{get_version()}{' '*right_spaces}"
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Style.RESET_ALL
|
||||
+ Back.BLACK
|
||||
+ Fore.LIGHTWHITE_EX
|
||||
+ " https://dangerzone.rocks "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(Back.BLACK + Fore.YELLOW + Style.DIM + "╰──────────────────────────╯")
|
||||
|
|
|
@ -10,7 +10,6 @@ from typing import Optional
|
|||
|
||||
import appdirs
|
||||
import colorama
|
||||
from colorama import Back, Fore, Style
|
||||
|
||||
from .container import convert
|
||||
from .settings import Settings
|
||||
|
@ -25,15 +24,6 @@ class GlobalCommon(object):
|
|||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
# Version
|
||||
try:
|
||||
with open(get_resource_path("version.txt")) as f:
|
||||
self.version = f.read().strip()
|
||||
except FileNotFoundError:
|
||||
# In dev mode, in Windows, get_resource_path doesn't work properly for the container, but luckily
|
||||
# it doesn't need to know the version
|
||||
self.version = "unknown"
|
||||
|
||||
# Initialize terminal colors
|
||||
colorama.init(autoreset=True)
|
||||
|
||||
|
@ -210,181 +200,6 @@ class GlobalCommon(object):
|
|||
# Load settings
|
||||
self.settings = Settings(self)
|
||||
|
||||
def display_banner(self) -> None:
|
||||
"""
|
||||
Raw ASCII art example:
|
||||
╭──────────────────────────╮
|
||||
│ ▄██▄ │
|
||||
│ ██████ │
|
||||
│ ███▀▀▀██ │
|
||||
│ ███ ████ │
|
||||
│ ███ ██████ │
|
||||
│ ███ ▀▀▀▀████ │
|
||||
│ ███████ ▄██████ │
|
||||
│ ███████ ▄█████████ │
|
||||
│ ████████████████████ │
|
||||
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
|
||||
│ │
|
||||
│ Dangerzone v0.1.5 │
|
||||
│ https://dangerzone.rocks │
|
||||
╰──────────────────────────╯
|
||||
"""
|
||||
|
||||
print(Back.BLACK + Fore.YELLOW + Style.DIM + "╭──────────────────────────╮")
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ▄██▄ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ██████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███▀▀▀██ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███ ████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███ ██████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███ ▀▀▀▀████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███████ ▄██████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ███████ ▄█████████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ████████████████████ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Fore.LIGHTYELLOW_EX
|
||||
+ Style.NORMAL
|
||||
+ " ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(Back.BLACK + Fore.YELLOW + Style.DIM + "│ │")
|
||||
left_spaces = (15 - len(self.version) - 1) // 2
|
||||
right_spaces = left_spaces
|
||||
if left_spaces + len(self.version) + 1 + right_spaces < 15:
|
||||
right_spaces += 1
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Style.RESET_ALL
|
||||
+ Back.BLACK
|
||||
+ Fore.LIGHTWHITE_EX
|
||||
+ Style.BRIGHT
|
||||
+ f"{' '*left_spaces}Dangerzone v{self.version}{' '*right_spaces}"
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(
|
||||
Back.BLACK
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
+ Style.RESET_ALL
|
||||
+ Back.BLACK
|
||||
+ Fore.LIGHTWHITE_EX
|
||||
+ " https://dangerzone.rocks "
|
||||
+ Fore.YELLOW
|
||||
+ Style.DIM
|
||||
+ "│"
|
||||
)
|
||||
print(Back.BLACK + Fore.YELLOW + Style.DIM + "╰──────────────────────────╯")
|
||||
|
||||
def get_container_runtime(self) -> str:
|
||||
if platform.system() == "Linux":
|
||||
runtime_name = "podman"
|
||||
|
|
|
@ -23,3 +23,14 @@ def get_resource_path(filename: str) -> str:
|
|||
raise NotImplementedError(f"Unsupported system {platform.system()}")
|
||||
resource_path = prefix.joinpath(filename)
|
||||
return str(resource_path)
|
||||
|
||||
|
||||
def get_version() -> str:
|
||||
try:
|
||||
with open(get_resource_path("version.txt")) as f:
|
||||
version = f.read().strip()
|
||||
except FileNotFoundError:
|
||||
# In dev mode, in Windows, get_resource_path doesn't work properly for the container, but luckily
|
||||
# it doesn't need to know the version
|
||||
version = "unknown"
|
||||
return version
|
||||
|
|
|
@ -6,8 +6,9 @@ import tempfile
|
|||
|
||||
import pytest
|
||||
from click.testing import CliRunner, Result
|
||||
from strip_ansi import strip_ansi # type: ignore
|
||||
|
||||
from dangerzone.cli import cli_main
|
||||
from dangerzone.cli import cli_main, display_banner
|
||||
|
||||
from . import TestBase, for_each_doc
|
||||
|
||||
|
@ -39,6 +40,17 @@ class TestCliBasic(TestCli):
|
|||
result = self.run_cli("--help")
|
||||
assert result.exit_code == 0
|
||||
|
||||
def test_display_banner(self, capfd):
|
||||
display_banner() # call the test subject
|
||||
(out, err) = capfd.readouterr()
|
||||
plain_lines = [strip_ansi(line) for line in out.splitlines()]
|
||||
assert "╭──────────────────────────╮" in plain_lines, "missing top border"
|
||||
assert "╰──────────────────────────╯" in plain_lines, "missing bottom border"
|
||||
|
||||
banner_width = len(plain_lines[0])
|
||||
for line in plain_lines:
|
||||
assert len(line) == banner_width, "banner has inconsistent width"
|
||||
|
||||
|
||||
class TestCliConversion(TestCliBasic):
|
||||
def test_invalid_lang(self):
|
||||
|
|
|
@ -3,7 +3,6 @@ import platform
|
|||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from strip_ansi import strip_ansi # type: ignore
|
||||
|
||||
import dangerzone.global_common
|
||||
|
||||
|
@ -18,14 +17,3 @@ class TestGlobalCommon:
|
|||
def test_get_subprocess_startupinfo(self, global_common):
|
||||
startupinfo = global_common.get_subprocess_startupinfo()
|
||||
self.assertIsInstance(startupinfo, subprocess.STARTUPINFO)
|
||||
|
||||
def test_display_banner(self, global_common, capfd):
|
||||
global_common.display_banner() # call the test subject
|
||||
(out, err) = capfd.readouterr()
|
||||
plain_lines = [strip_ansi(line) for line in out.splitlines()]
|
||||
assert "╭──────────────────────────╮" in plain_lines, "missing top border"
|
||||
assert "╰──────────────────────────╯" in plain_lines, "missing bottom border"
|
||||
|
||||
banner_width = len(plain_lines[0])
|
||||
for line in plain_lines:
|
||||
assert len(line) == banner_width, "banner has inconsistent width"
|
||||
|
|
Loading…
Reference in a new issue