code: def gtf_to_fasta(gtf_file, ref_fasta, cds=False, out_file=None):
      
      if out_file and file_exists(out_file):
          return out_file
  
      if not out_file:
          out_file = tempfile.NamedTemporaryFile(delete=False, suffix=".fa").name
  
      tmp_file = out_file + ".tmp"
      if cds:
          cmd = "gffread -g {ref_fasta} -x {tx_tmp_file} {gtf_file}"
      else:
          cmd = "gffread -g {ref_fasta} -w {tx_tmp_file} {gtf_file}"
      message = "Converting %s to FASTA format." % gtf_file
      with file_transaction(tmp_file) as tx_tmp_file:
          do.run(cmd.format(**locals()), message)
  
      transcript = ""
      skipping = False
      with file_transaction(out_file) as tx_out_file:
          with open(tmp_file) as in_handle, open(tx_out_file, "w") as out_handle:
              for line in in_handle:
                  if line.startswith(">"):
                      cur_transcript = line.split(" ")[0][1:]
                      if transcript == cur_transcript:
                          logger.info("Transcript %s has already been seen, skipping this "
                                      "version." % cur_transcript)
                          skipping = True
                      else:
                          transcript = cur_transcript
                          skipping = False
                      line = ">" + transcript + "\n"
                  if not skipping:
                      out_handle.write(line)
      os.remove(tmp_file)
      return out_file
docs: convert a GTF to FASTA format if cds=True, use the start/stop codons
      to output only the CDS
      handles malformed FASTA files where a single transcript is repeated multiple
      times by just using the first one