@@ -156,21 +156,27 @@ def __enter__(self):
156156 # trivial patching of `warnings.warn` seems to be enough somehow?
157157 if six .PY2 :
158158
159- def warn (* args , ** kwargs ):
160- kwargs .setdefault ("stacklevel" , 1 )
161- kwargs ["stacklevel" ] += 1
159+ def warn (message , category = None , stacklevel = 1 ):
160+ # duplicate the stdlib logic due to
161+ # bad handing in the c version of warnings
162+ if isinstance (message , Warning ):
163+ category = message .__class__
164+ # Check category argument
165+ if category is None :
166+ category = UserWarning
167+ assert issubclass (category , Warning )
162168
163169 # emulate resetting the warn registry
164- f_globals = sys ._getframe (kwargs [ " stacklevel" ] - 1 ).f_globals
170+ f_globals = sys ._getframe (stacklevel ).f_globals
165171 if "__warningregistry__" in f_globals :
166172 orig = f_globals ["__warningregistry__" ]
167173 f_globals ["__warningregistry__" ] = None
168174 try :
169- return self ._saved_warn (* args , ** kwargs )
175+ return self ._saved_warn (message , category , stacklevel + 1 )
170176 finally :
171177 f_globals ["__warningregistry__" ] = orig
172178 else :
173- return self ._saved_warn (* args , ** kwargs )
179+ return self ._saved_warn (message , category , stacklevel + 1 )
174180
175181 warnings .warn , self ._saved_warn = warn , warnings .warn
176182 return self
0 commit comments