import sys

info = sys.version_info
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()
