File size: 633 Bytes
5716801
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from abc import ABC, abstractmethod
from argparse import ArgumentParser, _SubParsersAction, Namespace


class Subcommand(ABC):
    COMMAND: str
    HELP: str | None = None

    @classmethod
    def add(cls, subparsers: _SubParsersAction, parents) -> ArgumentParser:
        parser = subparsers.add_parser(cls.COMMAND, help=cls.HELP, parents=parents)
        cls.add_args(parser).set_defaults(func=cls.func)

        return parser

    @classmethod
    @abstractmethod
    def add_args(cls, parser: ArgumentParser) -> ArgumentParser:
        pass

    @classmethod
    @abstractmethod
    def func(cls, args: Namespace):
        pass