diff --git a/configs/slpkg.toml b/configs/slpkg.toml index 3991a7ad..4c91289c 100644 --- a/configs/slpkg.toml +++ b/configs/slpkg.toml @@ -24,7 +24,7 @@ ASCII_CHARACTERS = true # SLACKBUILDS.ORG REPOSITORY CONFIGS. - SBO_REPO_PATH = "/var/lib/slpkg/repository/" + SBO_REPO_PATH = "/var/lib/slpkg/repository/sbo/" SBO_REPO_URL = "https://slackbuilds.org/slackbuilds/15.0/" SBO_TXT = "SLACKBUILDS.TXT" SBO_CHGLOG_TXT = "ChangeLog.txt" diff --git a/slpkg/configs.py b/slpkg/configs.py index 049d23c2..c3329391 100644 --- a/slpkg/configs.py +++ b/slpkg/configs.py @@ -41,13 +41,13 @@ class Configs: lib_path: str = Path('/var/lib/', prog_name) # type: ignore etc_path: str = Path('/etc/', prog_name) # type: ignore db_path: str = Path(lib_path, 'database') # type: ignore - sbo_repo_path: str = Path(lib_path, 'repository') # type: ignore log_packages: str = Path('/var', 'log', 'packages') # type: ignore # Database name. database_name: str = f'database.{prog_name}' # SBo repository configs. + sbo_repo_path: str = Path(lib_path, 'repository', 'sbo') # type: ignore sbo_repo_url: str = 'https://slackbuilds.org/slackbuilds/15.0/' sbo_txt: str = 'SLACKBUILDS.TXT' sbo_chglog_txt: str = 'ChangeLog.txt' diff --git a/slpkg/dependees.py b/slpkg/dependees.py index 00d77177..b8d5cb36 100644 --- a/slpkg/dependees.py +++ b/slpkg/dependees.py @@ -6,8 +6,8 @@ from slpkg.configs import Configs from slpkg.views.ascii import Ascii from slpkg.queries import SBoQueries from slpkg.utilities import Utilities -from slpkg.models.models import SBoTable from slpkg.models.models import session as Session +from slpkg.models.models import SBoTable, PonceTable class Dependees(Configs, Utilities): @@ -36,6 +36,11 @@ class Dependees(Configs, Utilities): self.flag_full_reverse: list = ['-E', '--full-reverse'] self.flag_pkg_version: list = ['-p', '--pkg-version'] + # Switch between sbo and ponce repository. + self.sbo_table = SBoTable + if self.ponce_repo: + self.sbo_table = PonceTable + def slackbuilds(self): """ Collecting the dependees. """ print(f"The list below shows the " @@ -79,7 +84,7 @@ class Dependees(Configs, Utilities): def find_requires(self, sbo: str) -> Generator[str, None, None]: """ Find requires that slackbuild dependees. """ - requires: list = self.session.query(SBoTable.name, SBoTable.requires).all() # type: ignore + requires: list = self.session.query(self.sbo_table.name, self.sbo_table.requires).all() # type: ignore for req in requires: if [r for r in req[1].split() if r == sbo]: yield req diff --git a/slpkg/create_data.py b/slpkg/install_data.py similarity index 75% rename from slpkg/create_data.py rename to slpkg/install_data.py index 32194c1d..e0b96fc5 100644 --- a/slpkg/create_data.py +++ b/slpkg/install_data.py @@ -8,8 +8,8 @@ from slpkg.queries import SBoQueries from slpkg.configs import Configs from slpkg.utilities import Utilities -from slpkg.models.models import SBoTable from slpkg.models.models import session as Session +from slpkg.models.models import SBoTable, PonceTable class CreateData(Configs): @@ -36,7 +36,13 @@ class CreateData(Configs): 'SLACKBUILD REQUIRES:', 'SLACKBUILD SHORT DESCRIPTION:' ] + sbo_table = SBoTable path = Path(self.sbo_repo_path, self.sbo_txt) + + if self.ponce_repo: + sbo_table = PonceTable + path = Path(self.ponce_repo_path, self.ponce_txt) + sbo_file: list = self.read_file(path) cache: list = [] # init cache @@ -51,11 +57,11 @@ class CreateData(Configs): cache.append(line) if (i % 11) == 0: - data: str = SBoTable(name=cache[0], location=cache[1].split('/')[1], - files=cache[2], version=cache[3], - download=cache[4], download64=cache[5], - md5sum=cache[6], md5sum64=cache[7], - requires=cache[8], short_description=cache[9]) + data: str = sbo_table(name=cache[0], location=cache[1].split('/')[1], + files=cache[2], version=cache[3], + download=cache[4], download64=cache[5], + md5sum=cache[6], md5sum64=cache[7], + requires=cache[8], short_description=cache[9]) self.session.add(data) cache: list = [] # reset cache after 11 lines diff --git a/slpkg/models/models.py b/slpkg/models/models.py index 315b7edd..9f53fce7 100644 --- a/slpkg/models/models.py +++ b/slpkg/models/models.py @@ -35,7 +35,26 @@ class SBoTable(Base): md5sum: str = Column(Text) # type: ignore md5sum64: str = Column(Text) # type: ignore requires: str = Column(Text) # type: ignore - short_description: str = Column(Text) # type: ignore + short_description: str = Column(Text) # type: ignore + + +@dataclass +class PonceTable(Base): + """ The main table for the SBo repository. """ + + __tablename__ = 'poncetable' + + id: int = Column(Integer, primary_key=True) # type: ignore + name: str = Column(Text) # type: ignore + location: str = Column(Text) # type: ignore + files: str = Column(Text) # type: ignore + version: str = Column(Text) # type: ignore + download: str = Column(Text) # type: ignore + download64: str = Column(Text) # type: ignore + md5sum: str = Column(Text) # type: ignore + md5sum64: str = Column(Text) # type: ignore + requires: str = Column(Text) # type: ignore + short_description: str = Column(Text) # type: ignore @dataclass diff --git a/slpkg/queries.py b/slpkg/queries.py index 3b495ab6..05cb2409 100644 --- a/slpkg/queries.py +++ b/slpkg/queries.py @@ -5,8 +5,8 @@ from typing import Union from slpkg.configs import Configs from slpkg.blacklist import Blacklist -from slpkg.models.models import SBoTable from slpkg.models.models import session as Session +from slpkg.models.models import SBoTable, PonceTable class SBoQueries(Configs): @@ -21,15 +21,20 @@ class SBoQueries(Configs): if self.name in self.black.packages(): self.name: str = '' + # Switch between sbo and ponce repository. + self.sbo_table = SBoTable + if self.ponce_repo: + self.sbo_table = PonceTable + def sbos(self) -> list: """ Returns all the slackbuilds. """ - sbos: tuple = self.session.query(SBoTable.name).all() # type: ignore + sbos: tuple = self.session.query(self.sbo_table.name).all() # type: ignore return [sbo[0] for sbo in sbos] def slackbuild(self) -> str: """ Returns a slackbuild. """ sbo: tuple = self.session.query( - SBoTable.name).filter(SBoTable.name == self.name).first() # type: ignore + self.sbo_table.name).filter(self.sbo_table.name == self.name).first() # type: ignore if sbo: return sbo[0] @@ -38,7 +43,7 @@ class SBoQueries(Configs): def location(self) -> str: """ Returns the category of a slackbuild. """ location: tuple = self.session.query( - SBoTable.location).filter(SBoTable.name == self.name).first() # type: ignore + self.sbo_table.location).filter(self.sbo_table.name == self.name).first() # type: ignore if location: return location[0] @@ -47,8 +52,8 @@ class SBoQueries(Configs): def sources(self) -> list: """ Returns the source of a slackbuild. """ source, source64 = self.session.query( - SBoTable.download, SBoTable.download64).filter( # type: ignore - SBoTable.name == self.name).first() + self.sbo_table.download, self.sbo_table.download64).filter( # type: ignore + self.sbo_table.name == self.name).first() if self.os_arch == 'x86_64' and source64: return source64.split() @@ -58,8 +63,8 @@ class SBoQueries(Configs): def requires(self) -> Union[str, list]: """ Returns the requirements of a slackbuild. """ requires: tuple = self.session.query( # type: ignore - SBoTable.requires).filter( # type: ignore - SBoTable.name == self.name).first() + self.sbo_table.requires).filter( # type: ignore + self.sbo_table.name == self.name).first() if requires: requires: list = requires[0].split() @@ -72,8 +77,8 @@ class SBoQueries(Configs): def version(self) -> str: """ Returns the version of a slackbuild. """ version: tuple = self.session.query( - SBoTable.version).filter( # type: ignore - SBoTable.name == self.name).first() + self.sbo_table.version).filter( # type: ignore + self.sbo_table.name == self.name).first() if version: return version[0] @@ -82,8 +87,8 @@ class SBoQueries(Configs): def checksum(self) -> list: """ Returns the source checksum. """ mds5, md5s64 = self.session.query( - SBoTable.md5sum, SBoTable.md5sum64).filter( # type: ignore - SBoTable.name == self.name).first() + self.sbo_table.md5sum, self.sbo_table.md5sum64).filter( # type: ignore + self.sbo_table.name == self.name).first() if self.os_arch == 'x86_64' and md5s64: return md5s64.split() @@ -93,8 +98,8 @@ class SBoQueries(Configs): def description(self) -> str: """ Returns the slackbuild description. """ desc: tuple = self.session.query( - SBoTable.short_description).filter( # type: ignore - SBoTable.name == self.name).first() + self.sbo_table.short_description).filter( # type: ignore + self.sbo_table.name == self.name).first() if desc: return desc[0] @@ -103,8 +108,8 @@ class SBoQueries(Configs): def files(self) -> str: """ Returns the files of a slackbuild. """ files: tuple = self.session.query( - SBoTable.files).filter( # type: ignore - SBoTable.name == self.name).first() + self.sbo_table.files).filter( # type: ignore + self.sbo_table.name == self.name).first() if files: return files[0] diff --git a/slpkg/update_repository.py b/slpkg/update_repository.py index c8510c3d..b8897a2b 100644 --- a/slpkg/update_repository.py +++ b/slpkg/update_repository.py @@ -10,12 +10,12 @@ from multiprocessing import Process from slpkg.configs import Configs from slpkg.utilities import Utilities from slpkg.downloader import Downloader -from slpkg.create_data import CreateData -from slpkg.models.models import SBoTable +from slpkg.install_data import CreateData from slpkg.views.views import ViewMessage from slpkg.progress_bar import ProgressBar from slpkg.check_updates import CheckUpdates from slpkg.models.models import session as Session +from slpkg.models.models import SBoTable, PonceTable class UpdateRepository(Configs, Utilities): @@ -63,8 +63,6 @@ class UpdateRepository(Configs, Utilities): self.delete_file(self.sbo_repo_path, self.sbo_txt) self.delete_file(self.sbo_repo_path, self.sbo_chglog_txt) - self.delete_sbo_data() - slackbuilds_txt: str = f'{self.sbo_repo_url}{self.sbo_txt}' changelog_txt: str = f'{self.sbo_repo_url}{self.sbo_chglog_txt}' @@ -74,6 +72,8 @@ class UpdateRepository(Configs, Utilities): down_sbo_changelog = Downloader(self.sbo_repo_path, changelog_txt, self.flags) down_sbo_changelog.download() + self.delete_sbo_data() + print() data = CreateData() data.insert_sbo_table() @@ -120,5 +120,8 @@ class UpdateRepository(Configs, Utilities): def delete_sbo_data(self) -> None: """ Delete the table from the database. """ - self.session.query(SBoTable).delete() + if self.ponce_repo: + self.session.query(PonceTable).delete() + else: + self.session.query(SBoTable).delete() self.session.commit() diff --git a/slpkg/views/view_package.py b/slpkg/views/view_package.py index f5f80f32..1f61e861 100644 --- a/slpkg/views/view_package.py +++ b/slpkg/views/view_package.py @@ -6,8 +6,8 @@ import urllib3 from slpkg.configs import Configs from slpkg.queries import SBoQueries from slpkg.utilities import Utilities -from slpkg.models.models import SBoTable from slpkg.models.models import session as Session +from slpkg.models.models import SBoTable, PonceTable class ViewPackage(Configs, Utilities): @@ -21,9 +21,12 @@ class ViewPackage(Configs, Utilities): self.session = Session self.flag_pkg_version: list = ['-p', '--pkg-version'] + # Switch between sbo and ponce repository. + self.sbo_table = SBoTable self.repo_url: str = self.sbo_repo_url self.repo_tar_suffix: str = self.sbo_tar_suffix if self.ponce_repo: + self.sbo_table = PonceTable self.repo_url: str = self.ponce_repo_url self.repo_tar_suffix: str = '' @@ -40,17 +43,17 @@ class ViewPackage(Configs, Utilities): for package in packages: info: list = self.session.query( - SBoTable.name, # type: ignore - SBoTable.version, # type: ignore - SBoTable.requires, # type: ignore - SBoTable.download, # type: ignore - SBoTable.download64, # type: ignore - SBoTable.md5sum, # type: ignore - SBoTable.md5sum64, # type: ignore - SBoTable.files, # type: ignore - SBoTable.short_description, # type: ignore - SBoTable.location # type: ignore - ).filter(SBoTable.name == package).first() + self.sbo_table.name, # type: ignore + self.sbo_table.version, # type: ignore + self.sbo_table.requires, # type: ignore + self.sbo_table.download, # type: ignore + self.sbo_table.download64, # type: ignore + self.sbo_table.md5sum, # type: ignore + self.sbo_table.md5sum64, # type: ignore + self.sbo_table.files, # type: ignore + self.sbo_table.short_description, # type: ignore + self.sbo_table.location # type: ignore + ).filter(self.sbo_table.name == package).first() readme = self.http_request(f'{self.repo_url}{info[9]}/{info[0]}/README')