code: def to_value(self, obj, resource, visited=set()):
          
  
          if id(obj) in visited:
              raise ValueError('Circular reference detected when attempting to serialize object')
  
          if isinstance(obj, (list, tuple, set)):
              return [self.to_value(x, resource) if hasattr(x, '__dict__') else x for x in obj]
          elif hasattr(obj, '__dict__'):
              attrs = obj.__dict__.copy()
              for key in six.iterkeys(obj.__dict__):
                  if key.startswith('_'):
                      del attrs[key]
  
              return {
                  self.reverse_aliases.get(k, k):
                      self.to_value(v, resource) if hasattr(v, '__dict__') or isinstance(v, (list, tuple, set)) else v
                  for k, v in six.iteritems(attrs)
              }
          else:
              return obj
docs: Python object to dictionary