@@ -211,7 +211,6 @@ def _processoptions(args):
211211
212212# Helper for _processoptions()
213213def _setoption (arg ):
214- import re
215214 parts = arg .split (':' )
216215 if len (parts ) > 5 :
217216 raise _OptionError ("too many fields (max 5): %r" % (arg ,))
@@ -220,11 +219,13 @@ def _setoption(arg):
220219 action , message , category , module , lineno = [s .strip ()
221220 for s in parts ]
222221 action = _getaction (action )
223- message = re .escape (message )
224222 category = _getcategory (category )
225- module = re .escape (module )
223+ if message or module :
224+ import re
225+ if message :
226+ message = re .escape (message )
226227 if module :
227- module = module + '$ '
228+ module = re . escape ( module ) + r'\Z '
228229 if lineno :
229230 try :
230231 lineno = int (lineno )
@@ -248,26 +249,21 @@ def _getaction(action):
248249
249250# Helper for _setoption()
250251def _getcategory (category ):
251- import re
252252 if not category :
253253 return Warning
254- if re .match ("^[a-zA-Z0-9_]+$" , category ):
255- try :
256- cat = eval (category )
257- except NameError :
258- raise _OptionError ("unknown warning category: %r" % (category ,)) from None
254+ if '.' not in category :
255+ import builtins as m
256+ klass = category
259257 else :
260- i = category .rfind ("." )
261- module = category [:i ]
262- klass = category [i + 1 :]
258+ module , _ , klass = category .rpartition ('.' )
263259 try :
264260 m = __import__ (module , None , None , [klass ])
265261 except ImportError :
266262 raise _OptionError ("invalid module name: %r" % (module ,)) from None
267- try :
268- cat = getattr (m , klass )
269- except AttributeError :
270- raise _OptionError ("unknown warning category: %r" % (category ,)) from None
263+ try :
264+ cat = getattr (m , klass )
265+ except AttributeError :
266+ raise _OptionError ("unknown warning category: %r" % (category ,)) from None
271267 if not issubclass (cat , Warning ):
272268 raise _OptionError ("invalid warning category: %r" % (category ,))
273269 return cat
0 commit comments