/usr/lib/python3/dist-packages/apt/deprecation.py is in python3-apt 0.8.8.2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | # deprecation.py - Module providing classes and functions for deprecation.
#
# Copyright (c) 2009 Julian Andres Klode <jak@debian.org>
# Copyright (c) 2009 Ben Finney <ben+debian@benfinney.id.au>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
"""Classes and functions for deprecating features.
This is used for internal purposes only and not part of the official API. Do
not use it for anything outside the apt package.
"""
import re
import operator
import warnings
import apt_pkg
__all__ = []
class AttributeDeprecatedBy(object):
"""Property acting as a proxy for a new attribute.
When accessed, the property issues a DeprecationWarning and (on get) calls
attrgetter() for the attribute 'attribute' on the current object or (on
set) uses setattr to set the value of the wrapped attribute.
"""
def __init__(self, attribute):
"""Initialize the property."""
self.attribute = attribute
self.__doc__ = 'Deprecated, please use \'%s\' instead' % attribute
self.getter = operator.attrgetter(attribute)
def __get__(self, obj, type_=None):
"""Issue a DeprecationWarning and return the requested value."""
if obj is None:
return getattr(type_, self.attribute, self)
warnings.warn(self.__doc__, DeprecationWarning, stacklevel=2)
return self.getter(obj or type_)
def __set__(self, obj, value):
"""Issue a DeprecationWarning and set the requested value."""
warnings.warn(self.__doc__, DeprecationWarning, stacklevel=2)
setattr(obj, self.attribute, value)
def function_deprecated_by(func, convert_names=True):
"""Return a function that warns it is deprecated by another function.
Returns a new function that warns it is deprecated by function 'func',
then acts as a pass-through wrapper for 'func'.
This function also converts all keyword argument names from mixedCase to
lowercase_with_underscores, but only if 'convert_names' is True (default).
"""
warning = 'Deprecated, please use \'%s()\' instead' % func.__name__
def deprecated_function(*args, **kwds):
"""Wrapper around a deprecated function."""
warnings.warn(warning, DeprecationWarning, stacklevel=2)
if convert_names:
for key in list(kwds.keys()):
kwds[re.sub('([A-Z])', '_\\1', key).lower()] = kwds.pop(key)
return func(*args, **kwds)
return deprecated_function
def deprecated_args(func):
"""A function with deprecated arguments.
Similar to function_deprecated_by() but warns on every deprecated argument
instead of function calls.
"""
if not apt_pkg._COMPAT_0_7:
return func
def deprecated_function(*args, **kwds):
"""Wrapper around a function with deprecated arguments."""
for key in list(kwds.keys()):
new_key = re.sub('([A-Z])', '_\\1', key).lower()
if new_key != key:
warnings.warn("Deprecated parameter %r" % key)
kwds[new_key] = kwds.pop(key)
return func(*args, **kwds)
# Wrap the function completely (same as functools.wraps)
# pylint: disable-msg=W0622
deprecated_function.__name__ = func.__name__
deprecated_function.__doc__ = func.__doc__
deprecated_function.__module__ = func.__module__
deprecated_function.__dict__.update(func.__dict__)
return deprecated_function
|