code: def submit_jobs(self, link, job_dict=None, job_archive=None, stream=sys.stdout):
          
          failed = False
          if job_dict is None:
              job_dict = link.jobs
  
          for job_key, job_details in sorted(job_dict.items()):
              job_config = job_details.job_config
              # clean failed jobs
              if job_details.status == JobStatus.failed:
                  clean_job(job_details.logfile,
                            job_details.outfiles, self._dry_run)
                  # clean_job(job_details.logfile, {}, self._dry_run)
              job_config['logfile'] = job_details.logfile
              new_job_details = self.dispatch_job(
                  link, job_key, job_archive, stream)
              if new_job_details.status == JobStatus.failed:
                  failed = True
                  clean_job(new_job_details.logfile,
                            new_job_details.outfiles, self._dry_run)
              link.jobs[job_key] = new_job_details
          if failed:
              return JobStatus.failed
          return JobStatus.done
docs: Run the `Link` with all of the items job_dict as input.
  
          If job_dict is None, the job_dict will be take from link.jobs
  
          Returns a `JobStatus` enum