code: def Push(self, source_file, device_filename, mtime='0', timeout_ms=None, progress_callback=None, st_mode=None):
          
  
          if isinstance(source_file, str):
              if os.path.isdir(source_file):
                  self.Shell("mkdir " + device_filename)
                  for f in os.listdir(source_file):
                      self.Push(os.path.join(source_file, f), device_filename + '/' + f,
                                progress_callback=progress_callback)
                  return
              source_file = open(source_file, "rb")
  
          with source_file:
              connection = self.protocol_handler.Open(
                  self._handle, destination=b'sync:', timeout_ms=timeout_ms)
              kwargs={}
              if st_mode is not None:
                  kwargs['st_mode'] = st_mode
              self.filesync_handler.Push(connection, source_file, device_filename,
                                         mtime=int(mtime), progress_callback=progress_callback, **kwargs)
          connection.Close()
docs: Push a file or directory to the device.
  
          Args:
            source_file: Either a filename, a directory or file-like object to push to
                         the device.
            device_filename: Destination on the device to write to.
            mtime: Optional, modification time to set on the file.
            timeout_ms: Expected timeout for any part of the push.
            st_mode: stat mode for filename
            progress_callback: callback method that accepts filename, bytes_written and total_bytes,
                               total_bytes will be -1 for file-like objects