code: 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 Truf 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
docs: Determines what can be serialised and what shouldn't