/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/symbol_versioning.py

  • Committer: Robert Collins
  • Date: 2010-05-06 11:08:10 UTC
  • mto: This revision was merged to the branch mainline in revision 5223.
  • Revision ID: robertc@robertcollins.net-20100506110810-h3j07fh5gmw54s25
Cleaner matcher matching revised unlocking protocol.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
19
19
The methods here allow for api symbol versioning.
20
20
"""
21
21
 
22
 
from __future__ import absolute_import
23
 
 
24
22
__all__ = ['deprecated_function',
25
23
           'deprecated_in',
26
24
           'deprecated_list',
31
29
           'warn',
32
30
           ]
33
31
 
34
 
 
35
 
import warnings
36
 
# Import the 'warn' symbol so breezy can call it even if we redefine it
37
32
from warnings import warn
38
33
 
39
 
import breezy
 
34
import bzrlib
40
35
 
41
36
 
42
37
DEPRECATED_PARAMETER = "A deprecated parameter marker."
49
44
    '%s was deprecated in version 1.4.0.'
50
45
    """
51
46
    return ("%%s was deprecated in version %s."
52
 
            % breezy._format_version_tuple(version_tuple))
 
47
            % bzrlib._format_version_tuple(version_tuple))
53
48
 
54
49
 
55
50
def set_warning_method(method):
81
76
        symbol = "%s.%s" % (a_callable.__module__,
82
77
                            a_callable.__name__)
83
78
    else:
84
 
        symbol = "%s.%s.%s" % (a_callable.__self__.__class__.__module__,
85
 
                               a_callable.__self__.__class__.__name__,
 
79
        symbol = "%s.%s.%s" % (a_callable.im_class.__module__,
 
80
                               a_callable.im_class.__name__,
86
81
                               a_callable.__name__
87
82
                               )
88
83
    return deprecation_version % symbol
96
91
 
97
92
        def decorated_function(*args, **kwargs):
98
93
            """This is the decorated function."""
99
 
            from . import trace
 
94
            from bzrlib import trace
100
95
            trace.mutter_callsite(4, "Deprecated function called")
101
96
            warn(deprecation_string(callable, deprecation_version),
102
97
                DeprecationWarning, stacklevel=2)
124
119
 
125
120
        def decorated_method(self, *args, **kwargs):
126
121
            """This is the decorated method."""
127
 
            from . import trace
 
122
            from bzrlib import trace
128
123
            if callable.__name__ == '__init__':
129
124
                symbol = "%s.%s" % (self.__class__.__module__,
130
125
                                    self.__class__.__name__,
301
296
    :param error_only: Only match an 'error' filter
302
297
    :return: True if a filter is found, False otherwise
303
298
    """
 
299
    import warnings
304
300
    for filter in warnings.filters:
305
301
        if issubclass(DeprecationWarning, filter[2]):
306
302
            # This filter will effect DeprecationWarning
309
305
    return False
310
306
 
311
307
 
312
 
def _remove_filter_callable(filter):
313
 
    """Build and returns a callable removing filter from the warnings.
314
 
 
315
 
    :param filter: The filter to remove (can be None).
316
 
 
317
 
    :return: A callable that will remove filter from warnings.filters.
318
 
    """
319
 
    def cleanup():
320
 
        if filter:
321
 
            warnings.filters.remove(filter)
322
 
    return cleanup
323
 
 
324
 
 
325
308
def suppress_deprecation_warnings(override=True):
326
309
    """Call this function to suppress all deprecation warnings.
327
310
 
331
314
 
332
315
    :param override: If True, always set the ignore, if False, only set the
333
316
        ignore if there isn't already a filter.
334
 
 
335
 
    :return: A callable to remove the new warnings this added.
336
317
    """
 
318
    import warnings
337
319
    if not override and _check_for_filter(error_only=False):
338
320
        # If there is already a filter effecting suppress_deprecation_warnings,
339
321
        # then skip it.
340
 
        filter = None
341
 
    else:
342
 
        warnings.filterwarnings('ignore', category=DeprecationWarning)
343
 
        filter = warnings.filters[0]
344
 
    return _remove_filter_callable(filter)
 
322
        return
 
323
    warnings.filterwarnings('ignore', category=DeprecationWarning)
345
324
 
346
325
 
347
326
def activate_deprecation_warnings(override=True):
358
337
    :param override: If False, only add a filter if there isn't an error filter
359
338
        already. (This slightly differs from suppress_deprecation_warnings, in
360
339
        because it always overrides everything but -Werror).
361
 
 
362
 
    :return: A callable to remove the new warnings this added.
363
340
    """
 
341
    import warnings
364
342
    if not override and _check_for_filter(error_only=True):
365
343
        # DeprecationWarnings are already turned into errors, don't downgrade
366
344
        # them to 'default'.
367
 
        filter = None
368
 
    else:
369
 
        warnings.filterwarnings('default', category=DeprecationWarning)
370
 
        filter = warnings.filters[0]
371
 
    return _remove_filter_callable(filter)
 
345
        return
 
346
    warnings.filterwarnings('default', category=DeprecationWarning)