| # Copyright 2017 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """This module contains stuff for reporting deprecation. |
| |
| TODO(ayatane): The reason for putting this module here is so client tests can use it. |
| """ |
| |
| import urllib |
| import warnings |
| |
| |
| def warn(deprecated_name, stacklevel=3): |
| """Convenience function for making deprecation warnings. |
| |
| @param deprecated_name: The name of the deprecated function or module |
| @param stacklevel: See warnings.warn(). |
| """ |
| warnings.warn(APIDeprecationWarning(deprecated_name), |
| stacklevel=stacklevel) |
| |
| |
| class APIDeprecationWarning(UserWarning): |
| """API deprecation warning. |
| |
| This is different from DeprecationWarning. DeprecationWarning is |
| for Python deprecations, this class is for our deprecations. |
| """ |
| |
| def __init__(self, deprecated_name): |
| """Initialize instance. |
| |
| @param deprecated_name: The name of the deprecated function or module |
| """ |
| super(APIDeprecationWarning, self).__init__(deprecated_name) |
| self._deprecated_name = deprecated_name |
| |
| def __str__(self): |
| return ('%s is deprecated; please file a fixit bug: %s' |
| % (self._deprecated_name, self._get_fixit_bug_url())) |
| |
| def _get_fixit_bug_url(self): |
| """Return the URL for making a fixit bug.""" |
| return ('https://bugs.chromium.org/p/chromium/issues/entry?' |
| + urllib.urlencode({ |
| 'summary': 'Deprecated use of %s' % self._deprecated_name, |
| 'description': 'Please paste the warning message below\n', |
| 'components': 'Infra>Client>ChromeOS', |
| 'labels': 'Pri-3,Type-Bug,Hotlist-Fixit', |
| })) |