Viewing file: parse.py (2.21 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# -*- coding: utf-8 -*-
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT
from __future__ import absolute_import
import argparse from typing import Tuple, List, Dict, Any from clcommon.lib.cledition import is_cl_shared_pro_edition
class CustomFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.HelpFormatter): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs, width=200, max_help_position=30)
class ArgumentParser: """Helper to create parsers.""" def __init__(self, *args, **kwargs): self._parser = argparse.ArgumentParser(*args, **kwargs) self._subparser = self._parser.add_subparsers(dest='command', required=True) self._subparsers = {}
# to allow global arguments addition self.add_argument = self._parser.add_argument
def command(self, only_for_shared_pro=None, **kwargs): def decorator(method): if is_cl_shared_pro_edition() or not only_for_shared_pro: self._subparsers[method.__name__] = self._subparser.add_parser(method.__name__.replace("_", "-"), **kwargs) return method
return decorator
def argument(self, *args, **kwargs): def decorator(method): self._subparsers[method.__name__].add_argument(*args, **kwargs) return method
return decorator
def mutual_exclusive_group( self, arguments_params: List[Tuple[List[Any], Dict[str, Any]]], **kwargs, ): """ Create mutually exclusive group with arguments `argument_params` is a list of tuples with *args and **kwargs to create arguments in the group """ def decorator(method): group = self._subparsers[method.__name__].add_mutually_exclusive_group(**kwargs) for argument in arguments_params: group.add_argument(*argument[0], **argument[1])
return method
return decorator
def parse_args(self, args): return self._parser.parse_args(args)
|