145
148
decorated_callable.__module__ = callable.__module__
146
149
decorated_callable.__name__ = callable.__name__
147
150
decorated_callable.is_deprecated = True
153
def deprecated_list(deprecation_version, variable_name,
154
initial_value, extra=None):
155
"""Create a list that warns when modified
157
:param deprecation_version: something like zero_nine
158
:param initial_value: The contents of the list
159
:param variable_name: This allows better warnings to be printed
160
:param extra: Extra info to print when printing a warning
163
subst_text = 'Modifying %s' % (variable_name,)
164
msg = deprecation_version % (subst_text,)
168
class _DeprecatedList(list):
169
__doc__ = list.__doc__ + msg
173
def _warn_deprecated(self, func, *args, **kwargs):
174
warn(msg, DeprecationWarning, stacklevel=3)
175
return func(self, *args, **kwargs)
177
def append(self, obj):
178
"""appending to %s is deprecated""" % (variable_name,)
179
return self._warn_deprecated(list.append, obj)
181
def insert(self, index, obj):
182
"""inserting to %s is deprecated""" % (variable_name,)
183
return self._warn_deprecated(list.insert, index, obj)
185
def extend(self, iterable):
186
"""extending %s is deprecated""" % (variable_name,)
187
return self._warn_deprecated(list.extend, iterable)
189
def remove(self, value):
190
"""removing from %s is deprecated""" % (variable_name,)
191
return self._warn_deprecated(list.remove, value)
193
def pop(self, index=None):
194
"""pop'ing from from %s is deprecated""" % (variable_name,)
196
return self._warn_deprecated(list.pop, index)
199
return self._warn_deprecated(list.pop)
201
return _DeprecatedList(initial_value)