diff --git a/slpkg/binaries/queries.py b/slpkg/binaries/queries.py index 44261ea9..dad4c852 100644 --- a/slpkg/binaries/queries.py +++ b/slpkg/binaries/queries.py @@ -24,6 +24,14 @@ class BinQueries(Configs): if self.name in self.black.packages(): self.name: str = '' + def count_packages(self): + """ Counts the number of the packages. """ + count = self.session.query( + BinariesTable.id).where( + BinariesTable.repo == self.repo).count() + + return count + def all_package_names_by_repo(self) -> list: """ Returns all the names of the binaries packages. """ pkgs: tuple = self.session.query( diff --git a/slpkg/install_data.py b/slpkg/install_data.py index 6068a0a9..d3a9b71d 100644 --- a/slpkg/install_data.py +++ b/slpkg/install_data.py @@ -7,7 +7,8 @@ from slpkg.configs import Configs from slpkg.utilities import Utilities from slpkg.repositories import Repositories from slpkg.models.models import session as Session -from slpkg.models.models import SBoTable, PonceTable, BinariesTable +from slpkg.models.models import (SBoTable, PonceTable, + BinariesTable, LastRepoUpdated) class InstallData(Configs): @@ -24,6 +25,14 @@ class InstallData(Configs): self.byellow: str = f'{self.bold}{self.yellow}' self.endc: str = self.color['endc'] + def last_updated(self, repo_file: Path) -> str: + """ Reads the first date of the changelog file.""" + lines: list = self.utils.read_file(repo_file) + days = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') + for line in lines: + if line.startswith(days): + return line.replace('\n', '') + def install_sbos_data(self) -> None: """ Install the data for SBo repository. """ sbo_tags = [ @@ -39,10 +48,13 @@ class InstallData(Configs): 'SLACKBUILD SHORT DESCRIPTION:' ] sbo_table = SBoTable - path = Path(self.repos.sbo_repo_path, self.repos.sbo_repo_slackbuilds) + sbo_name: str = self.repos.sbo_repo_name + path: Path = Path(self.repos.sbo_repo_path, self.repos.sbo_repo_slackbuilds) + path_changelog: Path = Path(self.repos.sbo_repo_path, self.repos.sbo_repo_changelog) if self.repos.ponce_repo: sbo_table = PonceTable + sbo_name: str = self.repos.ponce_repo_name path = Path(self.repos.ponce_repo_path, self.repos.ponce_repo_slackbuilds) slackbuilds_txt: list = self.utils.read_file(path) @@ -68,6 +80,10 @@ class InstallData(Configs): cache: list = [] # reset cache after 11 lines + last_updated: str = self.last_updated(path_changelog) + date: str = LastRepoUpdated(repo=sbo_name, date=last_updated) + self.session.add(date) + print(f'{self.byellow}Done{self.endc}') self.session.commit() @@ -85,6 +101,7 @@ class InstallData(Configs): ] path_packages: Path = Path(self.repos.alien_repo_path, self.repos.alien_repo_packages) path_checksums: Path = Path(self.repos.alien_repo_path, self.repos.alien_repo_checksums) + path_changelog: Path = Path(self.repos.alien_repo_path, self.repos.alien_repo_changelog) packages_txt: list = self.utils.read_file(path_packages) checksums_md5: list = self.utils.read_file(path_checksums) @@ -154,6 +171,10 @@ class InstallData(Configs): cache: list = [] # reset cache + last_updated: str = self.last_updated(path_changelog) + date: str = LastRepoUpdated(repo=self.repos.alien_repo_name, date=last_updated) + self.session.add(date) + print(f'{self.byellow}Done{self.endc}') self.session.commit() @@ -171,6 +192,7 @@ class InstallData(Configs): ] path_packages: Path = Path(self.repos.gnome_repo_path, self.repos.gnome_repo_packages) path_checksums: Path = Path(self.repos.gnome_repo_path, self.repos.gnome_repo_checksums) + path_changelog: Path = Path(self.repos.gnome_repo_path, self.repos.gnome_repo_changelog) packages_txt: list = self.utils.read_file(path_packages) checksums_md5: list = self.utils.read_file(path_checksums) @@ -239,6 +261,10 @@ class InstallData(Configs): cache: list = [] # reset cache + last_updated: str = self.last_updated(path_changelog) + date: str = LastRepoUpdated(repo=self.repos.gnome_repo_name, date=last_updated) + self.session.add(date) + print(f'{self.byellow}Done{self.endc}') self.session.commit() @@ -256,6 +282,7 @@ class InstallData(Configs): ] path_packages: Path = Path(self.repos.conraid_repo_path, self.repos.conraid_repo_packages) path_checksums: Path = Path(self.repos.conraid_repo_path, self.repos.conraid_repo_checksums) + path_changelog: Path = Path(self.repos.conraid_repo_path, self.repos.conraid_repo_changelog) checksums_md5: list = self.utils.read_file(path_checksums) packages_txt: list = self.utils.read_file(path_packages) @@ -325,6 +352,10 @@ class InstallData(Configs): cache: list = [] # reset cache + last_updated: str = self.last_updated(path_changelog) + date: str = LastRepoUpdated(repo=self.repos.conraid_repo_name, date=last_updated) + self.session.add(date) + print(f'{self.byellow}Done{self.endc}') self.session.commit() @@ -342,6 +373,7 @@ class InstallData(Configs): ] path_packages: Path = Path(self.repos.slackonly_repo_path, self.repos.slackonly_repo_packages) path_checksums: Path = Path(self.repos.slackonly_repo_path, self.repos.slackonly_repo_checksums) + path_changelog: Path = Path(self.repos.slackonly_repo_path, self.repos.slackonly_repo_changelog) packages_txt: list = self.utils.read_file(path_packages) checksums_md5: list = self.utils.read_file(path_checksums) @@ -411,6 +443,10 @@ class InstallData(Configs): cache: list = [] # reset cache + last_updated: str = self.last_updated(path_changelog) + date: str = LastRepoUpdated(repo=self.repos.slackonly_repo_name, date=last_updated) + self.session.add(date) + print(f'{self.byellow}Done{self.endc}') self.session.commit() diff --git a/slpkg/main.py b/slpkg/main.py index f67141c5..8754d650 100644 --- a/slpkg/main.py +++ b/slpkg/main.py @@ -783,10 +783,10 @@ def main(): '-t': argparse.tracking } - try: - arguments[args[0]]() - except (KeyError, IndexError): - usage.help_short(1) + # try: + arguments[args[0]]() + # except (KeyError, IndexError): + usage.help_short(1) if __name__ == '__main__': diff --git a/slpkg/models/models.py b/slpkg/models/models.py index 213746f7..d0fcd882 100644 --- a/slpkg/models/models.py +++ b/slpkg/models/models.py @@ -90,4 +90,15 @@ class LogsDependencies(Base): requires: str = Column(Text) +@dataclass +class LastRepoUpdated(Base): + """ The table that saves the last updated date. """ + + __tablename__ = 'lastupdated' + + id: int = Column(Integer, primary_key=True) + repo: str = Column(Text) + date: str = Column(Text) + + Base.metadata.create_all(engine) diff --git a/slpkg/repo_info.py b/slpkg/repo_info.py index c78cf17c..e3705875 100644 --- a/slpkg/repo_info.py +++ b/slpkg/repo_info.py @@ -2,13 +2,14 @@ # -*- coding: utf-8 -*- import shutil -from pathlib import Path from slpkg.configs import Configs from slpkg.utilities import Utilities from slpkg.sbos.queries import SBoQueries from slpkg.repositories import Repositories from slpkg.binaries.queries import BinQueries +from slpkg.models.models import LastRepoUpdated +from slpkg.models.models import session as Session class RepoInfo(Configs): @@ -20,6 +21,7 @@ class RepoInfo(Configs): self.repos = Repositories() self.color = self.colour() self.columns, self.rows = shutil.get_terminal_size() + self.session = Session self.bold: str = self.color['bold'] self.green: str = self.color['green'] @@ -32,13 +34,14 @@ class RepoInfo(Configs): def info(self): """ Prints information about repositories. """ + total_packages: int = 0 + enabled: int = 0 + print('Repositories Information:') print('=' * self.columns) print(f"{'Name:':<18}{'Status:':<15}{'Last Updated:':<35}{'Packages:':>12}") print('=' * self.columns) - total_packages: int = 0 - enabled: int = 0 for repo, value in self.repos.repos_dict.items(): count: int = 0 status: str = 'Disabled' @@ -48,15 +51,20 @@ class RepoInfo(Configs): status: str = 'Enabled' color: str = self.green - last: str = self.last_update(Path(value[1], value[2])) + last: str = self.session.query( + LastRepoUpdated.date).where( + LastRepoUpdated.repo == repo).first() + + if last is None: + last: tuple = ('',) packages: dict = { - self.repos.sbo_repo_name: len(SBoQueries('').sbos()), - self.repos.ponce_repo_name: len(SBoQueries('').sbos()), - self.repos.alien_repo_name: len(BinQueries('', repo).all_package_names_by_repo()), - self.repos.gnome_repo_name: len(BinQueries('', repo).all_package_names_by_repo()), - self.repos.conraid_repo_name: len(BinQueries('', repo).all_package_names_by_repo()), - self.repos.slackonly_repo_name: len(BinQueries('', repo).all_package_names_by_repo()) + self.repos.sbo_repo_name: SBoQueries('').count_packages(), + self.repos.ponce_repo_name: SBoQueries('').count_packages(), + self.repos.alien_repo_name: BinQueries('', repo).count_packages(), + self.repos.gnome_repo_name: BinQueries('', repo).count_packages(), + self.repos.conraid_repo_name: BinQueries('', repo).count_packages(), + self.repos.slackonly_repo_name: BinQueries('', repo).count_packages() } if value[0]: @@ -64,16 +72,8 @@ class RepoInfo(Configs): total_packages += count - print(f"{self.cyan}{repo:<18}{self.endc}{color}{status:<15}{self.endc}{last:<35}" + print(f"{self.cyan}{repo:<18}{self.endc}{color}{status:<15}{self.endc}{last[0]:<35}" f"{self.yellow}{count:>12}{self.endc}") print('=' * self.columns) print(f"{self.grey}Total of {enabled} repositories are enabled with {total_packages} packages available.") - - def last_update(self, repo_file: Path) -> str: - """ Reads the first date of the changelog file.""" - lines: list = self.utils.read_file(repo_file) - days = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') - for line in lines: - if line.startswith(days): - return line.replace('\n', '') diff --git a/slpkg/sbos/queries.py b/slpkg/sbos/queries.py index 7e5ce76a..fe20d2fc 100644 --- a/slpkg/sbos/queries.py +++ b/slpkg/sbos/queries.py @@ -29,6 +29,13 @@ class SBoQueries(Configs): if self.repos.ponce_repo: self.sbo_table = PonceTable + def count_packages(self): + """ Counts the number of the packages. """ + count = self.session.query( + self.sbo_table.id).count() + + return count + def repo_name(self): """ Returns the repo name by the table. """ table = inspect(self.sbo_table) diff --git a/slpkg/update_repository.py b/slpkg/update_repository.py index 59d4bab8..4d358c1e 100644 --- a/slpkg/update_repository.py +++ b/slpkg/update_repository.py @@ -15,7 +15,8 @@ from slpkg.repositories import Repositories from slpkg.check_updates import CheckUpdates from slpkg.models.models import session as Session from slpkg.models.models import (Base, engine, SBoTable, - PonceTable, BinariesTable) + PonceTable, BinariesTable, + LastRepoUpdated) class UpdateRepository(Configs): @@ -87,6 +88,7 @@ class UpdateRepository(Configs): print() self.delete_binaries_data(self.repos.alien_repo_name) + self.delete_last_updated(self.repos.alien_repo_name) self.data.install_alien_data() print() else: @@ -112,6 +114,7 @@ class UpdateRepository(Configs): print() self.delete_binaries_data(self.repos.gnome_repo_name) + self.delete_last_updated(self.repos.gnome_repo_name) self.data.install_gnome_data() print() else: @@ -138,6 +141,7 @@ class UpdateRepository(Configs): print() self.delete_binaries_data(self.repos.conraid_repo_name) + self.delete_last_updated(self.repos.conraid_repo_name) self.data.install_conraid_data() print() else: @@ -164,6 +168,7 @@ class UpdateRepository(Configs): print() self.delete_binaries_data(self.repos.slackonly_repo_name) + self.delete_last_updated(self.repos.slackonly_repo_name) self.data.install_slackonly_data() print() else: @@ -192,6 +197,7 @@ class UpdateRepository(Configs): os.chdir(self.repos.ponce_repo_path) gen_command: str = f'./gen_sbo_txt.sh > {self.repos.ponce_repo_slackbuilds}' self.utils.process(gen_command) + self.delete_last_updated(self.repos.ponce_repo_name) print('\n') else: @@ -205,6 +211,7 @@ class UpdateRepository(Configs): lftp_command: str = (f'lftp {self.lftp_mirror_options} {self.repos.sbo_repo_mirror} ' f'{self.repos.sbo_repo_path}') self.utils.process(lftp_command) + self.delete_last_updated(self.repos.sbo_repo_name) self.delete_sbo_data() self.data.install_sbos_data() @@ -277,6 +284,11 @@ class UpdateRepository(Configs): self.session.query(BinariesTable).where(BinariesTable.repo == repo).delete() self.session.commit() + def delete_last_updated(self, repo) -> None: + """ Deletes the last updated date. """ + self.session.query(LastRepoUpdated).where(LastRepoUpdated.repo == repo).delete() + self.session.commit() + def drop_the_tables(self): """ Drop all the tables from the database. """ print(f'\n{self.prog_name}: {self.bred}WARNING{self.endc}: All the data from the database will be deleted!') @@ -285,7 +297,8 @@ class UpdateRepository(Configs): tables: list = [ PonceTable.__table__, SBoTable.__table__, - BinariesTable.__table__ + BinariesTable.__table__, + LastRepoUpdated.__table__ ] Base.metadata.drop_all(bind=engine, tables=tables)