docs: def _data_execute(self, data, program, executor):
          """Execute the Data object.
  
          The activities carried out here include target directory
          preparation, executor copying, setting serialization and actual
          execution of the object.
  
          :param data: The :class:`~resolwe.flow.models.Data` object to
              execute.
          :param program: The process text the manager got out of
              execution engine evaluation.
          :param executor: The executor to use for this object.
          """
          if not program:
              return
  
          logger.debug(__("Manager preparing Data with id {} for processing.", data.id))
  
          # Prepare the executor's environment.
          try:
              executor_env_vars = self.get_executor().get_environment_variables()
              program = self._include_environment_variables(program, executor_env_vars)
              data_dir = self._prepare_data_dir(data)
              executor_module, runtime_dir = self._prepare_executor(data, executor)
  
              # Execute execution engine specific runtime preparation.
              execution_engine = data.process.run.get('language', None)
              volume_maps = self.get_execution_engine(execution_engine).prepare_runtime(runtime_dir, data)
  
              self._prepare_context(data.id, data_dir, runtime_dir, RUNTIME_VOLUME_MAPS=volume_maps)
              self._prepare_script(runtime_dir, program)
  
              argv = [
                  '/bin/bash',
                  '-c',
                  self.settings_actual.get('FLOW_EXECUTOR', {}).get('PYTHON', '/usr/bin/env python')
                  + ' -m executors ' + executor_module
              ]
          except PermissionDenied as error:
              data.status = Data.STATUS_ERROR
              data.process_error.append("Permission denied for process: {}".format(error))
              data.save()
              return
          except OSError as err:
              logger.error(__(
                  "OSError occurred while preparing data {} (will skip): {}",
                  data.id, err
              ))
              return
  
          # Hand off to the run() method for execution.
          logger.info(__("Running {}", runtime_dir))
          self.run(data, runtime_dir, argv)