def test_nested_value(backend): class MyMovie(Movie): class Meta(Movie.Meta): dbref_includes = ["actor.name"] actor = Actor({'name': 'Robert de Niro'}) movie = MyMovie({'actor': actor}) actor.movies = [movie] backend.save(movie) backend.commit() recovered_actor = backend.get(Actor, {'pk': actor.pk}) assert recovered_actor.movies[0]._lazy assert set(recovered_actor.movies[0].lazy_attributes.keys()) == set( ['pk', 'actor_name']) assert recovered_actor.movies[0].actor_name == actor.name assert recovered_actor.movies[0]['actor_name'] == actor.name assert recovered_actor.movies[0]._lazy #Now we request the name attribute of the actor (which is not lazy), which triggers a revert assert recovered_actor.movies[0].actor.name == actor.name assert recovered_actor.movies[0].actor['name'] == actor.name assert recovered_actor.movies[0]._lazy == False with pytest.raises(AttributeError): assert recovered_actor.movies[0].actor_name with pytest.raises(KeyError): assert recovered_actor.movies[0]['actor_name']
def test_nested_value(backend): class MyMovie(Movie): class Meta(Movie.Meta): dbref_includes = ["actor.name"] actor = Actor({'name' : 'Robert de Niro'}) movie = MyMovie({'actor' : actor}) actor.movies = [movie] backend.save(movie) backend.commit() recovered_actor = backend.get(Actor,{'pk' : actor.pk}) assert recovered_actor.movies[0]._lazy assert set(recovered_actor.movies[0].lazy_attributes.keys()) == set(['pk','actor_name']) assert recovered_actor.movies[0].actor_name == actor.name assert recovered_actor.movies[0]['actor_name'] == actor.name assert recovered_actor.movies[0]._lazy #Now we request the name attribute of the actor (which is not lazy), which triggers a revert assert recovered_actor.movies[0].actor.name == actor.name assert recovered_actor.movies[0].actor['name'] == actor.name assert recovered_actor.movies[0]._lazy == False with pytest.raises(AttributeError): assert recovered_actor.movies[0].actor_name with pytest.raises(KeyError): assert recovered_actor.movies[0]['actor_name']
def test_nested_value(backend): actor = Actor({'name' : 'Robert de Niro'}) movie = Movie({'best_actor' : actor,'title' : 'The Godfather'}) backend.save(actor) actor.movies = [movie] backend.save(actor) backend.commit() backend.save(movie) backend.commit() recovered_actor = backend.get(Actor,{'pk' : actor.pk}) assert recovered_actor == actor assert movie in recovered_actor.movies assert recovered_actor.movies[0] == movie assert 'best_actor' in recovered_actor.movies[0] assert recovered_actor.movies[0].best_actor == recovered_actor recovered_actors = backend.filter(Actor,{'movies.title' : 'The Godfather'}) assert len(recovered_actors) == 1 assert actor in recovered_actors