docs: def _prepare_executor(self, data, executor):
          """Copy executor sources into the destination directory.
  
          :param data: The :class:`~resolwe.flow.models.Data` object being
              prepared for.
          :param executor: The fully qualified name of the executor that
              is to be used for this data object.
          :return: Tuple containing the relative fully qualified name of
              the executor class ('relative' to how the executor will be
              run) and the path to the directory where the executor will
              be deployed.
          :rtype: (str, str)
          """
          logger.debug(__("Preparing executor for Data with id {}", data.id))
  
          # Both of these imports are here only to get the packages' paths.
          import resolwe.flow.executors as executor_package
  
          exec_dir = os.path.dirname(inspect.getsourcefile(executor_package))
          dest_dir = self._get_per_data_dir('RUNTIME_DIR', data.location.subpath)
          dest_package_dir = os.path.join(dest_dir, 'executors')
          shutil.copytree(exec_dir, dest_package_dir)
          dir_mode = self.settings_actual.get('FLOW_EXECUTOR', {}).get('RUNTIME_DIR_MODE', 0o755)
          os.chmod(dest_dir, dir_mode)
  
          class_name = executor.rpartition('.executors.')[-1]
          return '.{}'.format(class_name), dest_dir