simplify typed get

This commit is contained in:
Evgenii Alekseev 2024-09-11 03:14:23 +03:00
parent e53f744f9a
commit 4938f8ffe7
2 changed files with 9 additions and 12 deletions

View File

@ -267,9 +267,9 @@ class Package(LazyLogging):
for package, properties in pkgbuild.packages().items()
}
version = full_version(
pkgbuild.get_as("epoch", str, default=None),
pkgbuild.get_as("pkgver", str),
pkgbuild.get_as("pkgrel", str),
pkgbuild.get_as("epoch", default=None),
pkgbuild.get_as("pkgver"),
pkgbuild.get_as("pkgrel"),
)
remote = RemoteSource(
@ -281,7 +281,7 @@ class Package(LazyLogging):
)
return cls(
base=pkgbuild.get_as("pkgbase", str),
base=pkgbuild.get_as("pkgbase"),
version=version,
remote=remote,
packages=packages,
@ -440,9 +440,9 @@ class Package(LazyLogging):
pkgbuild = Pkgbuild.from_file(paths.cache_for(self.base) / "PKGBUILD")
return full_version(
pkgbuild.get_as("epoch", str, default=None),
pkgbuild.get_as("pkgver", str),
pkgbuild.get_as("pkgrel", str),
pkgbuild.get_as("epoch", default=None),
pkgbuild.get_as("pkgver"),
pkgbuild.get_as("pkgrel"),
)
except Exception:
self.logger.exception("cannot determine version of VCS package")

View File

@ -227,13 +227,12 @@ class Pkgbuild(Mapping[str, str | list[str]]):
case None:
raise StopIteration
def get_as(self, key: str, return_type: type[T], **kwargs: T | U) -> T | U:
def get_as(self, key: str, **kwargs: T | U) -> T | U:
"""
type guard for getting value by key
Args:
key(str): key name
return_type(type[T]): return type, either ``str`` or ``list[str]``
default(U, optional): default value to return if no key found
Returns:
@ -242,8 +241,6 @@ class Pkgbuild(Mapping[str, str | list[str]]):
Raises:
KeyError: if no key found and no default has been provided
"""
del return_type
if key not in self:
if "default" in kwargs:
return kwargs["default"]
@ -262,7 +259,7 @@ class Pkgbuild(Mapping[str, str | list[str]]):
def io(package_name: str) -> IO[str]:
# try to read package specific function and fallback to default otherwise
content = self.get_as(f"package_{package_name}", str, default=None) or self.get_as("package", str)
content = self.get_as(f"package_{package_name}", default=None) or self.get_as("package")
return StringIO(content)
return {package: self.from_io(io(package)) for package in packages}