docs: def make_dict(obj):
      """This method creates a dictionary out of a non-builtin object"""
  
      # Recursion base case
      if is_builtin(obj) or isinstance(obj, OrderedDict):
          return obj
  
      output_dict = {}
      for key in dir(obj):
          if not key.startswith('__') and not callable(getattr(obj, key)):
              attr = getattr(obj, key)
              if isinstance(attr, list):
                  output_dict[key] = []
                  for item in attr:
                      output_dict[key].append(make_dict(item))
              else:
                  output_dict[key] = make_dict(attr)
  
      # All done
      return output_dict