rbtools.commands.base¶
Base support for commands.
This provides support for writing and executing commands. This can be used by third-parties that want to introduce new commands for RBTools.
This module provides forwarding imports for:
Base class for RBTools commands. |
|
Abstract base class for commands which offer subcommands. |
|
Abstract base class for a subcommand. |
|
A general error for a command. |
|
An error indicating a command is ready to exit. |
|
An error indicating a command failed to parse some information. |
|
Represents an option for a command. |
|
Represents a named group of options. |
New in version 5.0.
- class rbtools.commands.base.BaseCommand(transport_cls: type[Transport] = <class 'rbtools.api.transport.sync.SyncTransport'>, stdout: TextIO = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, stderr: TextIO = <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>, stdin: TextIO = <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>)¶
Bases:
object
Base class for RBTools commands.
This class will handle retrieving the configuration, and parsing command line options.
usage
is a list of usage strings each showing a use case. These should not include the main rbt command or the command name; they will be added automatically.Changed in version 5.0: This moved from
rbtools.commands
torbtools.commands.base.commands
.- description: ClassVar[str] = ''¶
A short description of the command, suitable for display in usage text.
- Type:
- needs_api: ClassVar[bool] = False¶
Whether the command needs the API client.
If this is set, the initialization of the command will set
api_client
andapi_root
.New in version 3.0.
- Type:
- needs_diffs: ClassVar[bool] = False¶
Whether the command needs to generate diffs.
If this is set, the initialization of the command will check for the presence of a diff tool compatible with the chosen type of repository.
This depends on
needs_repository
andneeds_scm_client
both being set toTrue
.New in version 4.0.
- Type:
- needs_scm_client: ClassVar[bool] = False¶
Whether the command needs the SCM client.
If this is set, the initialization of the command will set
repository_info
andtool
.New in version 3.0.
- Type:
- needs_repository: ClassVar[bool] = False¶
Whether the command needs the remote repository object.
If this is set, the initialization of the command will set
repository
.Setting this will imply setting both
needs_api
andneeds_scm_client
toTrue
.New in version 3.0.
- Type:
- args: ClassVar[str] = ''¶
Usage text for what arguments the command takes.
Arguments for the command are anything passed in other than defined options (for example, revisions passed to rbt post).
- Type:
- option_list: ClassVar[list[Union[Option, OptionGroup]]] = []¶
Command-line options for this command.
- Type:
list
ofOption
orOptionGroup
- options: argparse.Namespace¶
Options parsed for the command.
- server_options = <rbtools.commands.base.options.OptionGroup object>¶
- repository_options = <rbtools.commands.base.options.OptionGroup object>¶
- diff_options = <rbtools.commands.base.options.OptionGroup object>¶
- branch_options = <rbtools.commands.base.options.OptionGroup object>¶
- git_options = <rbtools.commands.base.options.OptionGroup object>¶
- perforce_options = <rbtools.commands.base.options.OptionGroup object>¶
- subversion_options = <rbtools.commands.base.options.OptionGroup object>¶
- tfs_options = <rbtools.commands.base.options.OptionGroup object>¶
- default_transport_cls¶
alias of
SyncTransport
- __init__(transport_cls: type[Transport] = <class 'rbtools.api.transport.sync.SyncTransport'>, stdout: TextIO = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, stderr: TextIO = <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>, stdin: TextIO = <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>) None ¶
Initialize the base functionality for the command.
- Parameters:
transport_cls (
rbtools.api.transport.Transport
, optional) – The transport class used for all API communication. By default, this uses the transport defined indefault_transport_cls
.stdout (
io.TextIOWrapper
, optional) –The standard output stream. This can be used to capture output programmatically.
New in version 3.1.
stderr (
io.TextIOWrapper
, optional) –The standard error stream. This can be used to capture errors programmatically.
New in version 3.1.
stdin (
io.TextIOWrapper
, optional) –The standard input stream. This can be used to provide input programmatically.
New in version 3.1.
- log: logging.Logger¶
A logger for the command.
- api_client: Optional[RBClient]¶
The client used to connect to the API.
This will be set when the command is run if
needs_api
isTrue
. Otherwise it will beNone
.
- api_root: Optional[RootResource]¶
The root of the API tree.
This will be set when the command is run if
needs_api
isTrue
. Otherwise it will beNone
.
- capabilities: Optional[Capabilities]¶
Capabilities set by the API.
This will be set when the command is run if
needs_api
isTrue
. Otherwise it will beNone
.
- repository: Optional[Resource]¶
The resource for the matching repository.
This will be set when the command is run if both
needs_api
andneeds_repository
areTrue
.
- repository_info: Optional[RepositoryInfo]¶
Information on the local repository.
This will be set when the command is run if
needs_scm_client
is run. Otherwise it will beNone
.
- server_url: Optional[str]¶
The URL to the Review Board server.
This will be set when the command is run if
needs_api
isTrue
.
- tool: Optional[BaseSCMClient]¶
The client/tool used to communicate with the repository.
This will be set when the command is run if
needs_scm_client
is run. Otherwise it will beNone
.
- config: Optional[RBToolsConfig]¶
The loaded configuration for RBTools.
Changed in version 5.0: This is now a
RBToolsConfig
instance, instead of a plain dictionary.
- stdout: OutputWrapper[str]¶
The stream for writing standard output as Unicode strings.
Commands should write text using this instead of
print()
orsys.stdout()
.
- stderr: OutputWrapper[str]¶
The stream for writing error output as Unicode strings.
Commands should write error text using this instead of
print()
orsys.stderr()
.
- stdin: TextIO¶
The stream for reading standard input.
Commands should read input from here instead of using
sys.stdin()
.New in version 3.1.
- stdout_bytes: OutputWrapper[bytes]¶
The stream for writing standard output as byte strings.
Commands should write text using this instead of
print()
orsys.stdout()
.
- stderr_bytes: OutputWrapper[bytes]¶
The stream for writing error output as byte strings.
Commands should write error text using this instead of
print()
orsys.stderr()
.
- stdout_is_atty: bool¶
Whether the stdout stream is from an interactive session.
This applies to
stdout
.New in version 3.1.
- stderr_is_atty: bool¶
Whether the stderr stream is from an interactive session.
This applies to
stderr
.New in version 3.1.
- stdin_is_atty: bool¶
Whether the stdin stream is from an interactive session.
This applies to
stdin
.New in version 3.1.
- json: JSONOutput¶
An output buffer for JSON results.
Commands can set this to return data used when a command is passed
--json
.
- create_parser(config: RBToolsConfig, argv: Optional[list[str]] = None) argparse.ArgumentParser ¶
Return a new argument parser for this command.
- Parameters:
- Returns:
The new argument parser for the command.
- Return type:
- post_process_options() None ¶
Post-process options for the command.
This can validate and update options before the command is invoked.
- Raises:
rbtools.commands.base.errors.CommandError – There was an error found with an option.
- usage() str ¶
Return a usage string for the command.
- Returns:
Usage text for the command.
- Return type:
- initialize() None ¶
Initialize the command.
This will set up various prerequisites for commands. Individual command subclasses can control what gets done by setting the various
needs_*
attributes (as documented in this class).- Raises:
rbtools.commands.base.errors.CommandError – An error occurred while initializing the command.
rbtools.commands.base.errors.NeedsReinitialize – The initialization process needs to be restarted (due to loading additional config).
- create_arg_parser(argv: list[str]) argparse.ArgumentParser ¶
Create and return the argument parser.
- Parameters:
- Returns:
Argument parser for commandline arguments
- Return type:
- run_from_argv(argv: list[str]) None ¶
Execute the command using the provided arguments.
The options and commandline arguments will be parsed from
argv
and the commandsmain
method will be called.
- initialize_scm_tool(client_name: Optional[str] = None) tuple[RepositoryInfo, BaseSCMClient] ¶
Initialize the SCM tool for the current working directory.
Changed in version 5.0: Removed deprecated
require_repository_info
argument.- Parameters:
client_name (
str
, optional) – A specific client name, which can come from the configuration. This can be used to disambiguate if there are nested repositories, or to speed up detection.- Returns:
A 2-tuple:
- Tuple:
0 (
rbtools.clients.base.repository.RepositoryInfo
) – The repository information.1 (
rbtools.clients.base.scmclient.BaseSCMClient
) – The SCMTool client instance.
- Return type:
- credentials_prompt(realm: str, uri: str, username: Optional[str] = None, password: Optional[str] = None, *args, **kwargs) tuple[str, str] ¶
Prompt the user for credentials using the command line.
This will prompt the user, and then return the provided username and password. This is used as a callback in the API when the user requires authorization.
- Parameters:
realm (
str
) – The HTTP realm.uri (
str
) – The URI of the endpoint requiring authentication.username (
str
, optional) – The default username for authentication.password (
str
, optional) – The default password for authentication.*args (
tuple
, unused) – Unused additional positional arguments.**kwargs (
dict
, unused) – Unused additional keyword arguments.
- Returns:
A 2-tuple of:
- Return type:
- Raises:
rbtools.commands.base.errors.CommandError – HTTP authentication failed.
- otp_token_prompt(uri: str, token_method: str, *args, **kwargs) str ¶
Prompt the user for a one-time password token.
Their account is configured with two-factor authentication. The server will have sent a token to their configured mobile device or application. The user will be prompted for this token.
- get_api(server_url: str) tuple[RBClient, RootResource] ¶
Return an RBClient instance and the associated root resource.
Commands should use this method to gain access to the API, instead of instantianting their own client.
- Parameters:
server_url (
str
) – The URL to the Review Board server.- Returns:
A 2-tuple of:
- Tuple:
0 (
rbtools.api.client.RBClient
) – The new API client.1 (
rbtools.api.resource.RootResource
) – The root resource for the API.
- Return type:
- get_capabilities(api_root: RootResource) Capabilities ¶
Retrieve capabilities from the server and return them.
- Parameters:
api_root (
rbtools.api.resource.RootResource
) – The root resource- Returns:
The server capabilities.
- Return type:
- class rbtools.commands.base.BaseMultiCommand(transport_cls: type[Transport] = <class 'rbtools.api.transport.sync.SyncTransport'>, stdout: TextIO = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, stderr: TextIO = <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>, stdin: TextIO = <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>)¶
Bases:
BaseCommand
Abstract base class for commands which offer subcommands.
Some commands (such as rbt review) want to offer many subcommands.
New in version 3.0.
- subcommands: list[type[BaseSubCommand]] = []¶
The available subcommands.
This is a list of BaseSubCommand subclasses.
- Type:
- common_subcommand_option_list: list[Union[Option, OptionGroup]] = []¶
Options common to all subcommands.
- Type:
- subcommand: BaseSubCommand¶
The currently-running subcommand.
- subcommand_parsers: dict[str, argparse.ArgumentParser]¶
A mapping of subcommand names to argument parsers.
- usage(command_cls: Optional[type[rbtools.commands.base.commands.BaseSubCommand]] = None) str ¶
Return a usage string for the command.
- create_parser(config: RBToolsConfig, argv: Optional[list[str]] = None) argparse.ArgumentParser ¶
Create and return the argument parser for this command.
- Parameters:
- Returns:
The argument parser.
- Return type:
- class rbtools.commands.base.BaseSubCommand(options: Namespace, config: RBToolsConfig, *args, **kwargs)¶
Bases:
BaseCommand
Abstract base class for a subcommand.
- __init__(options: Namespace, config: RBToolsConfig, *args, **kwargs) None ¶
Initialize the subcommand.
- Parameters:
options (
argparse.Namespace
) – The parsed options.config (
rbtools.config.RBToolsConfigg
) – The loaded RBTools configuration.*args (
list
) – Positional arguments to pass to the Command class.**kwargs (
dict
) – Keyword arguments to pass to the Command class.
- exception rbtools.commands.base.CommandExit(exit_code: int = 0)¶
Bases:
Exception
An error indicating a command is ready to exit.
- class rbtools.commands.base.Option(*opts: str, **attrs)¶
Bases:
object
Represents an option for a command.
The arguments to the constructor should be treated like those to argparse’s add_argument, with the exception that the keyword argument ‘config_key’ is also valid. If config_key is provided it will be used to retrieve the config value as a default if the option is not specified. This will take precedence over the default argument.
Serves as a wrapper around the ArgumentParser options, allowing us to specify defaults which will be grabbed from the configuration after it is loaded.
New in version 5.0: This is the new location for the old
rbtools.commands.Option
class.- add_to(parent: argparse._ActionsContainer, config: Optional[RBToolsConfig] = None, argv: Optional[list[str]] = None) None ¶
Add the option to the parent parser or group.
If the option maps to a configuration key, this will handle figuring out the correct default.
Once we’ve determined the right set of flags, the option will be added to the parser.
- class rbtools.commands.base.OptionGroup(name: Optional[str] = None, description: Optional[str] = None, option_list: Optional[list[Option]] = None)¶
Bases:
object
Represents a named group of options.
Each group has a name, an optional description, and a list of options. It serves as a way to organize related options, making it easier for users to scan for the options they want.
This works like argparse’s argument groups, but is designed to work with our special Option class.
New in version 5.0: This is the new location for the old
rbtools.commands.OptionGroup
class.- __init__(name: Optional[str] = None, description: Optional[str] = None, option_list: Optional[list[Option]] = None) None ¶
Initialize the option group.
- add_to(parser: argparse.ArgumentParser, config: RBToolsConfig, argv: Optional[list[str]] = None) None ¶
Add the group and all its contained options to the parser.
- Parameters:
parser (
argparse.ArgumentParser
) – The command-line parser.config (
rbtools.config.RBToolsConfig
) – The loaded RBTools configuration.argv (
list
, deprecated) – Unused legacy argument.
- exception rbtools.commands.base.ParseError¶
Bases:
CommandError
An error indicating a command failed to parse some information.