~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/symbol_versioning.py

  • Committer: Matt Nordhoff
  • Date: 2009-04-04 02:50:01 UTC
  • mfrom: (4253 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4256.
  • Revision ID: mnordhoff@mattnordhoff.com-20090404025001-z1403k0tatmc8l91
Merge bzr.dev, fixing conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2007, 2008 Canonical Ltd
2
 
#   Authors: Robert Collins <robert.collins@canonical.com> and others
 
1
# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd
3
2
#
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
13
12
#
14
13
# You should have received a copy of the GNU General Public License
15
14
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
16
 
18
17
"""Symbol versioning
19
18
 
28
27
           'deprecated_passed',
29
28
           'set_warning_method',
30
29
           'warn',
31
 
           'zero_seven',
32
 
           'zero_eight',
33
 
           'zero_nine',
34
 
           'zero_ten',
35
 
           'zero_eleven',
36
 
           'zero_twelve',
37
 
           'zero_thirteen',
38
 
           'zero_fourteen',
39
 
           'zero_fifteen',
40
 
           'zero_sixteen',
41
 
           'zero_seventeen',
42
 
           'zero_eighteen',
43
 
           'zero_ninety',
44
 
           'zero_ninetyone',
45
 
           'zero_ninetytwo',
46
 
           'zero_ninetythree',
47
 
           'one_zero',
48
 
           'one_one',
49
 
           'one_two',
50
 
           'one_three',
51
 
           'one_four',
52
 
           'one_five',
53
 
           'one_six',
54
30
           ]
55
31
 
56
32
from warnings import warn
59
35
 
60
36
 
61
37
DEPRECATED_PARAMETER = "A deprecated parameter marker."
62
 
zero_seven = "%s was deprecated in version 0.7."
63
 
zero_eight = "%s was deprecated in version 0.8."
64
 
zero_nine = "%s was deprecated in version 0.9."
65
 
zero_ten = "%s was deprecated in version 0.10."
66
 
zero_eleven = "%s was deprecated in version 0.11."
67
 
zero_twelve = "%s was deprecated in version 0.12."
68
 
zero_thirteen = "%s was deprecated in version 0.13."
69
 
zero_fourteen = "%s was deprecated in version 0.14."
70
 
zero_fifteen = "%s was deprecated in version 0.15."
71
 
zero_sixteen = "%s was deprecated in version 0.16."
72
 
zero_seventeen = "%s was deprecated in version 0.17."
73
 
zero_eighteen = "%s was deprecated in version 0.18."
74
 
zero_ninety = "%s was deprecated in version 0.90."
75
 
zero_ninetyone = "%s was deprecated in version 0.91."
76
 
zero_ninetytwo = "%s was deprecated in version 0.92."
77
 
one_zero = "%s was deprecated in version 1.0."
78
 
zero_ninetythree = one_zero # Maintained for backwards compatibility
79
 
one_one = "%s was deprecated in version 1.1."
80
 
one_two = "%s was deprecated in version 1.2."
81
 
one_three = "%s was deprecated in version 1.3."
82
 
one_four = "%s was deprecated in version 1.4."
83
 
one_five = "%s was deprecated in version 1.5."
84
 
one_six = "%s was deprecated in version 1.6."
85
38
 
86
39
 
87
40
def deprecated_in(version_tuple):
135
88
 
136
89
    def function_decorator(callable):
137
90
        """This is the function python calls to perform the decoration."""
138
 
        
 
91
 
139
92
        def decorated_function(*args, **kwargs):
140
93
            """This is the decorated function."""
141
94
            from bzrlib import trace
152
105
def deprecated_method(deprecation_version):
153
106
    """Decorate a method so that use of it will trigger a warning.
154
107
 
155
 
    To deprecate a static or class method, use 
 
108
    To deprecate a static or class method, use
156
109
 
157
110
        @staticmethod
158
111
        @deprecated_function
159
112
        def ...
160
 
    
 
113
 
161
114
    To deprecate an entire class, decorate __init__.
162
115
    """
163
116
 
164
117
    def method_decorator(callable):
165
118
        """This is the function python calls to perform the decoration."""
166
 
        
 
119
 
167
120
        def decorated_method(self, *args, **kwargs):
168
121
            """This is the decorated method."""
169
122
            from bzrlib import trace
187
140
 
188
141
def deprecated_passed(parameter_value):
189
142
    """Return True if parameter_value was used."""
190
 
    # FIXME: it might be nice to have a parameter deprecation decorator. 
 
143
    # FIXME: it might be nice to have a parameter deprecation decorator.
191
144
    # it would need to handle positional and *args and **kwargs parameters,
192
145
    # which means some mechanism to describe how the parameter was being
193
146
    # passed before deprecation, and some way to deprecate parameters that
213
166
    if len(docstring_lines) == 0:
214
167
        decorated_callable.__doc__ = deprecation_version % ("This " + label)
215
168
    elif len(docstring_lines) == 1:
216
 
        decorated_callable.__doc__ = (callable.__doc__ 
 
169
        decorated_callable.__doc__ = (callable.__doc__
217
170
                                    + "\n"
218
171
                                    + "\n"
219
172
                                    + deprecation_version % ("This " + label)
267
220
            typically from deprecated_in()
268
221
        :param initial_value: The contents of the dict
269
222
        :param variable_name: This allows better warnings to be printed
270
 
        :param advice: String of advice on what callers should do instead 
 
223
        :param advice: String of advice on what callers should do instead
271
224
            of using this variable.
272
225
        """
273
226
        self._deprecation_version = deprecation_version
309
262
        def _warn_deprecated(self, func, *args, **kwargs):
310
263
            warn(msg, DeprecationWarning, stacklevel=3)
311
264
            return func(self, *args, **kwargs)
312
 
            
 
265
 
313
266
        def append(self, obj):
314
267
            """appending to %s is deprecated""" % (variable_name,)
315
268
            return self._warn_deprecated(list.append, obj)
339
292
 
340
293
def _check_for_filter(error_only):
341
294
    """Check if there is already a filter for deprecation warnings.
342
 
    
 
295
 
343
296
    :param error_only: Only match an 'error' filter
344
297
    :return: True if a filter is found, False otherwise
345
298
    """