@@ -104,80 +104,65 @@ def unicode_error_message(name):
104104 return msg
105105
106106
107- def warning_test ():
108- """For testing warning function."""
109-
110- # Should show warnings in order and only HAPIWarning {1,2} should
111- # have a different format
112- from warnings import warn
113-
114- warn ('Normal warning 1' )
115- warn ('Normal warning 2' )
116-
117- warning ('HAPI Warning 1' )
118- warning ('HAPI Warning 2' )
119-
120- warn ('Normal warning 3' )
121- warn ('Normal warning 4' )
107+ class HAPIWarning (Warning ):
108+ pass
122109
123110
124111def warning (* args ):
125112 """Display a short warning message.
126113
127114 warning(message) raises a warning of type HAPIWarning and displays
128- "Warning : " + message. Use for warnings when a full stack trace is not
115+ "HAPIWarning : " + message. Use for warnings when a full stack trace is not
129116 needed.
130117 """
131118
119+ import logging
132120 import warnings
133- from os import path
134- from sys import stderr
135- from inspect import stack
121+ import platform
136122
137123 message = args [0 ]
138- if len (args ) > 1 :
139- fname = args [1 ]
140- else :
141- fname = stack ()[1 ][1 ]
142124
143- #line = stack()[1][2]
125+ if logging .getLogger ("hapiclient" ).level == logging .DEBUG :
126+ warnings .warn (message , stacklevel = 2 )
127+ return
144128
145- fname = path .basename (fname )
129+ _prefix = "\x1b [31mHAPIWarning:\x1b [0m "
130+ if platform .system () == 'Windows' and pythonshell () == 'shell' :
131+ _prefix = "HAPIWarning: "
146132
147- def prefix ():
148- import platform
149- prefix = "\x1b [31mHAPIWarning:\x1b [0m "
150- if platform .system () == 'Windows' and pythonshell () == 'shell' :
151- prefix = "HAPIWarning: "
133+ _orig_formatwarning = warnings .formatwarning
152134
153- return prefix
135+ def _formatwarning (msg , category , filename , lineno , line = None ):
136+ if issubclass (category , HAPIWarning ):
137+ return _prefix + str (msg ) + "\n "
138+ return _orig_formatwarning (msg , category , filename , lineno , line )
154139
155- # Custom warning format function
156- def _warning (message , category = UserWarning , filename = '' , lineno = - 1 , file = None , line = '' ):
157- if category .__name__ == "HAPIWarning" :
158- stderr .write (prefix () + str (message ) + "\n " )
159- else :
160- # Use default showwarning function.
161- showwarning_default (message , category = UserWarning ,
162- filename = '' , lineno = - 1 ,
163- file = None , line = '' )
140+ warnings .formatwarning = _formatwarning
141+ try :
142+ warnings .warn (message , HAPIWarning , stacklevel = 2 )
143+ finally :
144+ warnings .formatwarning = _orig_formatwarning
164145
165- stderr .flush ()
166146
167- # Reset showwarning function to default
168- warnings . showwarning = showwarning_default
147+ def warning_test ():
148+ """For testing warning function."""
169149
170- class HAPIWarning (Warning ):
171- pass
150+ # Should show warnings in order and only HAPIWarning {1,2} should
151+ # have a different format
152+ from warnings import warn
153+
154+ warn ('Normal warning 1' )
155+ warn ('Normal warning 2' )
172156
173- # Copy default showwarning function
174- showwarning_default = warnings .showwarning
157+ warning ('HAPI Warning 1' )
158+ warning ('HAPI Warning 2' )
159+
160+ warn ('Normal warning 3' )
161+ warn ('Normal warning 4' )
175162
176- # Use custom warning function instead of default
177- warnings .showwarning = _warning
178163
179- # Raise warning
180- warnings . warn ( message , HAPIWarning )
164+ if __name__ == "__main__" :
165+ warning_test ( )
181166
182167
183168class HAPIError (Exception ):
0 commit comments