diff --git a/bauh/api/abstract/controller.py b/bauh/api/abstract/controller.py index 142d5bb4..2c9223b0 100644 --- a/bauh/api/abstract/controller.py +++ b/bauh/api/abstract/controller.py @@ -58,7 +58,7 @@ class SearchResult: class UpgradeRequirement: - def __init__(self, pkg: SoftwarePackage, reason: str = None, required_size: int = None, extra_size: int = None, sorting_priority: int = 0): + def __init__(self, pkg: SoftwarePackage, reason: str = None, required_size: float = None, extra_size: float = None, sorting_priority: int = 0): """ :param pkg: diff --git a/bauh/commons/util.py b/bauh/commons/util.py index 8f1ab298..8a87ece7 100644 --- a/bauh/commons/util.py +++ b/bauh/commons/util.py @@ -28,7 +28,7 @@ def deep_update(source: dict, overrides: dict): return source -def size_to_byte(size: float, unit: str) -> int: +def size_to_byte(size: float, unit: str) -> float: lower_unit = unit.lower() final_size = size @@ -36,19 +36,17 @@ def size_to_byte(size: float, unit: str) -> int: final_size /= 8 if lower_unit[0] == 'b': - pass + return final_size elif lower_unit[0] == 'k': - final_size = final_size * 1024 + return final_size * 1024 elif lower_unit[0] == 'm': - final_size = final_size * (1024 ** 2) + return final_size * (1024 ** 2) elif lower_unit[0] == 'g': - final_size = final_size * (1024 ** 3) + return final_size * (1024 ** 3) elif lower_unit[0] == 't': - final_size = final_size * (1024 ** 4) + return final_size * (1024 ** 4) else: - final_size = final_size * (1024 ** 5) - - return round(final_size) + return final_size * (1024 ** 5) def datetime_as_milis(date: datetime = datetime.utcnow()) -> int: diff --git a/bauh/gems/arch/pacman.py b/bauh/gems/arch/pacman.py index 24200df7..82974a31 100644 --- a/bauh/gems/arch/pacman.py +++ b/bauh/gems/arch/pacman.py @@ -474,7 +474,7 @@ def is_mirrors_available() -> bool: return bool(shutil.which('pacman-mirrors')) -def map_update_sizes(pkgs: List[str]) -> Dict[str, int]: # bytes: +def map_update_sizes(pkgs: List[str]) -> Dict[str, float]: # bytes: output = run_cmd('pacman -Si {}'.format(' '.join(pkgs))) if output: @@ -483,7 +483,7 @@ def map_update_sizes(pkgs: List[str]) -> Dict[str, int]: # bytes: return {} -def map_download_sizes(pkgs: List[str]) -> Dict[str, int]: # bytes: +def map_download_sizes(pkgs: List[str]) -> Dict[str, float]: # bytes: output = run_cmd('pacman -Si {}'.format(' '.join(pkgs))) if output: @@ -492,7 +492,7 @@ def map_download_sizes(pkgs: List[str]) -> Dict[str, int]: # bytes: return {} -def get_installed_size(pkgs: List[str]) -> Dict[str, int]: # bytes +def get_installed_size(pkgs: List[str]) -> Dict[str, float]: # bytes output = run_cmd('pacman -Qi {}'.format(' '.join(pkgs))) if output: diff --git a/bauh/gems/debian/model.py b/bauh/gems/debian/model.py index 6fcac582..1a0716e1 100644 --- a/bauh/gems/debian/model.py +++ b/bauh/gems/debian/model.py @@ -58,7 +58,7 @@ class DebianPackage(SoftwarePackage): description: Optional[str] = None, maintainer: Optional[str] = None, installed: bool = False, update: bool = False, app: Optional[DebianApplication] = None, compressed_size: Optional[int] = None, uncompressed_size: Optional[int] = None, categories: Tuple[str] = None, - updates_ignored: Optional[bool] = None, transaction_size: Optional[int] = None): + updates_ignored: Optional[bool] = None, transaction_size: Optional[float] = None): super(DebianPackage, self).__init__(id=name, name=name, version=version, installed=installed, description=description, update=update, latest_version=latest_version if latest_version is not None else version) diff --git a/bauh/gems/flatpak/flatpak.py b/bauh/gems/flatpak/flatpak.py index bd274138..6d6d053e 100755 --- a/bauh/gems/flatpak/flatpak.py +++ b/bauh/gems/flatpak/flatpak.py @@ -410,7 +410,7 @@ def run(app_id: str): subprocess.Popen((f'flatpak run {app_id}',), shell=True, env={**os.environ}) -def map_update_download_size(app_ids: Iterable[str], installation: str, version: Version) -> Dict[str, int]: +def map_update_download_size(app_ids: Iterable[str], installation: str, version: Version) -> Dict[str, float]: success, output = ProcessHandler().handle_simple(SimpleProcess(('flatpak', 'update', f'--{installation}'))) if version >= VERSION_1_2: res = {} diff --git a/bauh/view/qt/thread.py b/bauh/view/qt/thread.py index 84ed598a..9ff1f5b2 100644 --- a/bauh/view/qt/thread.py +++ b/bauh/view/qt/thread.py @@ -270,7 +270,7 @@ class UpgradeSelected(AsyncAction): read_only=True, icon_path=icon_path) - def _sum_pkgs_size(self, reqs: List[UpgradeRequirement]) -> Tuple[int, int]: + def _sum_pkgs_size(self, reqs: List[UpgradeRequirement]) -> Tuple[float, float]: required, extra = 0, 0 for r in reqs: if r.required_size is not None: diff --git a/tests/common/test_util.py b/tests/common/test_util.py index b5cbc2ce..a28cd3b8 100644 --- a/tests/common/test_util.py +++ b/tests/common/test_util.py @@ -8,26 +8,26 @@ class SizeToByteTest(TestCase): def test_must_return_right_number_of_bytes(self): self.assertEqual(1.0, size_to_byte(1, 'B')) self.assertEqual(1024, size_to_byte(1, 'K')) - self.assertEqual(round(float('58675.2')), size_to_byte(57.3, 'K')) + self.assertEqual(58675.2, size_to_byte(57.3, 'K')) self.assertEqual(1048576, size_to_byte(1, 'M')) - self.assertEqual(round(float('60083404.8')), size_to_byte(57.3, 'M')) + self.assertEqual(60083404.8, size_to_byte(57.3, 'M')) self.assertEqual(1073741824, size_to_byte(1, 'G')) - self.assertEqual(round(float('61525406515.2')), size_to_byte(57.3, 'G')) + self.assertEqual(61525406515.2, size_to_byte(57.3, 'G')) self.assertEqual(1099511627776, size_to_byte(1, 'T')) - self.assertEqual(round(float('63002016271564.8')), size_to_byte(57.3, 'T')) + self.assertEqual(63002016271564.8, size_to_byte(57.3, 'T')) self.assertEqual(1125899906842624, size_to_byte(1, 'P')) - self.assertEqual(round(float('64514064662082350')), size_to_byte(57.3, 'P')) + self.assertEqual(6383852471797678, size_to_byte(5.67, 'P')) def test_must_return_right_number_of_bytes_for_bit_units(self): self.assertEqual(1, size_to_byte(8, 'b')) self.assertEqual(2, size_to_byte(16, 'b')) self.assertEqual(128, size_to_byte(1, 'KiB')) - self.assertEqual(197460, size_to_byte(1542.66, 'KiB')) + self.assertEqual(197460.48, size_to_byte(1542.66, 'KiB')) self.assertEqual(131072, size_to_byte(1, 'MiB')) - self.assertEqual(546570, size_to_byte(4.17, 'MiB')) + self.assertEqual(546570.24, size_to_byte(4.17, 'MiB')) self.assertEqual(134217728, size_to_byte(1, 'GiB')) - self.assertEqual(2691065446, size_to_byte(20.05, 'GiB')) + self.assertEqual(2691065446.4, size_to_byte(20.05, 'GiB')) self.assertEqual(137438953472, size_to_byte(1, 'TiB')) - self.assertEqual(6926923254989, size_to_byte(50.4, 'TiB')) + self.assertEqual(6926923254988.8, size_to_byte(50.4, 'TiB')) self.assertEqual(140737488355328, size_to_byte(1, 'PiB')) - self.assertEqual(330733097635021, size_to_byte(2.35, 'PiB')) + self.assertEqual(330733097635020.8, size_to_byte(2.35, 'PiB')) diff --git a/tests/gems/debian/test_aptitude.py b/tests/gems/debian/test_aptitude.py index a8a5a93a..0e3f3409 100644 --- a/tests/gems/debian/test_aptitude.py +++ b/tests/gems/debian/test_aptitude.py @@ -109,7 +109,7 @@ Description: GNU C compiler 'section': 'web', 'maintainer': 'Distro Dev ', 'architecture': 'amd64', - 'uncompressed size': 247463936, + 'uncompressed size': 247463936.0, 'predepends': ('distro-system-adjustments (>= 2021.12.16)', ), 'breaks': ('firefox-dbg (< 95.0.1+distro1+una)', 'firefox-dev (< 95.0.1+distro1+una)', 'firefox-geckodriver (< 95.0.1+distro1+una)', 'firefox-mozsymbols (< 95.0.1+distro1+una)'), @@ -126,7 +126,7 @@ Description: GNU C compiler 'section': 'devel', 'maintainer': 'Distro Developers ', 'architecture': 'amd64', - 'uncompressed size': 52429, + 'uncompressed size': 52428.8, 'depends': ('cpp (= 4:9.3.0-1distro2)', 'gcc-9 (>= 9.3.0-3~)'), 'recommends': ('libc6-dev | libc-dev', ), 'suggests': ('gcc-multilib', 'make', 'manpages-dev', 'autoconf', 'automake', diff --git a/tests/gems/flatpak/test_flatpak.py b/tests/gems/flatpak/test_flatpak.py index 0244a2ae..10ab3600 100644 --- a/tests/gems/flatpak/test_flatpak.py +++ b/tests/gems/flatpak/test_flatpak.py @@ -20,4 +20,4 @@ class FlatpakTest(TestCase): SimpleProcess.assert_called_once() handle_simple.assert_called_once() - self.assertEqual({'org.xpto.Xnote': 4508877}, download_size) + self.assertEqual({'org.xpto.Xnote': 4508876.8}, download_size)