remove a thought experiment.

This commit is contained in:
Gabor Körber 2021-06-02 10:24:58 +02:00
parent bed4ae6bbd
commit c899d0b8b7

View File

@ -89,46 +89,3 @@ class TestQueryBuilder(TestCase):
self.assertEqual(len(entities), len(self.celestials)) self.assertEqual(len(entities), len(self.celestials))
self.assertEqual(callback_one.call_count, len(self.celestials)) self.assertEqual(callback_one.call_count, len(self.celestials))
self.assertEqual(callback_two.call_count, len(self.celestials)) self.assertEqual(callback_two.call_count, len(self.celestials))
def test_double_value_technique(self):
"""
Records open a new sort of technique for late calling details from dataclasses.
imagine you have a dataclass called EntityIndex, which has only one field from the database: id.
however it has custom fields, where you store a lambda expression.
you could e.g. use it in a subquery, while still access the data.
however this will hit the database twice if you evaluate the iterator yourself, as the lambda is not lazy.
note this is mainly a thought experiment.
"""
planet_queryset = Celestial.objects.filter(orbits__name='Sol', celestial_type__lte=4)
@dataclass
class DetailedEntity:
id: int
name: str
@dataclass
class IndexEntity:
id: int
detail: DetailedEntity
def get_details_exec(data):
return Celestial.objects.filter(pk=data.get('id')).records(DetailedEntity).first()
get_details = mock.Mock(side_effect=get_details_exec)
# retrieves data per key only.
my_planets = planet_queryset.records(IndexEntity, detail=Lambda(get_details))
my_moons = Celestial.objects.filter(orbits__in=my_planets).records(IndexEntity, detail=Lambda(get_details)) # legal
# django does not consume the iterator internally for subqueries:
self.assertEqual(get_details.call_count, 0)
# consume it ourselves...
for planet in my_planets:
self.assertIsNotNone(planet.detail.name)
self.assertEqual(get_details.call_count, len(self.planets))
# but...
self.assertEqual(len(my_moons), len(self.moons))
self.assertEqual(get_details.call_count, len(self.planets) + len(self.moons))