Best Python code snippet using autotest_python
host_scheduler.py
Source:host_scheduler.py  
...138    def _is_acl_accessible(self, host_id, queue_entry):139        job_acls = self._job_acls.get(queue_entry.job_id, set())140        host_acls = self._host_acls.get(host_id, set())141        return len(host_acls.intersection(job_acls)) > 0142    def _check_job_dependencies(self, job_dependencies, host_labels):143        missing = job_dependencies - host_labels144        return len(missing) == 0145    def _check_only_if_needed_labels(self, job_dependencies, host_labels,146                                     queue_entry):147        if not queue_entry.meta_host:148            # bypass only_if_needed labels when a specific host is selected149            return True150        for label_id in host_labels:151            label = self._labels[label_id]152            if not label.only_if_needed:153                # we don't care about non-only_if_needed labels154                continue155            if queue_entry.meta_host == label_id:156                # if the label was requested in a metahost it's OK157                continue158            if label_id not in job_dependencies:159                return False160        return True161    def _check_atomic_group_labels(self, host_labels, queue_entry):162        """163        Determine if the given HostQueueEntry's atomic group settings are okay164        to schedule on a host with the given labels.165        @param host_labels: A list of label ids that the host has.166        @param queue_entry: The HostQueueEntry being considered for the host.167        @returns True if atomic group settings are okay, False otherwise.168        """169        return (self._get_host_atomic_group_id(host_labels, queue_entry) ==170                queue_entry.atomic_group_id)171    def _get_host_atomic_group_id(self, host_labels, queue_entry=None):172        """173        Return the atomic group label id for a host with the given set of174        labels if any, or None otherwise.  Raises an exception if more than175        one atomic group are found in the set of labels.176        @param host_labels: A list of label ids that the host has.177        @param queue_entry: The HostQueueEntry we're testing.  Only used for178                extra info in a potential logged error message.179        @returns The id of the atomic group found on a label in host_labels180                or None if no atomic group label is found.181        """182        atomic_labels = [self._labels[label_id] for label_id in host_labels183                         if self._labels[label_id].atomic_group_id is not None]184        atomic_ids = set(label.atomic_group_id for label in atomic_labels)185        if not atomic_ids:186            return None187        if len(atomic_ids) > 1:188            logging.error('More than one Atomic Group on HQE "%s" via: %r',189                          queue_entry, atomic_labels)190        return atomic_ids.pop()191    def _get_atomic_group_labels(self, atomic_group_id):192        """193        Lookup the label ids that an atomic_group is associated with.194        @param atomic_group_id - The id of the AtomicGroup to look up.195        @returns A generator yeilding Label ids for this atomic group.196        """197        return (id for id, label in self._labels.iteritems()198                if label.atomic_group_id == atomic_group_id199                and not label.invalid)200    def _get_eligible_host_ids_in_group(self, group_hosts, queue_entry):201        """202        @param group_hosts - A sequence of Host ids to test for usability203                and eligibility against the Job associated with queue_entry.204        @param queue_entry - The HostQueueEntry that these hosts are being205                tested for eligibility against.206        @returns A subset of group_hosts Host ids that are eligible for the207                supplied queue_entry.208        """209        return set(host_id for host_id in group_hosts210                   if self.is_host_usable(host_id)211                   and self.is_host_eligible_for_job(host_id, queue_entry))212    def is_host_eligible_for_job(self, host_id, queue_entry):213        if self._is_host_invalid(host_id):214            # if an invalid host is scheduled for a job, it's a one-time host215            # and it therefore bypasses eligibility checks. note this can only216            # happen for non-metahosts, because invalid hosts have their label217            # relationships cleared.218            return True219        job_dependencies = self._job_dependencies.get(queue_entry.job_id, set())220        host_labels = self._host_labels.get(host_id, set())221        return (self._is_acl_accessible(host_id, queue_entry) and222                self._check_job_dependencies(job_dependencies, host_labels) and223                self._check_only_if_needed_labels(224                    job_dependencies, host_labels, queue_entry) and225                self._check_atomic_group_labels(host_labels, queue_entry))226    def _is_host_invalid(self, host_id):227        host_object = self._hosts_available.get(host_id, None)228        return host_object and host_object.invalid229    def _schedule_non_metahost(self, queue_entry):230        if not self.is_host_eligible_for_job(queue_entry.host_id, queue_entry):231            return None232        return self._hosts_available.pop(queue_entry.host_id, None)233    def is_host_usable(self, host_id):234        if host_id not in self._hosts_available:235            # host was already used during this scheduling cycle236            return False...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!!
