deprecated_renamed_argument¶
- astropy.utils.decorators.deprecated_renamed_argument(old_name, new_name, since, arg_in_kwargs=False, relax=False, pending=False, warning_type=<class 'astropy.utils.exceptions.AstropyDeprecationWarning'>, alternative='', message='')[source]¶
Deprecate a _renamed_ or _removed_ function argument.
The decorator assumes that the argument with the
old_namewas removed from the function signature and thenew_namereplaced it at the same position in the signature. If theold_nameargument is given when calling the decorated function the decorator will catch it and issue a deprecation warning and pass it on asnew_nameargument.- Parameters:
- old_name
stror sequence ofstr The old name of the argument.
- new_name
stror sequence ofstrorNone The new name of the argument. Set this to
Noneto remove the argumentold_nameinstead of renaming it.- since
stror number or sequence ofstror number The release at which the old argument became deprecated.
- arg_in_kwargsbool or sequence of bool, optional
If the argument is not a named argument (for example it was meant to be consumed by
**kwargs) set this toTrue. Otherwise the decorator will throw an Exception if thenew_namecannot be found in the signature of the decorated function. Default isFalse.- relaxbool or sequence of bool, optional
If
FalseaTypeErroris raised if bothnew_nameandold_nameare given. IfTruethe value fornew_nameis used and a Warning is issued. Default isFalse.- pendingbool or sequence of bool, optional
If
Truethis will hide the deprecation warning and ignore the correspondingrelaxparameter value. Default isFalse.- warning_type
Warning Warning to be issued. Default is
AstropyDeprecationWarning.- alternative
str, optional An alternative function or class name that the user may use in place of the deprecated object if
new_nameis None. The deprecation warning will tell the user about this alternative if provided.- message
str, optional A custom warning message. If provided then
sinceandalternativeoptions will have no effect.
- old_name
- Raises:
TypeErrorIf the new argument name cannot be found in the function signature and arg_in_kwargs was False or if it is used to deprecate the name of the
*args-,**kwargs-like arguments. At runtime such an Error is raised if both the new_name and old_name were specified when calling the function and “relax=False”.
Notes
The decorator should be applied to a function where the name of an argument was changed but it applies the same logic.
Warning
If
old_nameis a list or tuple thenew_nameandsincemust also be a list or tuple with the same number of entries.relaxandarg_in_kwargcan be a single bool (applied to all) or also a list/tuple with the same number of entries likenew_name, etc.Examples
The deprecation warnings are not shown in the following examples.
To deprecate a positional or keyword argument:
>>> from astropy.utils.decorators import deprecated_renamed_argument >>> @deprecated_renamed_argument('sig', 'sigma', '1.0') ... def test(sigma): ... return sigma >>> test(2) 2 >>> test(sigma=2) 2 >>> test(sig=2) 2
To deprecate an argument caught inside the
**kwargsthearg_in_kwargshas to be set:>>> @deprecated_renamed_argument('sig', 'sigma', '1.0', ... arg_in_kwargs=True) ... def test(**kwargs): ... return kwargs['sigma'] >>> test(sigma=2) 2 >>> test(sig=2) 2
By default providing the new and old keyword will lead to an Exception. If a Warning is desired set the
relaxargument:>>> @deprecated_renamed_argument('sig', 'sigma', '1.0', relax=True) ... def test(sigma): ... return sigma >>> test(sig=2) 2
It is also possible to replace multiple arguments. The
old_name,new_nameandsincehave to betupleorlistand contain the same number of entries:>>> @deprecated_renamed_argument(['a', 'b'], ['alpha', 'beta'], ... ['1.0', 1.2]) ... def test(alpha, beta): ... return alpha, beta >>> test(a=2, b=3) (2, 3)
In this case
arg_in_kwargsandrelaxcan be a single value (which is applied to all renamed arguments) or must also be atupleorlistwith values for each of the arguments.