comparison config.py @ 70:b9d5857f7b9a

Better emulation of built-ins for testconf Bug fix: next is now in compat.__all__. Members of compat that do not correspond to built-ins or members of itertools are no longer added to built-ins while loading testconf. xrange is now added to built-ins only while loading testconf and only in legacy mode. testconf can now access the original built-ins through the CompatBuiltins context manager which is now exposed as config.builtins. Bug fix: the default string encoding is no longer relied upon.
author Oleg Oshmyan <chortos@inbox.lv>
date Mon, 03 Jan 2011 01:27:56 +0200
parents 7c6dba0b84f2
children b071ef77377c
comparison
equal deleted inserted replaced
69:c0f1b87013ad 70:b9d5857f7b9a
84 def __exit__(self, exc_type, exc_val, exc_tb): 84 def __exit__(self, exc_type, exc_val, exc_tb):
85 self.file.close() 85 self.file.close()
86 os.remove(self.name) 86 os.remove(self.name)
87 87
88 def load_problem(problem_name): 88 def load_problem(problem_name):
89 global builtins
89 dwb = sys.dont_write_bytecode 90 dwb = sys.dont_write_bytecode
90 sys.dont_write_bytecode = True 91 sys.dont_write_bytecode = True
91 metafile = files.File('/'.join((problem_name, 'testconf.py')), True, 'configuration') 92 metafile = files.File('/'.join((problem_name, 'testconf.py')), True, 'configuration')
92 module = None 93 module = None
93 with CompatBuiltins(): 94 with CompatBuiltins() as builtins:
94 if zipimport and isinstance(metafile.archive, files.ZipArchive): 95 if zipimport and isinstance(metafile.archive, files.ZipArchive):
95 try: 96 try:
96 module = zipimport.zipimporter(os.path.dirname(metafile.full_real_path)).load_module('testconf') 97 module = zipimport.zipimporter(os.path.dirname(metafile.full_real_path)).load_module('testconf')
97 except zipimport.ZipImportError: 98 except zipimport.ZipImportError:
98 pass 99 pass
152 if hasattr(module, name): 153 if hasattr(module, name):
153 setattr(module, name, getattr(module, name).replace('%', problem_name)) 154 setattr(module, name, getattr(module, name).replace('%', problem_name))
154 return module 155 return module
155 156
156 def load_global(): 157 def load_global():
158 global builtins
157 dwb = sys.dont_write_bytecode 159 dwb = sys.dont_write_bytecode
158 sys.dont_write_bytecode = True 160 sys.dont_write_bytecode = True
159 metafile = files.File('testconf.py', True, 'configuration') 161 metafile = files.File('testconf.py', True, 'configuration')
160 module = None 162 module = None
161 with CompatBuiltins(): 163 with CompatBuiltins() as builtins:
162 if zipimport and isinstance(metafile.archive, files.ZipArchive): 164 if zipimport and isinstance(metafile.archive, files.ZipArchive):
163 try: 165 try:
164 module = zipimport.zipimporter(os.path.dirname(metafile.full_real_path)).load_module('testconf') 166 module = zipimport.zipimporter(os.path.dirname(metafile.full_real_path)).load_module('testconf')
165 except zipimport.ZipImportError: 167 except zipimport.ZipImportError:
166 pass 168 pass