Best Python code snippet using autotest_python
agent_task.py
Source:agent_task.py  
...422        return '%s=%s' % (key, value)423    def _keyval_path(self):424        """Subclasses must override this"""425        raise NotImplementedError426    def _write_keyval_after_job(self, field, value):427        assert self.monitor428        if not self.monitor.has_process():429            return430        self._drone_manager.write_lines_to_file(431            self._keyval_path(), [self._format_keyval(field, value)],432            paired_with_process=self.monitor.get_process())433    def _job_queued_keyval(self, job):434        return 'job_queued', int(time.mktime(job.created_on.timetuple()))435    def _write_job_finished(self):436        self._write_keyval_after_job("job_finished", int(time.time()))437    def _write_keyvals_before_job_helper(self, keyval_dict, keyval_path):438        keyval_contents = '\n'.join(self._format_keyval(key, value)439                                    for key, value in keyval_dict.iteritems())440        # always end with a newline to allow additional keyvals to be written441        keyval_contents += '\n'442        self._drone_manager.attach_file_to_execution(self._working_directory(),443                                                keyval_contents,444                                                file_path=keyval_path)445    def _write_keyvals_before_job(self, keyval_dict):446        self._write_keyvals_before_job_helper(keyval_dict, self._keyval_path())447    def _write_host_keyvals(self, host):448        keyval_path = os.path.join(self._working_directory(), 'host_keyvals',449                                   host.hostname)450        platform, all_labels = host.platform_and_labels()451        all_labels = [ urllib.quote(label) for label in all_labels ]452        keyval_dict = dict(platform=platform, labels=','.join(all_labels))453        self._write_keyvals_before_job_helper(keyval_dict, keyval_path)454class SpecialAgentTask(AgentTask, TaskWithJobKeyvals):455    """456    Subclass for AgentTasks that correspond to a SpecialTask entry in the DB.457    """458    TASK_TYPE = None459    host = None460    queue_entry = None461    def __init__(self, task, extra_command_args):462        super(SpecialAgentTask, self).__init__()463        assert self.TASK_TYPE is not None, 'self.TASK_TYPE must be overridden'464        self.host = rdb_lib.get_hosts([task.host.id])[0]465        self.host.dbg_str = 'Task: %s' % str(task)466        self.queue_entry = None467        if task.queue_entry:468            self.queue_entry = scheduler_models.HostQueueEntry(469                    id=task.queue_entry.id)470            self.host.dbg_str += self.queue_entry.get_dbg_str()471        self.task = task472        self._extra_command_args = extra_command_args473        self.host.metadata = self.get_metadata()474    def get_metadata(self):475        """Get a dictionary that contains task information.476        The return value is a dictionary that includes task information like id,477        name and related job information. The value will be stored in metadata478        database.479        @return: A dictionary containing the task id, name and related job id.480                 If some attributes are failed to be accessed, an empty481                 dictionary will be returned, and error will be logged.482        """483        try:484            metadata = {'task_id':self.task.id, 'task_name':self.task.task,485                        'hostname':self.task.host.hostname}486            if self.task.queue_entry:487                job = self.task.queue_entry.job488                metadata.update(489                        scheduler_models.get_job_metadata(job))490            return metadata491        except AttributeError as e:492            logging.error('Task has missing attribute: %s', e)493            return {}494    def _keyval_path(self):495        return os.path.join(self._working_directory(), self._KEYVAL_FILE)496    def _command_line(self):497        return autoserv_utils._autoserv_command_line(self.host.hostname,498                                                     self._extra_command_args,499                                                     queue_entry=self.queue_entry,500                                                     in_lab=True)501    def _working_directory(self):502        return self.task.execution_path()503    @property504    def owner_username(self):505        if self.task.requested_by:506            return self.task.requested_by.login507        return None508    def prolog(self):509        super(SpecialAgentTask, self).prolog()510        self.task.activate()511        self._write_host_keyvals(self.host)512    def _fail_queue_entry(self):513        assert self.queue_entry514        if self.queue_entry.meta_host:515            return # don't fail metahost entries, they'll be reassigned516        self.queue_entry.update_from_database()517        if self.queue_entry.status != models.HostQueueEntry.Status.QUEUED:518            return # entry has been aborted519        self._actually_fail_queue_entry()520    # TODO(milleral): http://crbug.com/268607521    # All this used to be a part of _fail_queue_entry.  The522    # exact semantics of when one should and should not be failing a queue523    # entry need to be worked out, because provisioning has placed us in a524    # case where we want to fail a queue entry that could be requeued,525    # which makes us fail the two above if statements, and thus526    # _fail_queue_entry() would exit early and have no effect.527    # What's left here with _actually_fail_queue_entry is a hack to be able to528    # bypass the checks and unconditionally execute the code.529    def _actually_fail_queue_entry(self):530        self.queue_entry.set_execution_subdir()531        queued_key, queued_time = self._job_queued_keyval(532            self.queue_entry.job)533        self._write_keyval_after_job(queued_key, queued_time)534        self._write_job_finished()535        # copy results logs into the normal place for job results536        self.monitor.try_copy_results_on_drone(537                source_path=self._working_directory() + '/',538                destination_path=self.queue_entry.execution_path() + '/')539        pidfile_id = self._drone_manager.get_pidfile_id_from(540                self.queue_entry.execution_path(),541                pidfile_name=drone_manager.AUTOSERV_PID_FILE)542        self._drone_manager.register_pidfile(pidfile_id)543        if self.queue_entry.job.parse_failed_repair:544            self._parse_results([self.queue_entry])545        else:546            self._archive_results([self.queue_entry])547        # Also fail all other special tasks that have not yet run for this HQE...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
