~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/symbol_versioning.py

  • Committer: Martin von Gagern
  • Date: 2008-06-26 17:18:55 UTC
  • mto: (3517.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 3518.
  • Revision ID: martin.vgagern@gmx.net-20080626171855-qqok6tbgkouo409t
Hand-selected minimalistic set of changes from my setlocale branch.
This introduces a call to setlocale without changing the behaviour of bzr.
Day of the week formatting is handled in Python to avoid locale dependency.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd
 
1
# Copyright (C) 2006, 2007, 2008 Canonical Ltd
 
2
#   Authors: Robert Collins <robert.collins@canonical.com> and others
2
3
#
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
12
13
#
13
14
# You should have received a copy of the GNU General Public License
14
15
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
 
17
18
"""Symbol versioning
18
19
 
27
28
           'deprecated_passed',
28
29
           'set_warning_method',
29
30
           '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',
30
54
           ]
31
55
 
32
56
from warnings import warn
35
59
 
36
60
 
37
61
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."
38
85
 
39
86
 
40
87
def deprecated_in(version_tuple):
41
88
    """Generate a message that something was deprecated in a release.
42
89
 
43
90
    >>> deprecated_in((1, 4, 0))
44
 
    '%s was deprecated in version 1.4.0.'
 
91
    '%s was deprecated in version 1.4.'
45
92
    """
46
93
    return ("%%s was deprecated in version %s."
47
94
            % bzrlib._format_version_tuple(version_tuple))
88
135
 
89
136
    def function_decorator(callable):
90
137
        """This is the function python calls to perform the decoration."""
91
 
 
 
138
        
92
139
        def decorated_function(*args, **kwargs):
93
140
            """This is the decorated function."""
94
 
            from bzrlib import trace
95
 
            trace.mutter_callsite(4, "Deprecated function called")
96
141
            warn(deprecation_string(callable, deprecation_version),
97
142
                DeprecationWarning, stacklevel=2)
98
143
            return callable(*args, **kwargs)
105
150
def deprecated_method(deprecation_version):
106
151
    """Decorate a method so that use of it will trigger a warning.
107
152
 
108
 
    To deprecate a static or class method, use
 
153
    To deprecate a static or class method, use 
109
154
 
110
155
        @staticmethod
111
156
        @deprecated_function
112
157
        def ...
113
 
 
 
158
    
114
159
    To deprecate an entire class, decorate __init__.
115
160
    """
116
161
 
117
162
    def method_decorator(callable):
118
163
        """This is the function python calls to perform the decoration."""
119
 
 
 
164
        
120
165
        def decorated_method(self, *args, **kwargs):
121
166
            """This is the decorated method."""
122
 
            from bzrlib import trace
123
167
            if callable.__name__ == '__init__':
124
168
                symbol = "%s.%s" % (self.__class__.__module__,
125
169
                                    self.__class__.__name__,
129
173
                                       self.__class__.__name__,
130
174
                                       callable.__name__
131
175
                                       )
132
 
            trace.mutter_callsite(4, "Deprecated method called")
133
176
            warn(deprecation_version % symbol, DeprecationWarning, stacklevel=2)
134
177
            return callable(self, *args, **kwargs)
135
178
        _populate_decorated(callable, deprecation_version, "method",
140
183
 
141
184
def deprecated_passed(parameter_value):
142
185
    """Return True if parameter_value was used."""
143
 
    # FIXME: it might be nice to have a parameter deprecation decorator.
 
186
    # FIXME: it might be nice to have a parameter deprecation decorator. 
144
187
    # it would need to handle positional and *args and **kwargs parameters,
145
188
    # which means some mechanism to describe how the parameter was being
146
189
    # passed before deprecation, and some way to deprecate parameters that
166
209
    if len(docstring_lines) == 0:
167
210
        decorated_callable.__doc__ = deprecation_version % ("This " + label)
168
211
    elif len(docstring_lines) == 1:
169
 
        decorated_callable.__doc__ = (callable.__doc__
 
212
        decorated_callable.__doc__ = (callable.__doc__ 
170
213
                                    + "\n"
171
214
                                    + "\n"
172
215
                                    + deprecation_version % ("This " + label)
220
263
            typically from deprecated_in()
221
264
        :param initial_value: The contents of the dict
222
265
        :param variable_name: This allows better warnings to be printed
223
 
        :param advice: String of advice on what callers should do instead
 
266
        :param advice: String of advice on what callers should do instead 
224
267
            of using this variable.
225
268
        """
226
269
        self._deprecation_version = deprecation_version
262
305
        def _warn_deprecated(self, func, *args, **kwargs):
263
306
            warn(msg, DeprecationWarning, stacklevel=3)
264
307
            return func(self, *args, **kwargs)
265
 
 
 
308
            
266
309
        def append(self, obj):
267
310
            """appending to %s is deprecated""" % (variable_name,)
268
311
            return self._warn_deprecated(list.append, obj)
280
323
            return self._warn_deprecated(list.remove, value)
281
324
 
282
325
        def pop(self, index=None):
283
 
            """pop'ing from %s is deprecated""" % (variable_name,)
 
326
            """pop'ing from from %s is deprecated""" % (variable_name,)
284
327
            if index:
285
328
                return self._warn_deprecated(list.pop, index)
286
329
            else:
292
335
 
293
336
def _check_for_filter(error_only):
294
337
    """Check if there is already a filter for deprecation warnings.
295
 
 
 
338
    
296
339
    :param error_only: Only match an 'error' filter
297
340
    :return: True if a filter is found, False otherwise
298
341
    """