comparison 2.00/compat.py @ 27:dc4be35d17e0

Bug fixes Bug fix: compat.py now works in Python 3 (module __builtin__ was renamed builtins). Bug fix: random spaces in the indentation of testcases.py have been removed. Bug fix: false dummy{in,out}name's are now again replaced with the values of testcase{in,out}name.
author Oleg Oshmyan <chortos@inbox.lv>
date Fri, 15 Oct 2010 22:17:31 +0000
parents b500e117080e
children fe1463e7e24d
comparison
equal deleted inserted replaced
26:5bbb68833868 27:dc4be35d17e0
23 # but in Python 2.5, the abc module does not exist, while in Python 3, 23 # but in Python 2.5, the abc module does not exist, while in Python 3,
24 # metaclasses are specified using a syntax totally incompatible 24 # metaclasses are specified using a syntax totally incompatible
25 # with Python 2 and not usable conditionally via exec() and such 25 # with Python 2 and not usable conditionally via exec() and such
26 # because it is a detail of the syntax of the class statement itself. 26 # because it is a detail of the syntax of the class statement itself.
27 27
28 import __builtin__ 28 try:
29 import builtins
30 except ImportError:
31 import __builtin__ as builtins
29 32
30 __all__ = ('say', 'basestring', 'range', 'map', 'zip', 'filter', 'items', 33 __all__ = ('say', 'basestring', 'range', 'map', 'zip', 'filter', 'items',
31 'keys', 'values', 'zip_longest', 'callable', 34 'keys', 'values', 'zip_longest', 'callable',
32 'ABCMeta', 'abstractmethod', 'CompatBuiltins') 35 'ABCMeta', 'abstractmethod', 'CompatBuiltins')
33 36
38 try: 41 try:
39 # Python 2.6/2.7 42 # Python 2.6/2.7
40 # An alternative is exec('from __future__ import print_function; say = print'); 43 # An alternative is exec('from __future__ import print_function; say = print');
41 # if problems arise with the current line, one should try replacing it 44 # if problems arise with the current line, one should try replacing it
42 # with this one with the future import before abandoning the idea altogether 45 # with this one with the future import before abandoning the idea altogether
43 say = __builtins__['print'] 46 say = getattr(builtins, 'print')
44 except Exception: 47 except Exception:
45 # Python 2.5 48 # Python 2.5
46 import sys 49 import sys
47 # This should fully emulate the print function of Python 2.6 in Python 2.3+ 50 # This should fully emulate the print function of Python 2.6 in Python 2.3+
48 # The error messages are taken from Python 2.6 51 # The error messages are taken from Python 2.6
142 def __init__(self): 145 def __init__(self):
143 self.originals = {} 146 self.originals = {}
144 def __enter__(self): 147 def __enter__(self):
145 g = globals() 148 g = globals()
146 for name in __all__: 149 for name in __all__:
147 if hasattr(__builtin__, name): 150 if hasattr(builtins, name):
148 self.originals[name] = getattr(__builtin__, name) 151 self.originals[name] = getattr(builtins, name)
149 setattr(__builtin__, name, g[name]) 152 setattr(builtins, name, g[name])
150 def __exit__(self, exc_type, exc_val, exc_tb): 153 def __exit__(self, exc_type, exc_val, exc_tb):
151 for name in self.originals: 154 for name in self.originals:
152 setattr(__builtin__, name, self.originals[name]) 155 setattr(builtins, name, self.originals[name])
153 156
154 # Support simple testconf.py's written for test.py 1.x 157 # Support simple testconf.py's written for test.py 1.x
155 __builtin__.xrange = range 158 builtins.xrange = range