Best Python code snippet using autotest_python
models.py
Source:models.py  
...355            query_set = self._add_custom_select(356                    query_set, 'iteration_index',357                    _quote_name(alias) + '.iteration')358        return query_set, alias359    def _join_iteration_results(self, test_view_query_set, result_keys):360        """Join the given TestView QuerySet to IterationResult for one result.361        The resulting query looks like a TestView query but has one row per362        iteration.  Each row includes all the attributes of TestView, an363        attribute for each key in result_keys and an iteration_index attribute.364        We accomplish this by joining the TestView query to IterationResult365        once per result key.  Each join is restricted on the result key (and on366        the test index, like all one-to-many joins).  For the first join, this367        is the only restriction, so each TestView row expands to a row per368        iteration (per iteration that includes the key, of course).  For each369        subsequent join, we also restrict the iteration index to match that of370        the initial join.  This makes each subsequent join produce exactly one371        result row for each input row.  (This assumes each iteration contains372        the same set of keys.  Results are undefined if that's not true.)373        """374        if not result_keys:375            return test_view_query_set376        query_set, first_alias = self._join_one_iteration_key(377                test_view_query_set, result_keys[0])378        for result_key in result_keys[1:]:379            query_set, _ = self._join_one_iteration_key(query_set, result_key,380                                                        first_alias=first_alias)381        return query_set382    def _join_job_keyvals(self, query_set, job_keyvals):383        for job_keyval in job_keyvals:384            alias = 'job_keyval_' + job_keyval385            keyval_query = JobKeyval.objects.filter(key=job_keyval)386            query_set = Job.objects.join_custom_field(query_set, keyval_query,387                                                       alias)388            query_set = self._add_select_value(query_set, alias)389        return query_set390    def _join_iteration_attributes(self, query_set, iteration_attributes):391        for attribute in iteration_attributes:392            alias = 'iteration_attribute_' + attribute393            attribute_query = IterationAttribute.objects.filter(394                    attribute=attribute)395            query_set = Test.objects.join_custom_field(query_set,396                                                       attribute_query, alias)397            query_set = self._add_select_value(query_set, alias)398        return query_set399    def get_query_set_with_joins(self, filter_data):400        """Add joins for querying over test-related items.401        These parameters are supported going forward:402        * test_attribute_fields: list of attribute names.  Each attribute will403                be available as a column attribute_<name>.value.404        * test_label_fields: list of label names.  Each label will be available405                as a column label_<name>.id, non-null iff the label is present.406        * iteration_result_fields: list of iteration result names.  Each407                result will be available as a column iteration_<name>.value.408                Note that this changes the semantics to return iterations409                instead of tests -- if a test has multiple iterations, a row410                will be returned for each one.  The iteration index is also411                available as iteration_<name>.iteration.412        * machine_label_fields: list of machine label names.  Each will be413                available as a column machine_label_<name>.id, non-null iff the414                label is present on the machine used in the test.415        * job_keyval_fields: list of job keyval names. Each value will be416                available as a column job_keyval_<name>.id, non-null iff the417                keyval is present in the AFE job.418        * iteration_attribute_fields: list of iteration attribute names. Each419                attribute will be available as a column420                iteration_attribute<name>.id, non-null iff the attribute is421                present.422        These parameters are deprecated:423        * include_labels424        * exclude_labels425        * include_attributes_where426        * exclude_attributes_where427        Additionally, this method adds joins if the following strings are428        present in extra_where (this is also deprecated):429        * test_labels430        * test_attributes_host_labels431        @param filter_data: Data by which to filter.432        @return A QuerySet.433        """434        query_set = self.get_query_set()435        test_attributes = filter_data.pop('test_attribute_fields', [])436        for attribute in test_attributes:437            query_set = self._join_test_attribute(query_set, attribute)438        test_labels = filter_data.pop('test_label_fields', [])439        query_set = self._join_test_label_columns(query_set, test_labels)440        machine_labels = filter_data.pop('machine_label_fields', [])441        query_set = self._join_machine_label_columns(query_set, machine_labels)442        iteration_keys = filter_data.pop('iteration_result_fields', [])443        query_set = self._join_iteration_results(query_set, iteration_keys)444        job_keyvals = filter_data.pop('job_keyval_fields', [])445        query_set = self._join_job_keyvals(query_set, job_keyvals)446        iteration_attributes = filter_data.pop('iteration_attribute_fields', [])447        query_set = self._join_iteration_attributes(query_set,448                                                    iteration_attributes)449        # everything that follows is deprecated behavior450        joined = False451        extra_where = filter_data.get('extra_where', '')452        if 'tko_test_labels' in extra_where:453            query_set = self._add_label_joins(query_set)454            joined = True455        include_labels = filter_data.pop('include_labels', [])456        exclude_labels = filter_data.pop('exclude_labels', [])457        if include_labels:...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!!
