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
deprecate_kwargs-0.1.1.tar.gz 5.7 kB Details

Built distribution (wheel)

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

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

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

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