move _polymorphic_iterator to PolymorphicModelIterable as there is no second compatibility code path anymore

fix_request_path_info
Diederik van der Boor 2018-01-22 15:22:27 +01:00
parent fa3b874a54
commit f7c9df935f
1 changed files with 34 additions and 35 deletions

View File

@ -20,40 +20,6 @@ from .query_translate import translate_polymorphic_field_path, translate_polymor
Polymorphic_QuerySet_objects_per_request = 100 Polymorphic_QuerySet_objects_per_request = 100
def _polymorphic_iterator(queryset, base_iter):
"""
Here we do the same as::
real_results = queryset._get_real_instances(list(base_iter))
for o in real_results: yield o
but it requests the objects in chunks from the database,
with Polymorphic_QuerySet_objects_per_request per chunk
"""
while True:
base_result_objects = []
reached_end = False
# Make sure the base iterator is read in chunks instead of
# reading it completely, in case our caller read only a few objects.
for i in range(Polymorphic_QuerySet_objects_per_request):
try:
o = next(base_iter)
base_result_objects.append(o)
except StopIteration:
reached_end = True
break
real_results = queryset._get_real_instances(base_result_objects)
for o in real_results:
yield o
if reached_end:
return
class PolymorphicModelIterable(ModelIterable): class PolymorphicModelIterable(ModelIterable):
""" """
ModelIterable for PolymorphicModel ModelIterable for PolymorphicModel
@ -66,7 +32,40 @@ class PolymorphicModelIterable(ModelIterable):
base_iter = super(PolymorphicModelIterable, self).__iter__() base_iter = super(PolymorphicModelIterable, self).__iter__()
if self.queryset.polymorphic_disabled: if self.queryset.polymorphic_disabled:
return base_iter return base_iter
return _polymorphic_iterator(self.queryset, base_iter) return self._polymorphic_iterator(base_iter)
def _polymorphic_iterator(self, base_iter):
"""
Here we do the same as::
real_results = queryset._get_real_instances(list(base_iter))
for o in real_results: yield o
but it requests the objects in chunks from the database,
with Polymorphic_QuerySet_objects_per_request per chunk
"""
while True:
base_result_objects = []
reached_end = False
# Make sure the base iterator is read in chunks instead of
# reading it completely, in case our caller read only a few objects.
for i in range(Polymorphic_QuerySet_objects_per_request):
try:
o = next(base_iter)
base_result_objects.append(o)
except StopIteration:
reached_end = True
break
real_results = self.queryset._get_real_instances(base_result_objects)
for o in real_results:
yield o
if reached_end:
return
def transmogrify(cls, obj): def transmogrify(cls, obj):