code: def walk(self, mtop, topdown=True):
          
          dirents = self.ls(mtop)
  
          mdirs, mnondirs = [], []
          for dirent in sorted(dirents.values(), key=itemgetter("name")):
              if dirent["type"] == "directory":
                  mdirs.append(dirent)
              else:
                  mnondirs.append(dirent)
  
          if topdown:
              yield mtop, mdirs, mnondirs
          for mdir in mdirs:
              mpath = ujoin(mtop, mdir["name"])
              for x in self.walk(mpath, topdown):
                  yield x
          if not topdown:
              yield mtop, mdirs, mnondirs
docs: `os.walk(path)` for a directory in Manta.
  
          A somewhat limited form in that some of the optional args to
          `os.walk` are not supported. Also, instead of dir *names* and file
          *names*, the dirents for those are returned. E.g.:
  
              >>> for dirpath, dirents, objents in client.walk('/trent/stor/test'):
              ...     pprint((dirpath, dirents, objents))
              ('/trent/stor/test',
               [{u'mtime': u'2012-12-12T05:40:23Z',
                 u'name': u'__pycache__',
                 u'type': u'directory'}],
               [{u'etag': u'a5ab3753-c691-4645-9c14-db6653d4f064',
                 u'mtime': u'2012-12-12T05:40:22Z',
                 u'name': u'test.py',
                 u'size': 5627,
                 u'type': u'object'},
                ...])
              ...
  
          @param mtop {Manta dir}