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!!