summaryrefslogtreecommitdiffstats
path: root/hacking/build_library/build_ansible/commands.py
blob: 826799349e515f8bf2879b63113b6a7a1b98b2ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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.
        """