Backwards incompatible changes:
Wrapped exceptions now cause
SystemExit(1)instead of returning without error. For most users, this means failed commands will now exit with a failure status instead of a success. (#161)
Can control exit status (see Backwards Incompatible Changes above) when raising
Fixed bugs in tests (#171, #172)
A major cleanup.
Backward incompatible changes:
Dropped support for Python 2.7 and 3.7.
Deprecated features, to be removed in v.0.30:
Always True for recent versions of Python.
argh.io.safe_input() AKA argh.interaction.safe_input().
Not relevant anymore. Please use the built-in input() instead.
argument pre_call in dispatch().
Even though this hack seems to have been used in some projects, it was never part of the official API and never recommended.
Describing your use case in the discussion about shared arguments can help improve the library to accomodate it in a proper way.
Argument help as annotations.
Annotations will only be used for types after v.0.30.
Please replace any instance of:
def func(foo: "Foobar"):
with the following:
@arg('-f', '--foo', help="Foobar") def func(foo):
It will be decided later how to keep this functionality “DRY” (don’t repeat yourself) without conflicts with modern conventions and tools.
Added deprecation warnings for some arguments deprecated back in v.0.26.
Minor packaging fix:
chore: include file required by tox.ini in the sdist (#155)
Minor building and packaging fixes:
docs: add Read the Docs config (#160)
chore: include tox.ini in the sdist (#155)
This is the last version to support Python 2.7.
Backward incompatible changes:
Dropped support for Python 2.6.
Added support for Python 3.7 through 3.11.
Support introspection of function signature behind the @wraps decorator (issue #111).
When command function signature contained
**kwargsand positionals without defaults and with underscores in their names, a weird behaviour could be observed (issue #104).
Fixed introspection through decorators (issue #111).
Switched to Python’s built-in unittest.mock (PR #154).
Fixed bug with skip_unknown_args=True (PR #134).
Fixed tests for Python 3.9.7+ (issue #148).
Included the license files in manifest (PR #112).
Extended the list of similar projects (PR #87).
Fixed typos and links in documentation (PR #110, #116, #156).
Switched CI to Github Actions (PR #153).
Removed official support for Python 3.4, added for 3.5.
Various tox-related improvements for development.
The undocumented (and untested) argument dispatch(…, pre_call=x) was broken; fixing because at least one important app depends on it (issue #63).
This release is intended to be the last one before 1.0. Therefore a major cleanup was done. This breaks backward compatibility. If your code is really outdated, please read this list carefully and grep your code.
Removed decorator @alias (deprecated since v.0.19).
Removed decorator @plain_signature (deprecated since v.0.20).
Dropped support for old-style functions that implicitly expected namespace objects (deprecated since v.0.21). The @expects_obj decorator is now mandatory for such functions.
Removed decorator @command (deprecated since v.0.21).
The @wrap_errors decorator now strictly requires that the error classes are given as a list (old behaviour was deprecated since v.0.22).
The allow_warnings argument is removed from argh.completion.autocomplete(). Debug-level logging is used instead. (The warnings were deprecated since v.0.25).
Deprecated arguments title, help and description in add_commands() helper function. See documentation and issue #60.
Improved representation of default values in the help.
Dispatcher can be configured to skip unknown arguments (issue #57).
Added add_subcommands() helper function (a convenience wrapper for add_commands()).
EntryPoint now stores kwargs for the parser.
Added support for default command with nested commands (issue #78).
This only works with Python 3.4+ due to incorrect behaviour or earlier versions of Argparse (including the stand-alone one as of 1.2.1).
Due to argparse peculiarities the function assignment technique relies on a special ArghNamespace object. It is used by default in ArghParser and the shortcuts, but if you call the vanilla ArgumentParser.parse_args() method, you now have to supply the proper namespace object.
Help formatter was broken for arguments with empty strings as default values (issue #76).
Added EntryPoint class as another way to assemble functions (issue #59).
Added support for Python 3.4; dropped support for Python 3.3 (this doesn’t mean that Argh is necessarily broken under 3.3, it’s just that I’m not testing against it anymore).
Shell completion warnings are now deprecated in favour of logging.
The command help now displays default values of all arguments (issue #64).
Function docstrings are now displayed verbatim in the help (issue #64).
Argh’s dispatching now should work properly in Cython.