[common] refactoring: 'get_human_size_str' moved from 'system' to 'view_utils'

This commit is contained in:
Vinicius Moreira
2022-03-14 09:46:17 -03:00
parent 5538a52442
commit e1921facf8
12 changed files with 69 additions and 63 deletions

View File

@@ -7,6 +7,7 @@ import requests
import yaml import yaml
from bauh.commons import system from bauh.commons import system
from bauh.commons.view_utils import get_human_size_str
class HttpClient: class HttpClient:
@@ -102,7 +103,7 @@ class HttpClient:
size = self.get_content_length_in_bytes(url, session) size = self.get_content_length_in_bytes(url, session)
if size: if size:
return system.get_human_size_str(size) return get_human_size_str(size)
def exists(self, url: str, session: bool = True, timeout: int = 5) -> bool: def exists(self, url: str, session: bool = True, timeout: int = 5) -> bool:
params = {'url': url, 'allow_redirects': True, 'verify': False, 'timeout': timeout} params = {'url': url, 'allow_redirects': True, 'verify': False, 'timeout': timeout}

View File

@@ -22,9 +22,6 @@ if GLOBAL_PY_LIBS not in PATH:
USE_GLOBAL_INTERPRETER = bool(os.getenv('VIRTUAL_ENV')) USE_GLOBAL_INTERPRETER = bool(os.getenv('VIRTUAL_ENV'))
SIZE_UNITS = ((1, 'B'), (1024, 'Kb'), (1048576, 'Mb'), (1073741824, 'Gb'),
(1099511627776, 'Tb'), (1125899906842624, 'Pb'))
def gen_env(global_interpreter: bool, lang: str = DEFAULT_LANG, extra_paths: Optional[Set[str]] = None) -> dict: def gen_env(global_interpreter: bool, lang: str = DEFAULT_LANG, extra_paths: Optional[Set[str]] = None) -> dict:
custom_env = dict(os.environ) custom_env = dict(os.environ)
@@ -314,22 +311,6 @@ def get_dir_size(start_path='.'):
return total_size return total_size
def get_human_size_str(size) -> Optional[str]:
if type(size) in (int, float, str):
int_size = abs(int(size))
if int_size == 0:
return '0'
for div, unit in SIZE_UNITS:
size_unit = int_size / div
if size_unit < 1024:
size_unit = size_unit if size > 0 else size_unit * -1
return f'{int(size_unit)} {unit}' if unit == 'B' else f'{size_unit:.2f} {unit}'
def run(cmd: List[str], success_code: int = 0, custom_user: Optional[str] = None) -> Tuple[bool, str]: def run(cmd: List[str], success_code: int = 0, custom_user: Optional[str] = None) -> Tuple[bool, str]:
final_cmd = ['runuser', '-u', custom_user, '--', *cmd] if custom_user else cmd final_cmd = ['runuser', '-u', custom_user, '--', *cmd] if custom_user else cmd
p = subprocess.run(final_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.DEVNULL) p = subprocess.run(final_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.DEVNULL)

View File

@@ -3,6 +3,10 @@ from typing import List, Tuple, Optional
from bauh.api.abstract.view import SelectViewType, InputOption, SingleSelectComponent from bauh.api.abstract.view import SelectViewType, InputOption, SingleSelectComponent
SIZE_UNITS = ((1, 'B'), (1024, 'Kb'), (1048576, 'Mb'), (1073741824, 'Gb'),
(1099511627776, 'Tb'), (1125899906842624, 'Pb'))
def new_select(label: str, tip: str, id_: str, opts: List[Tuple[Optional[str], object, Optional[str]]], value: object, max_width: int, def new_select(label: str, tip: str, id_: str, opts: List[Tuple[Optional[str], object, Optional[str]]], value: object, max_width: int,
type_: SelectViewType = SelectViewType.RADIO, capitalize_label: bool = True): type_: SelectViewType = SelectViewType.RADIO, capitalize_label: bool = True):
inp_opts = [InputOption(label=o[0].capitalize(), value=o[1], tooltip=o[2]) for o in opts] inp_opts = [InputOption(label=o[0].capitalize(), value=o[1], tooltip=o[2]) for o in opts]
@@ -16,3 +20,19 @@ def new_select(label: str, tip: str, id_: str, opts: List[Tuple[Optional[str], o
type_=type_, type_=type_,
id_=id_, id_=id_,
capitalize_label=capitalize_label) capitalize_label=capitalize_label)
def get_human_size_str(size) -> Optional[str]:
if type(size) in (int, float, str):
int_size = abs(int(size))
if int_size == 0:
return '0'
for div, unit in SIZE_UNITS:
size_unit = int_size / div
if size_unit < 1024:
size_unit = size_unit if size > 0 else size_unit * -1
return f'{int(size_unit)} {unit}' if unit == 'B' else f'{size_unit:.2f} {unit}'

View File

@@ -5,7 +5,7 @@ from bauh.api.abstract.view import MultipleSelectComponent, InputOption, FormCom
SelectViewType SelectViewType
from bauh.commons import resource from bauh.commons import resource
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.system import get_human_size_str from bauh.commons.view_utils import get_human_size_str
from bauh.gems.arch import ROOT_DIR, get_repo_icon_path, get_icon_path, pacman from bauh.gems.arch import ROOT_DIR, get_repo_icon_path, get_icon_path, pacman
from bauh.view.util.translation import I18n from bauh.view.util.translation import I18n

View File

@@ -19,8 +19,9 @@ from bauh.api.abstract.view import ViewComponent, TextInputComponent, PanelCompo
SingleSelectComponent, InputOption, SelectViewType SingleSelectComponent, InputOption, SelectViewType
from bauh.api.paths import CONFIG_DIR from bauh.api.paths import CONFIG_DIR
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.system import get_human_size_str, ProcessHandler from bauh.commons.system import ProcessHandler
from bauh.commons.util import NullLoggerFactory from bauh.commons.util import NullLoggerFactory
from bauh.commons.view_utils import get_human_size_str
from bauh.gems.debian import DEBIAN_ICON_PATH from bauh.gems.debian import DEBIAN_ICON_PATH
from bauh.gems.debian.aptitude import Aptitude, AptitudeOutputHandlerFactory, AptitudeAction from bauh.gems.debian.aptitude import Aptitude, AptitudeOutputHandlerFactory, AptitudeAction
from bauh.gems.debian.common import fill_show_data from bauh.gems.debian.common import fill_show_data

View File

@@ -4,7 +4,7 @@ from typing import Collection, Optional, Tuple, List
from bauh.api.abstract.handler import ProcessWatcher from bauh.api.abstract.handler import ProcessWatcher
from bauh.api.abstract.view import InputOption, MultipleSelectComponent, TextComponent from bauh.api.abstract.view import InputOption, MultipleSelectComponent, TextComponent
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.system import get_human_size_str from bauh.commons.view_utils import get_human_size_str
from bauh.gems.debian import DEBIAN_ICON_PATH from bauh.gems.debian import DEBIAN_ICON_PATH
from bauh.gems.debian.model import DebianPackage from bauh.gems.debian.model import DebianPackage
from bauh.view.util.translation import I18n from bauh.view.util.translation import I18n

View File

@@ -16,8 +16,8 @@ from bauh.api.exception import NoInternetException
from bauh.commons.boot import CreateConfigFile from bauh.commons.boot import CreateConfigFile
from bauh.commons.category import CategoriesDownloader from bauh.commons.category import CategoriesDownloader
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.system import SystemProcess, ProcessHandler, new_root_subprocess, get_human_size_str from bauh.commons.system import SystemProcess, ProcessHandler, new_root_subprocess
from bauh.commons.view_utils import new_select from bauh.commons.view_utils import new_select, get_human_size_str
from bauh.gems.snap import snap, URL_CATEGORIES_FILE, CATEGORIES_FILE_PATH, SUGGESTIONS_FILE, \ from bauh.gems.snap import snap, URL_CATEGORIES_FILE, CATEGORIES_FILE_PATH, SUGGESTIONS_FILE, \
get_icon_path, snapd get_icon_path, snapd
from bauh.gems.snap.config import SnapConfigManager from bauh.gems.snap.config import SnapConfigManager

View File

@@ -30,7 +30,8 @@ from bauh.api.paths import DESKTOP_ENTRIES_DIR
from bauh.commons import resource from bauh.commons import resource
from bauh.commons.boot import CreateConfigFile from bauh.commons.boot import CreateConfigFile
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.system import ProcessHandler, get_dir_size, get_human_size_str, SimpleProcess from bauh.commons.system import ProcessHandler, get_dir_size, SimpleProcess
from bauh.commons.view_utils import get_human_size_str
from bauh.gems.web import INSTALLED_PATH, nativefier, DESKTOP_ENTRY_PATH_PATTERN, URL_FIX_PATTERN, ENV_PATH, UA_CHROME, \ from bauh.gems.web import INSTALLED_PATH, nativefier, DESKTOP_ENTRY_PATH_PATTERN, URL_FIX_PATTERN, ENV_PATH, UA_CHROME, \
SUGGESTIONS_CACHE_FILE, ROOT_DIR, TEMP_PATH, FIX_FILE_PATH, ELECTRON_CACHE_DIR, \ SUGGESTIONS_CACHE_FILE, ROOT_DIR, TEMP_PATH, FIX_FILE_PATH, ELECTRON_CACHE_DIR, \
get_icon_path, URL_PROPS_PATTERN get_icon_path, URL_PROPS_PATTERN

View File

@@ -14,7 +14,8 @@ from bauh.api.abstract.download import FileDownloader
from bauh.api.abstract.handler import ProcessWatcher from bauh.api.abstract.handler import ProcessWatcher
from bauh.api.http import HttpClient from bauh.api.http import HttpClient
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.system import ProcessHandler, SimpleProcess, get_human_size_str from bauh.commons.system import ProcessHandler, SimpleProcess
from bauh.commons.view_utils import get_human_size_str
from bauh.view.util.translation import I18n from bauh.view.util.translation import I18n
RE_HAS_EXTENSION = re.compile(r'.+\.\w+$') RE_HAS_EXTENSION = re.compile(r'.+\.\w+$')

View File

@@ -23,7 +23,8 @@ from bauh.api.exception import NoInternetException
from bauh.api.paths import LOGS_DIR from bauh.api.paths import LOGS_DIR
from bauh.commons.html import bold from bauh.commons.html import bold
from bauh.commons.internet import InternetChecker from bauh.commons.internet import InternetChecker
from bauh.commons.system import get_human_size_str, ProcessHandler, SimpleProcess from bauh.commons.system import ProcessHandler, SimpleProcess
from bauh.commons.view_utils import get_human_size_str
from bauh.view.core import timeshift from bauh.view.core import timeshift
from bauh.view.core.config import CoreConfigManager from bauh.view.core.config import CoreConfigManager
from bauh.view.qt import commons from bauh.view.qt import commons

View File

@@ -1,35 +0,0 @@
from unittest import TestCase
from bauh.commons import system
class GetHumanSizeStrTest(TestCase):
def test__must_properly_display_B(self):
self.assertEqual('1023 B', system.get_human_size_str(1023))
self.assertEqual('-1023 B', system.get_human_size_str(-1023))
def test__must_properly_convert_to_Kb(self):
self.assertEqual('1.00 Kb', system.get_human_size_str(1024))
self.assertEqual('1.50 Kb', system.get_human_size_str(1536))
self.assertEqual('1.75 Kb', system.get_human_size_str(1792))
self.assertEqual('57.30 Kb', system.get_human_size_str(58675.2))
self.assertEqual('-1.00 Kb', system.get_human_size_str(-1024))
def test__must_properly_convert_to_Mb(self):
self.assertEqual('1.00 Mb', system.get_human_size_str(1048576))
self.assertEqual('1.20 Mb', system.get_human_size_str(1258291))
self.assertEqual('1.50 Mb', system.get_human_size_str(1572864))
self.assertEqual('57.30 Mb', system.get_human_size_str(60083404.8))
def test__must_properly_convert_to_Gb(self):
self.assertEqual('1.00 Gb', system.get_human_size_str(1073741824))
self.assertEqual('57.30 Gb', system.get_human_size_str(61525406515.2))
def test__must_properly_convert_to_Tb(self):
self.assertEqual('1.00 Tb', system.get_human_size_str(1099511627776))
self.assertEqual('57.30 Tb', system.get_human_size_str(63002016271564.8))
def test__must_properly_convert_to_Pb(self):
self.assertEqual('1.00 Pb', system.get_human_size_str(1125899906842624))
self.assertEqual('57.30 Pb', system.get_human_size_str(64514064662082350))

View File

@@ -0,0 +1,35 @@
from unittest import TestCase
from bauh.commons.view_utils import get_human_size_str
class GetHumanSizeStrTest(TestCase):
def test__must_properly_display_B(self):
self.assertEqual('1023 B', get_human_size_str(1023))
self.assertEqual('-1023 B', get_human_size_str(-1023))
def test__must_properly_convert_to_Kb(self):
self.assertEqual('1.00 Kb', get_human_size_str(1024))
self.assertEqual('1.50 Kb', get_human_size_str(1536))
self.assertEqual('1.75 Kb', get_human_size_str(1792))
self.assertEqual('57.30 Kb', get_human_size_str(58675.2))
self.assertEqual('-1.00 Kb', get_human_size_str(-1024))
def test__must_properly_convert_to_Mb(self):
self.assertEqual('1.00 Mb', get_human_size_str(1048576))
self.assertEqual('1.20 Mb', get_human_size_str(1258291))
self.assertEqual('1.50 Mb', get_human_size_str(1572864))
self.assertEqual('57.30 Mb', get_human_size_str(60083404.8))
def test__must_properly_convert_to_Gb(self):
self.assertEqual('1.00 Gb', get_human_size_str(1073741824))
self.assertEqual('57.30 Gb', get_human_size_str(61525406515.2))
def test__must_properly_convert_to_Tb(self):
self.assertEqual('1.00 Tb', get_human_size_str(1099511627776))
self.assertEqual('57.30 Tb', get_human_size_str(63002016271564.8))
def test__must_properly_convert_to_Pb(self):
self.assertEqual('1.00 Pb', get_human_size_str(1125899906842624))
self.assertEqual('57.30 Pb', get_human_size_str(64514064662082350))