slpkg/slpkg/tracking.py
Dimitris Zlatanidis a6b161e4ee Updated for data
2023-04-09 12:20:37 +03:00

97 lines
3.2 KiB
Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from slpkg.configs import Configs
from slpkg.views.ascii import Ascii
from slpkg.utilities import Utilities
from slpkg.blacklist import Blacklist
class Tracking(Configs):
""" Tracking of the package dependencies. """
def __init__(self, flags: list):
__slots__ = 'flags'
super(Configs, self).__init__()
self.flags: list = flags
self.ascii = Ascii()
self.color = self.colour()
self.utils = Utilities()
self.black = Blacklist()
self.llc: str = self.ascii.lower_left_corner
self.hl: str = self.ascii.horizontal_line
self.vl: str = self.ascii.vertical_line
self.cyan: str = self.color['cyan']
self.grey: str = self.color['grey']
self.yellow: str = self.color['yellow']
self.endc: str = self.color['endc']
self.flag_pkg_version: bool = self.utils.is_option(
['-p', '--pkg-version'], self.flags)
self.repo_for_binaries: bool = self.utils.is_option(
['-B', '--bin-repo='], self.flags)
def packages(self, data: dict, packages: list) -> None:
""" Prints the packages dependencies. """
print(f"The list below shows the packages '{', '.join([p for p in packages])}' with dependencies:\n")
sbo_repo_dict: dict = {}
bin_repo_dict: dict = {}
packages: list = self.utils.apply_package_pattern(data, packages)
if self.repo_for_binaries:
bin_repo_dict: dict = data
else:
sbo_repo_dict: dict = data
char: str = f' {self.llc}{self.hl}'
sp: str = ' ' * 4
for package in packages:
pkg = f'{self.yellow}{package}{self.endc}'
if self.flag_pkg_version:
if self.repo_for_binaries:
version: str = bin_repo_dict[package][0]
else:
version: str = sbo_repo_dict[package][2]
pkg = f'{self.yellow}{package} {version}{self.endc}'
if self.repo_for_binaries:
requires: list = bin_repo_dict[package][6].split()
else:
requires: list = sbo_repo_dict[package][7].split()
how_many: int = len(requires)
print(pkg)
print(char, end='')
if not requires:
print(f' {self.cyan}No dependencies{self.endc}')
else:
for i, req in enumerate(requires, start=1):
if req not in self.black.packages():
require: str = f'{self.cyan}{req}{self.endc}'
if self.flag_pkg_version:
if self.repo_for_binaries:
version: str = f" {self.yellow}{bin_repo_dict[req][0]}{self.endc}"
else:
version: str = f" {self.yellow}{sbo_repo_dict[req][2]}{self.endc}"
require: str = f'{self.cyan}{req}{self.endc}{version}'
if i == 1:
print(f' {require}')
else:
print(f'{sp}{require}')
print(f'\n{self.grey}{how_many} dependencies for {package}{self.endc}\n')