xref: /aosp_15_r20/external/autotest/client/common_lib/deprecation.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Lint as: python2, python3
2*9c5db199SXin Li# Copyright 2017 The Chromium OS Authors. All rights reserved.
3*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
4*9c5db199SXin Li# found in the LICENSE file.
5*9c5db199SXin Li
6*9c5db199SXin Li"""This module contains stuff for reporting deprecation.
7*9c5db199SXin Li
8*9c5db199SXin LiTODO(ayatane): The reason for putting this module here is so client tests can use it.
9*9c5db199SXin Li"""
10*9c5db199SXin Lifrom six.moves import urllib
11*9c5db199SXin Liimport warnings
12*9c5db199SXin Li
13*9c5db199SXin Li
14*9c5db199SXin Lidef warn(deprecated_name, stacklevel=3):
15*9c5db199SXin Li    """Convenience function for making deprecation warnings.
16*9c5db199SXin Li
17*9c5db199SXin Li    @param deprecated_name: The name of the deprecated function or module
18*9c5db199SXin Li    @param stacklevel: See warnings.warn().
19*9c5db199SXin Li    """
20*9c5db199SXin Li    warnings.warn(APIDeprecationWarning(deprecated_name),
21*9c5db199SXin Li                  stacklevel=stacklevel)
22*9c5db199SXin Li
23*9c5db199SXin Li
24*9c5db199SXin Liclass APIDeprecationWarning(UserWarning):
25*9c5db199SXin Li    """API deprecation warning.
26*9c5db199SXin Li
27*9c5db199SXin Li    This is different from DeprecationWarning.  DeprecationWarning is
28*9c5db199SXin Li    for Python deprecations, this class is for our deprecations.
29*9c5db199SXin Li    """
30*9c5db199SXin Li
31*9c5db199SXin Li    def __init__(self, deprecated_name):
32*9c5db199SXin Li        """Initialize instance.
33*9c5db199SXin Li
34*9c5db199SXin Li        @param deprecated_name: The name of the deprecated function or module
35*9c5db199SXin Li        """
36*9c5db199SXin Li        super(APIDeprecationWarning, self).__init__(deprecated_name)
37*9c5db199SXin Li        self._deprecated_name = deprecated_name
38*9c5db199SXin Li
39*9c5db199SXin Li    def __str__(self):
40*9c5db199SXin Li        return ('%s is deprecated; please file a fixit bug: %s'
41*9c5db199SXin Li                % (self._deprecated_name, self._get_fixit_bug_url()))
42*9c5db199SXin Li
43*9c5db199SXin Li    def _get_fixit_bug_url(self):
44*9c5db199SXin Li        """Return the URL for making a fixit bug."""
45*9c5db199SXin Li        return ('https://bugs.chromium.org/p/chromium/issues/entry?'
46*9c5db199SXin Li                + urllib.parse.urlencode({
47*9c5db199SXin Li                    'summary': 'Deprecated use of %s' % self._deprecated_name,
48*9c5db199SXin Li                    'description': 'Please paste the warning message below\n',
49*9c5db199SXin Li                    'components': 'Infra>Client>ChromeOS',
50*9c5db199SXin Li                    'labels': 'Pri-3,Type-Bug,Hotlist-Fixit',
51*9c5db199SXin Li                }))
52