0001import sys
0002import types
0003
0004
0005
0006
0007
0008def with_metaclass(meta, *bases):
0009 """Create a base class with a metaclass."""
0010
0011
0012
0013
0014 class metaclass(meta):
0015 def __new__(cls, name, this_bases, d):
0016 return meta(name, bases, d)
0017 return type.__new__(metaclass, 'temporary_class', (), {})
0018
0019
0020PY2 = sys.version_info[0] < 3
0021if PY2:
0022
0023 string_type = basestring
0024 unicode_type = unicode
0025 class_types = (type, types.ClassType)
0026 buffer_type = buffer
0027else:
0028 string_type = str
0029 unicode_type = str
0030 class_types = (type,)
0031 buffer_type = memoryview