__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
import argparse
from typing import Callable, Iterable, Optional, Union
from uaclient import messages
from uaclient.cli.parser import HelpCategory
class ProArgument:
def __init__(
self,
long_name: str,
help: str,
short_name: Optional[str] = None,
**kwargs
):
self.names = (
(long_name,) if short_name is None else (short_name, long_name)
)
self.help = help
self.additional_args = kwargs
def register(
self, target: Union[argparse.ArgumentParser, argparse._ArgumentGroup]
):
target.add_argument(
*self.names, help=self.help, **self.additional_args
)
class ProArgumentMutuallyExclusiveGroup:
def __init__(
self,
required: bool = False,
arguments: Iterable[ProArgument] = (),
):
self.required = required
self.arguments = arguments
class ProArgumentGroup:
def __init__(
self,
title: Optional[str] = None,
description: Optional[str] = None,
arguments: Iterable[ProArgument] = (),
mutually_exclusive_groups: Iterable[
ProArgumentMutuallyExclusiveGroup
] = (),
):
self.title = title
self.description = description
self.arguments = arguments
self.mutually_exclusive_groups = mutually_exclusive_groups
def register(self, parser: argparse.ArgumentParser):
target = (
parser
) # type: Union[argparse.ArgumentParser, argparse._ArgumentGroup]
if self.title:
target = parser.add_argument_group(self.title, self.description)
for argument in self.arguments:
argument.register(target)
for group in self.mutually_exclusive_groups:
new_group = target.add_mutually_exclusive_group(
required=group.required
)
for argument in group.arguments:
argument.register(new_group)
class ProCommand:
def __init__(
self,
name: str,
help: str,
description: str,
action: Callable = lambda *args, **kwargs: None,
preserve_description: bool = False,
argument_groups: Iterable[ProArgumentGroup] = (),
subcommands: Iterable["ProCommand"] = (),
help_category: Optional[HelpCategory] = None,
help_position: int = 0,
):
self.name = name
self.help = help
self.description = description
self.action = action
self.preserve_description = preserve_description
self.argument_groups = argument_groups
self.subcommands = subcommands
self.help_category = help_category
self.help_position = help_position
def register(self, subparsers: argparse._SubParsersAction):
self.parser = subparsers.add_parser(
self.name,
help=self.help,
description=self.description,
)
if self.preserve_description:
self.parser.formatter_class = argparse.RawDescriptionHelpFormatter
if self.help_category:
self.parser.add_help_entry(
category=self.help_category,
name=self.name,
help_string=self.help,
position=self.help_position,
)
for argument_group in self.argument_groups:
argument_group.register(self.parser)
self.parser.set_defaults(action=self.action)
if self.subcommands:
subparsers = self.parser.add_subparsers(
title=messages.CLI_AVAILABLE_COMMANDS,
dest="command",
)
for command in self.subcommands:
command.register(subparsers)
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 9.28 KB | 0644 |
|
| api.py | File | 2.4 KB | 0644 |
|
| attach.py | File | 5.48 KB | 0644 |
|
| auto_attach.py | File | 958 B | 0644 |
|
| cli_util.py | File | 8.08 KB | 0644 |
|
| collect_logs.py | File | 1.6 KB | 0644 |
|
| commands.py | File | 3.68 KB | 0644 |
|
| config.py | File | 10.72 KB | 0644 |
|
| cve.py | File | 6.73 KB | 0644 |
|
| cves.py | File | 3.78 KB | 0644 |
|
| detach.py | File | 3.38 KB | 0644 |
|
| disable.py | File | 10.65 KB | 0644 |
|
| enable.py | File | 18.81 KB | 0644 |
|
| fix.py | File | 28.63 KB | 0644 |
|
| formatter.py | File | 8.75 KB | 0644 |
|
| help.py | File | 1.67 KB | 0644 |
|
| parser.py | File | 2.72 KB | 0644 |
|
| refresh.py | File | 2.42 KB | 0644 |
|
| security_status.py | File | 2.79 KB | 0644 |
|
| status.py | File | 2.37 KB | 0644 |
|
| system.py | File | 1.05 KB | 0644 |
|