123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- # coding=utf-8
- #
- # This file is part of Hypothesis, which may be found at
- # https://github.com/HypothesisWorks/hypothesis-python
- #
- # Most of this work is copyright (C) 2013-2018 David R. MacIver
- # (david@drmaciver.com), but it contains contributions by others. See
- # CONTRIBUTING.rst for a full list of people who may hold copyright, and
- # consult the git log if you need to determine who owns an individual
- # contribution.
- #
- # This Source Code Form is subject to the terms of the Mozilla Public License,
- # v. 2.0. If a copy of the MPL was not distributed with this file, You can
- # obtain one at http://mozilla.org/MPL/2.0/.
- #
- # END HEADER
- from __future__ import division, print_function, absolute_import
- from hypothesis._settings import note_deprecation
- from hypothesis.internal.reflection import proxies
- def renamed_arguments(**rename_mapping):
- """Helper function for deprecating arguments that have been renamed to a
- new form."""
- assert len(set(rename_mapping.values())) == len(rename_mapping)
- def accept(f):
- @proxies(f)
- def with_name_check(**kwargs):
- for k, v in list(kwargs.items()):
- if k in rename_mapping and v is not None:
- t = rename_mapping[k]
- note_deprecation((
- 'The argument %s has been renamed to %s. The old '
- 'name will go away in a future version of '
- 'Hypothesis.') % (k, t))
- kwargs[t] = kwargs.pop(k)
- return f(**kwargs)
- # This decorates things in the public API, which all have docstrings.
- # (If they're not in the public API, we don't need a deprecation path.)
- # But docstrings are stripped when running with PYTHONOPTIMIZE=2.
- #
- # If somebody's running with that flag, they don't expect any
- # docstrings to be present, so this message isn't useful. Absence of
- # a docstring is a strong indicator that they're running in this mode,
- # so skip adding this message if that's the case.
- if with_name_check.__doc__ is not None:
- with_name_check.__doc__ += '\n'.join((
- '', '',
- 'The following arguments have been renamed:',
- '',
- ) + tuple(
- ' * %s has been renamed to %s' % s
- for s in rename_mapping.items()
- ) + (
- '',
- 'Use of the old names has been deprecated and will be removed',
- 'in a future version of Hypothesis.'
- )
- )
- return with_name_check
- return accept
|