@@ -80,35 +80,54 @@ def is_sandboxed_configuration(conf):
8080 return conf == CONFIGURATION_SANDBOXED or conf == CONFIGURATION_SANDBOXED_MULTI
8181
8282
83+ # from six
84+ def add_metaclass (metaclass ):
85+ """Class decorator for creating a class with a metaclass."""
86+ def wrapper (cls ):
87+ orig_vars = cls .__dict__ .copy ()
88+ slots = orig_vars .get ('__slots__' )
89+ if slots is not None :
90+ if isinstance (slots , str ):
91+ slots = [slots ]
92+ for slots_var in slots :
93+ orig_vars .pop (slots_var )
94+ orig_vars .pop ('__dict__' , None )
95+ orig_vars .pop ('__weakref__' , None )
96+ if hasattr (cls , '__qualname__' ):
97+ orig_vars ['__qualname__' ] = cls .__qualname__
98+ return metaclass (cls .__name__ , cls .__bases__ , orig_vars )
99+ return wrapper
100+
101+
83102@contextmanager
84103def environ (env ):
85- def _handle_var ((k , v )):
104+ def _handle_var (key_value ):
105+ (k , v ) = key_value
86106 if v is None :
87107 del os .environ [k ]
88108 else :
89109 os .environ [k ] = str (v )
90110
91111 if env :
92112 prev_env = {v : os .getenv (v ) for v in env }
93- map (_handle_var , env .items ())
113+ list ( map (_handle_var , list ( env .items ()) ))
94114 else :
95115 prev_env = None
96116
97117 try :
98118 yield
99119 finally :
100120 if prev_env :
101- map (_handle_var , prev_env .items ())
121+ list ( map (_handle_var , list ( prev_env .items ()) ))
102122
103123
104124# ----------------------------------------------------------------------------------------------------------------------
105125#
106126# the vm definitions
107127#
108128# ----------------------------------------------------------------------------------------------------------------------
129+ @add_metaclass (ABCMeta )
109130class AbstractPythonVm (Vm ):
110- __metaclass__ = ABCMeta
111-
112131 def __init__ (self , config_name , options = None , env = None ):
113132 super (AbstractPythonVm , self ).__init__ ()
114133 self ._config_name = config_name
@@ -156,9 +175,8 @@ def run(self, cwd, args):
156175 return ret_code , out .data
157176
158177
178+ @add_metaclass (ABCMeta )
159179class AbstractPythonIterationsControlVm (AbstractPythonVm ):
160- __metaclass__ = ABCMeta
161-
162180 def __init__ (self , config_name , options = None , env = None , iterations = None ):
163181 super (AbstractPythonIterationsControlVm , self ).__init__ (config_name , options = options , env = env )
164182 try :
@@ -424,7 +442,7 @@ def createVmCommandLineArgs(self, benchmarks, bmSuiteArgs):
424442 for pth in self ._python_path :
425443 if hasattr (pth , '__call__' ):
426444 pth = pth ()
427- assert isinstance (pth , ( str , unicode ) )
445+ assert isinstance (pth , str )
428446 python_path .append (pth )
429447 cmd_args += ['-p' , "," .join (python_path )]
430448
@@ -438,7 +456,7 @@ def createVmCommandLineArgs(self, benchmarks, bmSuiteArgs):
438456 return vm_options + vm_args + cmd_args
439457
440458 def benchmarkList (self , bm_suite_args ):
441- return self ._benchmarks .keys ()
459+ return list ( self ._benchmarks .keys () )
442460
443461 def benchmarks (self ):
444462 raise FutureWarning ('the benchmarks method has been deprecated for VmBenchmarkSuite instances, '
0 commit comments