# # Copyright (c) 2021-2024 ahriman team. # # This file is part of ahriman # (see https://github.com/arcan1s/ahriman). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # import argparse from ahriman.application.application import Application from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.action import Action from ahriman.models.repository_id import RepositoryId class StatusUpdate(Handler): """ status update handler """ ALLOW_MULTI_ARCHITECTURE_RUN = False # conflicting io @classmethod def run(cls, args: argparse.Namespace, repository_id: RepositoryId, configuration: Configuration, *, report: bool) -> None: """ callback for command line Args: args(argparse.Namespace): command line args repository_id(RepositoryId): repository unique identifier configuration(Configuration): configuration instance report(bool): force enable or disable reporting """ application = Application(repository_id, configuration, report=True) client = application.repository.reporter match args.action: case Action.Update if args.package: # update packages statuses packages = application.repository.packages() for base in args.package: if (local := next((package for package in packages if package.base == base), None)) is not None: client.package_add(local, args.status) else: client.package_update(base, args.status) case Action.Update: # update service status client.status_update(args.status) case Action.Remove: for package in args.package: client.package_remove(package)