code: def convert(self, source, destination):
      tmpdir = tempfile.mkdtemp()
      self._log("Temporary dir {} created".format(tmpdir))
  
      try:
          self._log("Prepare csv data")
          csv_data, data_files = self.createCsvData(source)
          if csv_data is not None:
              self._log("Prepare tar file")
              name = os.path.splitext(os.path.basename(source))[0]
              tarfile = self.createTemporaryTar(
                  name, csv_data, data_files, tmpdir
              )
              shutil.copyfile(tarfile, destination)
      finally:
          shutil.rmtree(tmpdir, ignore_errors=True)
          self._log("Temporary dir removed")
  
imports: import boto3
  import csv
  import json
  import os
  import urllib.parse
  import urllib.request
  import shutil
  import tarfile
  import tempfile
  import threading
  import tqdm
label_desc: Use image node_id 5 for calling the Uploader obj's underlying member method code with example usage: obj.convert(source, destination) without return types