Delayed logging on startup, initial log messages are stored (critical messages are still displayed) to allow for logging to be configured before the stored messages are replayed for the now active logger. This also opens up the option of file only based logging.
Command signature can now accept the Optional values for both positional are optional arguments, this allows for optional positional arguments.
Argument grouping support enable, with builtin CLI commands grouped.
Single file scripts. A single script can now be used with pyApp, allowing even quick scripts to take advantage of pyApp features and extensions.
Command signature generation. CLI arguments are generated from the arguments signature of the command function.
Improvements to checks to handle unexpected exceptions. Rather than checks outright failing errors are caught and reported along with a stack trace.
Switch to using poetry
Custom logging configuration was not being applied for logging defined in settings
Using an _ in a positional argument signature caused an exception in argparse
Positional arguments caused an exception in argparse, a entire new suit of tests was added to address this issue.
app.commandcan not be applied to async functions and handle the event loop.
app.defaultnow returns a Command Proxy supporting async and additional command line arguments.
Added Object config loader, to aid in integration into other frameworks eg Django.
Add argument action for handling Enums
Add argument type for validation with regex
Utilisation of pylint to improve and maintain code quality.
Use sys.exit instead of the exit.
Fix command aliases not being resolved at run-time bug.
inject_intodecorator has been removed use the simpler
injectdecorator in it’s place.
Coloured log output be default (for ttys)
Root module no longer required for CliApplication, is auto resolved (most of the time)
Added compatibility tools for marking methods to be deprecated.
sys.exitfor compatibility with pyinstaller.
Greatly improved documentation, some sections re-written to improve clarity.
Correct when event bindings are stored.
pyapp.injection.injectwill be removed in 4.2.0.
Aliases for NamedPluginFactory entries
Generate explicit CannotImport exception if an invalid object is specified to a NamedFactory.
Have checks handle import errors
Added callbacks in addition to events
Added specific exceptions for NamedFactories
Added NoDefault mode
Updated extension report to report code (so extensions that register multiple items don’t just look like duplicates)
Shorted name of inject_into to inject (left alias of inject_into)
Shorted name of FactoryArgs to Args (left alias of FactoryArgs)
Added registration of factories into CliApplication, initially supports the asyncio event loop.