# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type from abc import ABCMeta, abstractmethod, abstractproperty class Command(metaclass=ABCMeta): """ Subcommands of :program:`build-ansible.py`. This defines an interface that all subcommands must conform to. :program:`build-ansible.py` will require that these things are present in order to proceed. """ @staticmethod @abstractproperty def name(): """Name of the subcommand. It's the string to invoked it via on the command line""" @staticmethod @abstractmethod def init_parser(add_parser): """ Initialize and register an argparse ArgumentParser :arg add_parser: function which creates an ArgumentParser for the main program. Implementations should first create an ArgumentParser using `add_parser` and then populate it with the command line arguments that are needed. .. seealso: `add_parser` information in the :py:meth:`ArgumentParser.add_subparsers` documentation. """ @staticmethod @abstractmethod def main(arguments): """ Run the command :arg arguments: The **parsed** command line args This is the Command's entrypoint. The command line args are already parsed but from here on, the command can do its work. """