Package lepl :: Package support :: Module warn
[hide private]
[frames] | no frames]

Source Code for Module lepl.support.warn

 1   
 2  # The contents of this file are subject to the Mozilla Public License 
 3  # (MPL) Version 1.1 (the "License"); you may not use this file except 
 4  # in compliance with the License. You may obtain a copy of the License 
 5  # at http://www.mozilla.org/MPL/ 
 6  # 
 7  # Software distributed under the License is distributed on an "AS IS" 
 8  # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
 9  # the License for the specific language governing rights and 
10  # limitations under the License. 
11  # 
12  # The Original Code is LEPL (http://www.acooke.org/lepl) 
13  # The Initial Developer of the Original Code is Andrew Cooke. 
14  # Portions created by the Initial Developer are Copyright (C) 2009-2010 
15  # Andrew Cooke (andrew@acooke.org). All Rights Reserved. 
16  # 
17  # Alternatively, the contents of this file may be used under the terms 
18  # of the LGPL license (the GNU Lesser General Public License, 
19  # http://www.gnu.org/licenses/lgpl.html), in which case the provisions 
20  # of the LGPL License are applicable instead of those above. 
21  # 
22  # If you wish to allow use of your version of this file only under the 
23  # terms of the LGPL License and not to allow others to use your version 
24  # of this file under the MPL, indicate your decision by deleting the 
25  # provisions above and replace them with the notice and other provisions 
26  # required by the LGPL License.  If you do not delete the provisions 
27  # above, a recipient may use your version of this file under either the 
28  # MPL or the LGPL License. 
29   
30  ''' 
31  A mechanism to associate warnings with certain classes (eg for deprecation) 
32  and to disable those warnings. 
33  ''' 
34   
35  from logging import getLogger 
36   
37  from lepl.support.lib import fmt 
38   
39   
40  _WARNINGS = {} 
41  LOG = getLogger(__name__) 
42   
43   
44 -class Warning(object):
45
46 - def __init__(self, name, message):
47 super(Warning, self).__init__() 48 self.silent = False 49 self.displayed = False 50 self.name = name 51 self.message = message 52 assert self.name not in _WARNINGS, (self.name, _WARNINGS) 53 _WARNINGS[self.name] = self
54
55 - def warn(self):
56 if not self.silent and not self.displayed: 57 print(self.message) 58 print(fmt('To disable this message call ' 59 'lepl.support.warn.silence({0!r})', self.name)) 60 self.displayed = True
61 62
63 -def silence(name):
64 ''' 65 Silence the warning. Obviously, don't do this until you have addressed the 66 underlying issue... 67 ''' 68 if name in _WARNINGS: 69 _WARNINGS[name].silent = True 70 else: 71 LOG.warn(fmt('No warning registered for {0}', name))
72 73
74 -def warn_on_use(message, name=None):
75 ''' 76 A decorator that warns when the function is used. 77 ''' 78 def decorator(func, name=name): 79 if name is None: 80 name = func.__name__ 81 warning = Warning(name, message) 82 def wrapper(*args, **kargs): 83 warning.warn() 84 return func(*args, **kargs)
85 wrapper.__name__ = func.__name__ 86 return wrapper 87 return decorator 88