def serialisable(cls, key, obj):
        '''Determines what can be serialised and what shouldn't
        '''
        # ignore class method names
        if key.startswith('_Serialisable'.format(cls.__name__)):
            return False
        if key in obj.__whitelist:
            return True
        # class variables will be prefixed with '_<cls.__name__>__variable'
        # so let's remove these too
        #if key.startswith('__'):
        if '__' in key:
            return False
        # ignore our own class variables
        #if key in ['_Serialisable__whitelist', '_Serialisable__blacklist']:
        #    return False
        if key in obj.__blacklist:
            return False
        if callable(getattr(obj, key)):
            return False
        # check for properties
        if hasattr(obj.__class__, key):
            if isinstance(getattr(obj.__class__, key), property):
                return False
        return True
Determines what can be serialised and what shouldn't