diff --git a/src/python/jw/pkg/cmds/distro/backend/BePkg.py b/src/python/jw/pkg/cmds/distro/backend/BePkg.py index f917f5c2..ac89ad4c 100644 --- a/src/python/jw/pkg/cmds/distro/backend/BePkg.py +++ b/src/python/jw/pkg/cmds/distro/backend/BePkg.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- from __future__ import annotations -from typing import TYPE_CHECKING +from typing import Iterable, TYPE_CHECKING import abc -from typing import Iterable +from ..lib.Package import Package from .Backend import Backend as Base if TYPE_CHECKING: @@ -16,9 +16,16 @@ class BePkg(Base): def __init__(self, parent: Parent): super().__init__(parent) - async def list_files(self, name: str) -> Iterable[str]: - return await self._list_files(name) + async def files(self, name: str) -> Iterable[str]: + return await self._files(name) @abc.abstractmethod - async def _list_files(self, name: str) -> Iterable[str]: + async def _files(self, name: str) -> Iterable[str]: + pass + + async def meta_data(self, names: Iterable[str]) -> Iterable[Package]: + return await self._meta_data(names) + + @abc.abstractmethod + async def _meta_data(self, names: Iterable[str]) -> Iterable[Package]: pass diff --git a/src/python/jw/pkg/cmds/distro/backend/debian/Pkg.py b/src/python/jw/pkg/cmds/distro/backend/debian/Pkg.py index 15adb991..030cd61b 100644 --- a/src/python/jw/pkg/cmds/distro/backend/debian/Pkg.py +++ b/src/python/jw/pkg/cmds/distro/backend/debian/Pkg.py @@ -4,7 +4,7 @@ from typing import Iterable from argparse import Namespace from ...lib.Package import Package -from ...lib.dpkg import list_files +from ...lib.dpkg import list_files, query_packages from ...Cmd import Cmd from ..BePkg import BePkg as Base @@ -13,5 +13,8 @@ class Pkg(Base): def __init__(self, parent: Cmd): super().__init__(parent) - async def _list_files(self, name: str) -> Iterable[Package]: + async def _files(self, name: str) -> Iterable[str]: return await list_files(name) + + async def _meta_data(self, names: Iterable[str]) -> Iterable[Package]: + return await query_packages(names) diff --git a/src/python/jw/pkg/cmds/distro/backend/suse/Pkg.py b/src/python/jw/pkg/cmds/distro/backend/suse/Pkg.py index 34011dd1..2832f5b5 100644 --- a/src/python/jw/pkg/cmds/distro/backend/suse/Pkg.py +++ b/src/python/jw/pkg/cmds/distro/backend/suse/Pkg.py @@ -4,7 +4,7 @@ from typing import Iterable from argparse import Namespace from ...lib.Package import Package -from ...lib.rpm import list_files +from ...lib.rpm import list_files, query_packages from ...Cmd import Cmd from ..BePkg import BePkg as Base @@ -13,5 +13,8 @@ class Pkg(Base): def __init__(self, parent: Cmd): super().__init__(parent) - async def _list_files(self, name: str) -> Iterable[Package]: + async def _files(self, name: str) -> Iterable[str]: return await list_files(name) + + async def _meta_data(self, names: Iterable[str]) -> Iterable[Package]: + return await query_packages(names) diff --git a/src/python/jw/pkg/cmds/distro/pkg/CmdMeta.py b/src/python/jw/pkg/cmds/distro/pkg/CmdMeta.py new file mode 100644 index 00000000..0f1cf6ee --- /dev/null +++ b/src/python/jw/pkg/cmds/distro/pkg/CmdMeta.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from argparse import Namespace, ArgumentParser + +from .Cmd import Cmd +from ..CmdPkg import CmdPkg + +class CmdMeta(Cmd): # export + + def __init__(self, parent: CmdPkg) -> None: + super().__init__(parent, 'meta', help="List package metadata") + + def add_arguments(self, parser: ArgumentParser) -> None: + super().add_arguments(parser) + + async def _run(self, args: Namespace) -> None: + for name in args.names: + packages = await self._backend.meta_data([name]) + if packages: + assert len(packages) == 1 + if len(args.names) > 1: + print(f'-- {name}') + print(packages[0])