import sys

info = sys.version_info
if info[:3] >= (3, 2, 0):
    # for Python 3.2 ordinary unittest is fine
    import unittest as unittest2
else:
    import unittest2


try:
    callable = callable
except NameError:
    def callable(obj):
        return hasattr(obj, '__call__')


inPy3k = sys.version_info[0] == 3
with_available = sys.version_info[:2] >= (2, 5)


def is_instance(obj, klass):
    """Version of is_instance that doesn't access __class__"""
    return issubclass(type(obj), klass)


class SomeClass(object):
    class_attribute = None

    def wibble(self):
        pass


class X(object):
    pass

try:
    next = next
except NameError:
    def next(obj):
        return obj.next()
