docs: def get_full_returns(self, jid, minions, timeout=None):
          '''
          This method starts off a watcher looking at the return data for
          a specified jid, it returns all of the information for the jid
          '''
          # TODO: change this from ret to return... or the other way.
          #       Its inconsistent, we should pick one
  
          ret = {}
          # create the iterator-- since we want to get anyone in the middle
          event_iter = self.get_event_iter_returns(jid, minions, timeout=timeout)
  
          try:
              data = self.returners['{0}.get_jid'.format(self.opts['master_job_cache'])](jid)
          except Exception as exc:
              raise SaltClientError('Returner {0} could not fetch jid data. '
                                    'Exception details: {1}'.format(
                                        self.opts['master_job_cache'],
                                        exc))
          for minion in data:
              m_data = {}
              if 'return' in data[minion]:
                  m_data['ret'] = data[minion].get('return')
              else:
                  m_data['ret'] = data[minion].get('return')
              if 'out' in data[minion]:
                  m_data['out'] = data[minion]['out']
              if minion in ret:
                  ret[minion].update(m_data)
              else:
                  ret[minion] = m_data
  
          # if we have all the minion returns, lets just return
          if len(set(ret).intersection(minions)) >= len(minions):
              return ret
  
          # otherwise lets use the listener we created above to get the rest
          for event_ret in event_iter:
              # if nothing in the event_ret, skip
              if event_ret == {}:
                  time.sleep(0.02)
                  continue
              for minion, m_data in six.iteritems(event_ret):
                  if minion in ret:
                      ret[minion].update(m_data)
                  else:
                      ret[minion] = m_data
  
              # are we done yet?
              if len(set(ret).intersection(minions)) >= len(minions):
                  return ret
  
          # otherwise we hit the timeout, return what we have
          return ret