diff --git a/src/packages.py b/src/packages.py index 09ab9fe..8261663 100644 --- a/src/packages.py +++ b/src/packages.py @@ -15,12 +15,9 @@ def obtain_packages() -> t.List[Package]: git_packages = yaml_file["git"] packages = [] - for package in pacman_packages: - packages.append(Package(package)) - for package in git_packages: - packages.append(Package(package, git=True)) - for package in aur_packages: - packages.append(Package(package, aur=True)) + packages += Package.safe_load(pacman_packages) + packages += Package.safe_load(aur_packages, aur=True) + packages += Package.safe_load(git_packages, git=True) return packages diff --git a/src/util/package.py b/src/util/package.py index ce954a6..e4a3a6a 100644 --- a/src/util/package.py +++ b/src/util/package.py @@ -1,4 +1,7 @@ +import typing as t + from src.util.install import Install +from src.util.user import Print class InvalidPackage(Exception): @@ -34,7 +37,7 @@ class Package: if self.aur: if not Install.is_installed("yay"): - raise InvalidPackage(f"Package {self} can't be installed (missing `yay` - AUR installation software)") + raise InvalidPackage(f"Package {self} can't be installed (missing `yay` - AUR installation software), alternatively, you can use git") Install.yay_install(self.name) elif self.git: Install.git_install(self.git_url) @@ -49,3 +52,14 @@ class Package: elif self.aur: return f"" return f"" + + @classmethod + def safe_load(cls, packages: t.List[str], aur: bool = False, git: bool = False) -> t.List["Package"]: + loaded_packages = [] + for package in packages: + try: + loaded_packages.append(cls(package, aur=aur, git=git)) + except InvalidPackage as e: + Print.warning(e) + + return loaded_packages