Blame dnf/cli/completion_helper.py.in

Packit Service 21c75c
#!@PYTHON_EXECUTABLE@
Packit Service 21c75c
#
Packit Service 21c75c
# This file is part of dnf.
Packit Service 21c75c
#
Packit Service 21c75c
# Copyright 2015 (C) Igor Gnatenko <i.gnatenko.brain@gmail.com>
Packit Service 21c75c
# Copyright 2016 (C) Red Hat, Inc.
Packit Service 21c75c
#
Packit Service 21c75c
# This program is free software; you can redistribute it and/or modify
Packit Service 21c75c
# it under the terms of the GNU General Public License as published by
Packit Service 21c75c
# the Free Software Foundation; either version 2 of the License, or
Packit Service 21c75c
# (at your option) any later version.
Packit Service 21c75c
#
Packit Service 21c75c
# This program is distributed in the hope that it will be useful,
Packit Service 21c75c
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 21c75c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 21c75c
# GNU General Public License for more details.
Packit Service 21c75c
#
Packit Service 21c75c
# You should have received a copy of the GNU General Public License
Packit Service 21c75c
# along with this program; if not, write to the Free Software
Packit Service 21c75c
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
Packit Service 21c75c
# 02110-1301  USA
Packit Service 21c75c
Packit Service 21c75c
import dnf.exceptions
Packit Service 21c75c
import dnf.cli
Packit Service 21c75c
import dnf.cli.commands.clean
Packit Service 21c75c
import sys
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
def filter_list_by_kw(kw, lst):
Packit Service 21c75c
    return filter(lambda k: str(k).startswith(kw), lst)
Packit Service 21c75c
Packit Service 21c75c
def listpkg_to_setstr(pkgs):
Packit Service 21c75c
    return set([str(x) for x in pkgs])
Packit Service 21c75c
Packit Service 21c75c
class RemoveCompletionCommand(dnf.cli.commands.remove.RemoveCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(RemoveCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def configure(self):
Packit Service 21c75c
        self.cli.demands.root_user = False
Packit Service 21c75c
        self.cli.demands.sack_activation = True
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        for pkg in ListCompletionCommand.installed(self.base, self.opts.pkg_specs):
Packit Service 21c75c
            print(str(pkg))
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
class InstallCompletionCommand(dnf.cli.commands.install.InstallCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(InstallCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def configure(self):
Packit Service 21c75c
        self.cli.demands.root_user = False
Packit Service 21c75c
        self.cli.demands.available_repos = True
Packit Service 21c75c
        self.cli.demands.sack_activation = True
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        installed = listpkg_to_setstr(ListCompletionCommand.installed(self.base,
Packit Service 21c75c
                                                                      self.opts.pkg_specs))
Packit Service 21c75c
        available = listpkg_to_setstr(ListCompletionCommand.available(self.base,
Packit Service 21c75c
                                                                      self.opts.pkg_specs))
Packit Service 21c75c
        for pkg in (available - installed):
Packit Service 21c75c
            print(str(pkg))
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
class ReinstallCompletionCommand(dnf.cli.commands.reinstall.ReinstallCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(ReinstallCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def configure(self):
Packit Service 21c75c
        self.cli.demands.root_user = False
Packit Service 21c75c
        self.cli.demands.available_repos = True
Packit Service 21c75c
        self.cli.demands.sack_activation = True
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        installed = listpkg_to_setstr(ListCompletionCommand.installed(self.base,
Packit Service 21c75c
                                                                      self.opts.pkg_specs))
Packit Service 21c75c
        available = listpkg_to_setstr(ListCompletionCommand.available(self.base,
Packit Service 21c75c
                                                                      self.opts.pkg_specs))
Packit Service 21c75c
        for pkg in (installed & available):
Packit Service 21c75c
            print(str(pkg))
Packit Service 21c75c
Packit Service 21c75c
class ListCompletionCommand(dnf.cli.commands.ListCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(ListCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        subcmds = self.pkgnarrows
Packit Service 21c75c
        args = self.opts.packages
Packit Service 21c75c
        action = self.opts.packages_action
Packit Service 21c75c
        if len(args) > 1 and args[1] not in subcmds:
Packit Service 21c75c
            print("\n".join(filter_list_by_kw(args[1], subcmds)))
Packit Service 21c75c
        else:
Packit Service 21c75c
            if action == "installed":
Packit Service 21c75c
                pkgs = self.installed(self.base, args)
Packit Service 21c75c
            elif action == "available":
Packit Service 21c75c
                pkgs = self.available(self.base, args)
Packit Service 21c75c
            elif action == "updates":
Packit Service 21c75c
                pkgs = self.updates(self.base, args)
Packit Service 21c75c
            else:
Packit Service 21c75c
                available = listpkg_to_setstr(self.available(self.base, args))
Packit Service 21c75c
                installed = listpkg_to_setstr(self.installed(self.base, args))
Packit Service 21c75c
                pkgs = (available | installed)
Packit Service 21c75c
                if not pkgs:
Packit Service 21c75c
                    print("\n".join(filter_list_by_kw(args[0], subcmds)))
Packit Service 21c75c
                    return
Packit Service 21c75c
            for pkg in pkgs:
Packit Service 21c75c
                print(str(pkg))
Packit Service 21c75c
Packit Service 21c75c
    @staticmethod
Packit Service 21c75c
    def installed(base, arg):
Packit Service 21c75c
        return base.sack.query().installed().filterm(name__glob="{}*".format(arg[0]))
Packit Service 21c75c
Packit Service 21c75c
    @staticmethod
Packit Service 21c75c
    def available(base, arg):
Packit Service 21c75c
        return base.sack.query().available().filterm(name__glob="{}*".format(arg[0]))
Packit Service 21c75c
Packit Service 21c75c
    @staticmethod
Packit Service 21c75c
    def updates(base, arg):
Packit Service 21c75c
        return base.check_updates(["{}*".format(arg[0])], print_=False)
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
class RepoListCompletionCommand(dnf.cli.commands.repolist.RepoListCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(RepoListCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        args = self.opts
Packit Service 21c75c
        if args.repos_action == "enabled":
Packit Service 21c75c
            print("\n".join(filter_list_by_kw(args.repos[0],
Packit Service 21c75c
                            [r.id for r in self.base.repos.iter_enabled()])))
Packit Service 21c75c
        elif args.repos_action == "disabled":
Packit Service 21c75c
            print("\n".join(filter_list_by_kw(args.repos[0],
Packit Service 21c75c
                            [r.id for r in self.base.repos.all() if not r.enabled])))
Packit Service 21c75c
        elif args.repos_action == "all":
Packit Service 21c75c
            print("\n".join(filter_list_by_kw(args.repos[0],
Packit Service 21c75c
                            [r.id for r in self.base.repos.all()])))
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
class UpgradeCompletionCommand(dnf.cli.commands.upgrade.UpgradeCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(UpgradeCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def configure(self):
Packit Service 21c75c
        self.cli.demands.root_user = False
Packit Service 21c75c
        self.cli.demands.available_repos = True
Packit Service 21c75c
        self.cli.demands.sack_activation = True
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        for pkg in ListCompletionCommand.updates(self.base, self.opts.pkg_specs):
Packit Service 21c75c
            print(str(pkg))
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
class DowngradeCompletionCommand(dnf.cli.commands.downgrade.DowngradeCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(DowngradeCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def configure(self):
Packit Service 21c75c
        self.cli.demands.root_user = False
Packit Service 21c75c
        self.cli.demands.available_repos = True
Packit Service 21c75c
        self.cli.demands.sack_activation = True
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        for pkg in ListCompletionCommand.available(self.base, self.opts.pkg_specs).downgrades():
Packit Service 21c75c
            print(str(pkg))
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
class CleanCompletionCommand(dnf.cli.commands.clean.CleanCommand):
Packit Service 21c75c
    def __init__(self, args):
Packit Service 21c75c
        super(CleanCompletionCommand, self).__init__(args)
Packit Service 21c75c
Packit Service 21c75c
    def run(self):
Packit Service 21c75c
        subcmds = dnf.cli.commands.clean._CACHE_TYPES.keys()
Packit Service 21c75c
        print("\n".join(filter_list_by_kw(self.opts.type[1], subcmds)))
Packit Service 21c75c
Packit Service 21c75c
Packit Service 21c75c
def main(args):
Packit Service 21c75c
    base = dnf.cli.cli.BaseCli()
Packit Service 21c75c
    cli = dnf.cli.Cli(base)
Packit Service 21c75c
    if args[0] == "_cmds":
Packit Service 21c75c
        base.init_plugins([], [], cli)
Packit Service 21c75c
        print("\n".join(filter_list_by_kw(args[1], cli.cli_commands)))
Packit Service 21c75c
        return
Packit Service 21c75c
    cli.cli_commands.clear()
Packit Service 21c75c
    cli.register_command(RemoveCompletionCommand)
Packit Service 21c75c
    cli.register_command(InstallCompletionCommand)
Packit Service 21c75c
    cli.register_command(ReinstallCompletionCommand)
Packit Service 21c75c
    cli.register_command(ListCompletionCommand)
Packit Service 21c75c
    cli.register_command(RepoListCompletionCommand)
Packit Service 21c75c
    cli.register_command(UpgradeCompletionCommand)
Packit Service 21c75c
    cli.register_command(DowngradeCompletionCommand)
Packit Service 21c75c
    cli.register_command(CleanCompletionCommand)
Packit Service 21c75c
    cli.configure(args)
Packit Service 21c75c
    try:
Packit Service 21c75c
        cli.run()
Packit Service 21c75c
    except (OSError, dnf.exceptions.Error):
Packit Service 21c75c
        sys.exit(0)
Packit Service 21c75c
Packit Service 21c75c
if __name__ == "__main__":
Packit Service 21c75c
    try:
Packit Service 21c75c
        main(sys.argv[1:])
Packit Service 21c75c
    except KeyboardInterrupt:
Packit Service 21c75c
        sys.exit(1)