code: def getpaths(struct):
      
      if isinstance(struct, Task):
          return struct.output()
      elif isinstance(struct, dict):
          return struct.__class__((k, getpaths(v)) for k, v in six.iteritems(struct))
      elif isinstance(struct, (list, tuple)):
          return struct.__class__(getpaths(r) for r in struct)
      else:
          # Remaining case: assume struct is iterable...
          try:
              return [getpaths(r) for r in struct]
          except TypeError:
              raise Exception('Cannot map %s to Task/dict/list' % str(struct))
docs: Maps all Tasks in a structured data object to their .output().