Application framework for console-based python applications.
Project description
py-rebar
Another python console application skeleton.
Installing
pip install py-rebar
Framework workflow
The py-rebar application scaffold provides for a series of plugin points for business logic to be added.
graph TD;
f_init(Framework init)
f_argparse(argparse.ArgumentParser.parse_args)
f_configlogging(Config logging)
f_shut(Framework shutdown)
p_init[/"Init plugins #quot;pyrebar.preinit#quot;"/]
p_args[/"setup_args#40;parser#41; #quot;pyrebar.app#quot;"/]
p_postinit[/"Post init #40;args#41; #quot;pyrebar.postinit#quot;"/]
p_exec[/"execute#40;args#41; #quot;pyrebar.app#quot;"/]
p_shut[/"shutdown#40;#41; #quot;pyrebar.shutdown#quot;"/]
f_init --> p_init
p_init --Foreach pre-init-->p_init
p_init --> p_args
p_args --Foreach app-->p_args
p_args --> f_argparse
f_argparse --> f_configlogging
f_configlogging --> p_postinit
p_postinit --Foreach post-init-->p_postinit
p_postinit --> p_exec
p_exec --> p_shut
p_shut --Foreach post-app shutdown--> p_shut
p_shut --> f_shut
EntryPoints
Py-rebar provides several plugin points to add the business logic to this framework. This is done through python's entrypoint plugin architecture. A boostrap mechanism is available for scripts being run directly, rather than relying on installed modules.
Each of the entrypoint groups listed here is defined by as {prefix}.{group}
. These groups are defined assuming the default prefix of pyrebar
. Applications can override the default prefix by calling pyrebar.application.main
with a prefix.
pre_init
Application initializers can be added an entrypoint with the {prefix}.pre_init
group. These entrypoints must be a function that takes an optional parser=
keyword argument. The provided parser is the root command line parser.
It is important to note that all installed pre_init
entrypoint functions will be called prior to continuing. Any exceptions raised will cause the application to terminate.
post_init
Application initializers added to the {prefix}.post_init
group will be called after the command line is parsed and logging is configured, but before the main application is execution. These entrypoints must be a function that takes an optional args=
parameter. The provided value will be an argparse.Namespace
object holding the output of argparse.ArgumentParser.parse_args()
function.
It is important to note that all installed pre_init
entrypoint functions will be called prior to continuing. Any exceptions raised will trigger shutdown processing and cause the application to terminate.
app
Application entrypoints added to the {prefix}.app
must point to a python module. These modules contain one or more of the following specially-named variables and functions described below.
If multiple applications are found, they are registered as subcommands using the EntryPoint.name
property.
Variables (all are optional):
SUBCOMMAND: str
- If multiple apps are found, this overrides theEntryPoint.name
as the subcommand name.ALIASES: list[str]
- If multiple apps are found, this list provides the set of command aliases.LOGGER_NAME: str
- The application logger name. If not specified, the module name is used.
Functions:
config_args(parser:argparse.ArgumentParser)
- [optional] If specified, this function is called with the command line argument parser. If only one application is found, this will be the base parser. If multiple applications are found, this will be the subparser.execute(args:argparse.Namespace=None) -> int
- The main application execution function. Called with the parsed command line arguments. The return value is passed to asys.exit()
call and thus is passed back to the OS.
shutdown
Application shutdown hooks can be added to the {prefix}.shutdown
group. These entrypoints must point to a function that will be called without arguments.
These shutdown hooks are called before the application exits. Note that these hooks will be called even when an exception is raised out of the pre_init
or post_init
hooks. Any shutdown hook closing resources opened during an init phase must therefore handle the case the opening failed or was never called.
Bootstrapping
For applications run directly, rather than built + installed, there are 2 options for bootstrapping:
- Configure the entrypoints in
pyproject.toml
as described by the setuptools documentation. Then, callpyrebar.bootstrap_from_pyproject('path/to/pyproject.toml')
. - Additional
EntryPoint
instances can be explictly added in a__main__.py
using thepyrebar.Plugins.add_entrypoint()
method.
Examples
See the examples in the src/apps
directory.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file py-rebar-0.2.0.tar.gz
.
File metadata
- Download URL: py-rebar-0.2.0.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3c20ef9e770181ef7260815e722a5b498d4564641dfb632c5eaa86367afdd437 |
|
MD5 | 78580e0c6bd8f52a40f8132ec635d347 |
|
BLAKE2b-256 | 70adee0277cf4da18baa0136084fc2e73d173e8197f121ca67092da93b927076 |
File details
Details for the file py_rebar-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: py_rebar-0.2.0-py3-none-any.whl
- Upload date:
- Size: 11.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf5b7f76d65cdbb942f9a91ac6f2e87a9a9f3e511f87ffa5b7cef2b6f521d313 |
|
MD5 | b287275da23345696081df49786374b7 |
|
BLAKE2b-256 | 702c947ac4e9b054fe3ec47348e5b3b1048bb2da8ac7e93a8e22a91939bc8596 |