docs: def _marshal(self, obj):
          """Walks an object and marshals any psphere object into MORs."""
          logger.debug("Checking if %s needs to be marshalled", obj)
          if isinstance(obj, ManagedObject):
              logger.debug("obj is a psphere object, converting to MOR")
              return obj._mo_ref
  
          if isinstance(obj, list):
              logger.debug("obj is a list, recursing it")
              new_list = []
              for item in obj:
                  new_list.append(self._marshal(item))
              return new_list
                  
          if not isinstance(obj, suds.sudsobject.Object):
              logger.debug("%s is not a sudsobject subclass, skipping", obj)
              return obj
  
          if hasattr(obj, '__iter__'):
              logger.debug("obj is iterable, recursing it")
              for (name, value) in obj:
                  setattr(obj, name, self._marshal(value))
              return obj
              
          # The obj has nothing that we want to marshal or traverse, return it
          logger.debug("obj doesn't need to be marshalled")
          return obj