Skip to main content

deprecate-kwargs

formatting pytest codecov PyPI downloads license GitHub Release Date - Published_At GitHub commits since latest release (by SemVer including pre-releases)

A Tool for Deprecating (Keyword) Arguments for Backward Compatibility for Python Functions.

A decorator is implemented to deprecate old kwargs in a function, with signature and docstring modified accordingly. Instead of replacing the old kwargs with new ones, this decorator makes old and new kwargs both available, with warnings raised when old kwargs are passed.

Installation

Run

python -m pip install deprecate-kwargs

or install the latest version in GitHub using

python -m pip install git+https://github.com/DeepPSP/deprecate-kwargs.git

Usage Example

>>> from deprecate_kwargs import deprecate_kwargs
>>> @deprecate_kwargs([["kw_new_again", "new_kw"]], version="0.3.0")
... @deprecate_kwargs([["new_arg_1", "old_arg_1"], ["new_arg_2", "old_arg_2"], ["new_kw", "old_kw"]], version="0.1.0")
... def some_func(old_arg_1: int, old_arg_2: int, old_kw: int = 3):
...     return (old_arg_1 + old_arg_2) * old_kw
...
>>> some_func.__signature__
<Signature (new_arg_1: int, new_arg_2: int, new_kw: int = 3)>
>>> some_func(10, 20, 3)
90
>>> some_func(new_arg_1=10, new_arg_2=20, new_kw=3)
90
>>> some_func(10, old_arg_2=20, old_kw=3)
PendingDeprecationWarning: (keyword) argument "old_arg_2" is deprecated, use "new_arg_2" instead
  warnings.warn(
PendingDeprecationWarning: (keyword) argument "old_kw" is deprecated, use "new_kw" instead
  warnings.warn(
90

Benefits

deprecate_kwargs is quite useful when one wants to change the name of an argument (or keyword argument) of some function, while keeping old codes using this function still working, hence is beneficial for backward compatibility. For example, say in version 0.1 of some package, there's a function

def some_deep_learning_model_trainer(learning_rate, ...):
    ...

And in version 0.2, someone wants to change learning_rate to lr. If it was replaced directly via

def some_deep_learning_model_trainer(lr, ...):
    ...

then old codes using this function bycalling some_deep_learning_model_trainer(learning_rate=1e-3, ...) would break. However, if the replacement is done using

@deprecate_kwargs([["lr", "learning_rate"]], version="0.2")
def some_deep_learning_model_trainer(learning_rate, ...):
    ...

then one can call this function using some_deep_learning_model_trainer(lr=1e-3), as well as some_deep_learning_model_trainer(learning_rate=1e-3, ...) only with a warning raised. In this way, old codes are rescued from breaking.

Metadata

Release files for deprecate-kwargs 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for deprecate-kwargs 0.1.1
File Size Uploaded Provenance Actions
deprecate_kwargs-0.1.1.tar.gz 5.7 kB Without provenance Details for deprecate_kwargs-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for deprecate-kwargs 0.1.1
File Interpreter ABI Platform Actions
deprecate_kwargs-0.1.1-py3-none-any.whl Python 3 none any Details for deprecate_kwargs-0.1.1-py3-none-any.whl

Total release size: 12.2 kB

Release files / deprecate_kwargs-0.1.1.tar.gz

Download URL deprecate_kwargs-0.1.1.tar.gz
Size 5.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8013676c077c23e5d32c592409c743ccc0013c2206a3b05d1c35f0e83dcb6360
BLAKE2b-256 checksum
How to use checksums
5189afbaec0a091897eeee0a8f2984533fe302906759df7455ad2624b4b796af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / deprecate_kwargs-0.1.1-py3-none-any.whl

Download URL deprecate_kwargs-0.1.1-py3-none-any.whl
Size 6.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
740bac42366f519f967cc13d3fb455c17784dab32c8ec6edf2d8c075b076756a
BLAKE2b-256 checksum
How to use checksums
d766701a5a6ceb12068bb505225fce36fd2510f11dc09fe1afbf96153bc5ea83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Security for deprecate-kwargs 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page