Best Python code snippet using autotest_python
agent_task.py
Source:agent_task.py  
...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 thus...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!!
