code: def __put_key(self, local_file, target_file, acl='public-read', del_after_upload=False, overwrite=True, source="filename"):
          
          action_word = "moving" if del_after_upload else "copying"
  
          try:
              self.k.key = target_file  # setting the path (key) of file in the container
  
              if source == "filename":
                  # grabs the contents from local_file address. Note that it loads the whole file into memory
                  self.k.set_contents_from_filename(local_file, self.AWS_HEADERS)
              elif source == "fileobj":
                  self.k.set_contents_from_file(local_file, self.AWS_HEADERS)
              elif source == "string":
                  self.k.set_contents_from_string(local_file, self.AWS_HEADERS)
              else:
                  raise Exception("%s is not implemented as a source." % source)
              self.k.set_acl(acl)  # setting the file permissions
              self.k.close()  # not sure if it is needed. Somewhere I read it is recommended.
  
              self.printv("%s %s to %s" % (action_word, local_file, target_file))
              # if it is supposed to delete the local file after uploading
              if del_after_upload and source == "filename":
                  try:
                      os.remove(local_file)
                  except:
                      logger.error("Unable to delete the file: ", local_file, exc_info=True)
  
              return True
  
          except:
              logger.error("Error in writing to %s", target_file, exc_info=True)
              return False
docs: Copy a file to s3.