How to use _get_pivot_iterator method in autotest

Best Python code snippet using autotest_python

model_logic.py

Source:model_logic.py Github

copy

Full Screen

...180 cursor.execute(sql_query, params)181 return cursor.fetchall()182 def _is_relation_to(self, field, model_class):183 return field.rel and field.rel.to is model_class184 def _get_pivot_iterator(self, base_objects_by_id, related_model):185 """186 Determine the relationship between this model and related_model, and187 return a pivot iterator.188 @param base_objects_by_id: dict of instances of this model indexed by189 their IDs190 @returns a pivot iterator, which yields a tuple (base_object,191 related_object) for each relationship between a base object and a192 related object. all base_object instances come from base_objects_by_id.193 Note -- this depends on Django model internals and will likely need to194 be updated when we move to Django 1.x.195 """196 # look for a field on related_model relating to this model197 for field in related_model._meta.fields:198 if self._is_relation_to(field, self.model):199 # many-to-one200 return self._many_to_one_pivot(base_objects_by_id,201 related_model, field)202 for field in related_model._meta.many_to_many:203 if self._is_relation_to(field, self.model):204 # many-to-many205 return self._many_to_many_pivot(206 base_objects_by_id, related_model, field.m2m_db_table(),207 field.m2m_reverse_name(), field.m2m_column_name())208 # maybe this model has the many-to-many field209 for field in self.model._meta.many_to_many:210 if self._is_relation_to(field, related_model):211 return self._many_to_many_pivot(212 base_objects_by_id, related_model, field.m2m_db_table(),213 field.m2m_column_name(), field.m2m_reverse_name())214 raise ValueError('%s has no relation to %s' %215 (related_model, self.model))216 def _many_to_one_pivot(self, base_objects_by_id, related_model,217 foreign_key_field):218 """219 @returns a pivot iterator - see _get_pivot_iterator()220 """221 filter_data = {foreign_key_field.name + '__pk__in':222 base_objects_by_id.keys()}223 for related_object in related_model.objects.filter(**filter_data):224 fresh_base_object = getattr(related_object, foreign_key_field.name)225 # lookup base object in the dict -- we need to return instances from226 # the dict, not fresh instances of the same models227 base_object = base_objects_by_id[fresh_base_object._get_pk_val()]228 yield base_object, related_object229 def _query_pivot_table(self, base_objects_by_id, pivot_table,230 pivot_from_field, pivot_to_field):231 """232 @param id_list list of IDs of self.model objects to include233 @param pivot_table the name of the pivot table234 @param pivot_from_field a field name on pivot_table referencing235 self.model236 @param pivot_to_field a field name on pivot_table referencing the237 related model.238 @returns pivot list of IDs (base_id, related_id)239 """240 query = """241 SELECT %(from_field)s, %(to_field)s242 FROM %(table)s243 WHERE %(from_field)s IN (%(id_list)s)244 """ % dict(from_field=pivot_from_field,245 to_field=pivot_to_field,246 table=pivot_table,247 id_list=','.join(str(id_) for id_248 in base_objects_by_id.iterkeys()))249 cursor = readonly_connection.connection().cursor()250 cursor.execute(query)251 return cursor.fetchall()252 def _many_to_many_pivot(self, base_objects_by_id, related_model,253 pivot_table, pivot_from_field, pivot_to_field):254 """255 @param pivot_table: see _query_pivot_table256 @param pivot_from_field: see _query_pivot_table257 @param pivot_to_field: see _query_pivot_table258 @returns a pivot iterator - see _get_pivot_iterator()259 """260 id_pivot = self._query_pivot_table(base_objects_by_id, pivot_table,261 pivot_from_field, pivot_to_field)262 all_related_ids = list(set(related_id for base_id, related_id263 in id_pivot))264 related_objects_by_id = related_model.objects.in_bulk(all_related_ids)265 for base_id, related_id in id_pivot:266 yield base_objects_by_id[base_id], related_objects_by_id[related_id]267 def populate_relationships(self, base_objects, related_model,268 related_list_name):269 """270 For each instance of this model in base_objects, add a field named271 related_list_name listing all the related objects of type related_model.272 related_model must be in a many-to-one or many-to-many relationship with273 this model.274 @param base_objects - list of instances of this model275 @param related_model - model class related to this model276 @param related_list_name - attribute name in which to store the related277 object list.278 """279 if not base_objects:280 # if we don't bail early, we'll get a SQL error later281 return282 base_objects_by_id = dict((base_object._get_pk_val(), base_object)283 for base_object in base_objects)284 pivot_iterator = self._get_pivot_iterator(base_objects_by_id,285 related_model)286 for base_object in base_objects:287 setattr(base_object, related_list_name, [])288 for base_object, related_object in pivot_iterator:289 getattr(base_object, related_list_name).append(related_object)290class ValidObjectsManager(ExtendedManager):291 """292 Manager returning only objects with invalid=False.293 """294 def get_query_set(self):295 queryset = super(ValidObjectsManager, self).get_query_set()296 return queryset.filter(invalid=False)297class ModelExtensions(object):298 """\...

Full Screen

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run autotest automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful