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